在 python 中使用 if、else 和 while 语句求解单变量方程

Solve single variable equation using if, else and while statements in python

我正在辅导一名 7 年级学生的基础编程和数学。 class 作业需要学生完成的问题之一是 "create a program to solve a given single variable linear equation"。学生必须使用 python 并且只能使用 ifelsewhile 语句。该程序可以包含用户定义的函数和列表,但不能导入任何库,如 regex、sympy、numpy 等。

该程序应该能够求解这些示例方程:

我试过:对于字符串中的每个字符,记下数字、运算符、等于号和变量。将变量及其系数复制到一个新字符串中,将常量及其符号复制到另一个字符串中。我希望我最终能从每个字符串中提取整数并求解 x 的方程。但我没有正确捕捉多位数的数字。带括号的方程完全难倒了我。无法使用正则表达式或 sympy 是痛苦的!

我正在寻找解决此问题的 pythonic 解决方案(如果存在)。

我觉得这对一个 7 年级的学生来说是一个非常困难的问题,因为我的研究生和本科生朋友还没有想出解决方案。如果没有可用的编程解决方案,有关如何进行的任何建议都会有所帮助。

谢谢。

虽然完全可以建立一个有限自动机来求解一个表达式,但这并不是一件容易的事。

我自己有很多与构建语义或语法解析器相关的作业,但通常是在 C 中完成的:https://codereview.stackexchange.com/questions/112620/simple-expression-calculator-in-c

尽管如此,如果您接受 clever/dangerous/bad-practice 解决方案:

def solve_expression(expr, var="x"):
    expr = expr.replace(var, "1j")
    left, right = map(eval, expr.split("="))

    return (right.real-left.real)/(left.imag-right.imag)

print(solve_expression("2*x - 5 = 8"))
print(solve_expression("4*x + 3 = 3*x - 10"))
print(solve_expression("11*x = 2 - (1/5)*x"))
print(solve_expression("4*(x + 2) = 5*(x + 9)"))

想法是将自由变量转换为虚数单位,让 python 解释器完成剩下的工作。