3

我遇到了一个问题。一个字符串作为输入说

input_string = "12345 + x = x * 5 + (1+x)* x + (1+18/100)"

并使用 python 获取 x 的输出。我无法弄清楚这件事的逻辑。

4

2 回答 2

2

这是您输入的完整 SymPy 示例:

from sympy import Symbol, solve, Eq
from sympy.parsing.sympy_parser import parse_expr

input_string = "12345 + x = x * 5 + (1+x)* x + (1+18/100)"
x = Symbol('x', real=True)
lhs = parse_expr(input_string.split('=')[0], local_dict={'x':x})
rhs = parse_expr(input_string.split('=')[1], local_dict={'x':x})

print(lhs, "=", rhs)
sol = solve(Eq(lhs, rhs), x)
print(sol)
print([s.evalf() for s in sol])

这输出:

x + 12345 = x*(x + 1) + 5*x + 59/50
[-5/2 + 9*sqrt(15247)/10, -9*sqrt(15247)/10 - 5/2]
[108.630868798908, -113.630868798908]

请注意,它solve()给出了解决方案列表。SymPy 通常不会评估分数和平方根,因为它更喜欢不损失精度的解决方案。evalf()计算这些表达式的浮点值。

于 2019-11-12T09:31:37.633 回答
1

好吧,那个例子显示了一个二次方程,它可能没有解、一个解或两个解。您必须象征性地重新排列这些术语才能得出

input_string = "x**2 + 5*x - 12345 + (118/100)"

但这意味着您需要实现乘法、加法、减法和可能的除法规则。至少对于 Python,有一个名为SymPy的库,它可以解析此类字符串并提供一个表达式,您可以评估甚至求解

于 2019-11-12T01:07:21.523 回答