Python 3.x 如何使用Symphy在Python 3中求解方程?

Python 3.x 如何使用Symphy在Python 3中求解方程?,python-3.x,math,sympy,equation-solving,Python 3.x,Math,Sympy,Equation Solving,我对Python和Symphy都有新的了解,我试图解决一个方程;用户介绍方程式和“x”的值。示例:等式:x**2+x*3+1,x=4,因此应在等式的“x”上替换4,并计算结果 这就是我一直在尝试的: import sympy from sympy.solvers import solve from sympy.core.function import Derivative from sympy.core.relational import Eq from sympy.core.symbol im

我对Python和Symphy都有新的了解,我试图解决一个方程;用户介绍方程式和“x”的值。示例:等式:x**2+x*3+1,x=4,因此应在等式的“x”上替换4,并计算结果

这就是我一直在尝试的:

import sympy
from sympy.solvers import solve
from sympy.core.function import Derivative
from sympy.core.relational import Eq
from sympy.core.symbol import Symbol

x = Symbol('x')

info = input("Introduce the equation and the value of /'x' \nEg: x**3+x**2+1 9\n")

infoList = info.split()

equation = infoList[0]
x_value = infoList[1]

expr = equation
eqResult = expr.subs(x, x_value)

print(eqResult)
错误在于作为str对象的
expr
没有属性
subs
。 感谢您的帮助

更新

函数
eval()
工作正常,但是否有风险较小的解决方案? 我一直在做其他事情,并试图计算函数的导数:

x = Symbol('x')

info = input("Introduce the equation and the value of /'x' \nEg: x**3+x**2+1 9\n")

infoList = info.split()

equation = infoList[0]
x_value = infoList[1]

exprDerivada = Derivative(equation, x)
resultDerivate = exprDerivada.doit().subs({x:x_value})
上面的代码给出了一个函数的第一个导数的结果,但方程是可以接受的,因为它没有函数:
eval()


再次感谢您的帮助。

您发送的字符串对象实际上没有
subs
属性
使用
eval(expr).subs(…)
将字符串转换为数学表达式。

然而,使用
eval()
是一种危险的东西,因为它几乎可以执行任何事情。因此,请确保正确保护用户输入,否则您的系统可能会被恶意用户输入破坏。有关详细解释,请参阅答案。

@Mayeul\u sgc好的,我明白了,有没有风险较小的解决方案?此外,我还做了其他操作:我尝试使用相同的输入方法计算函数的导数,它不需要函数
eval()
,可以很好地处理:
导数(等式,x)
,我更新了问题,不管怎样,你的答案就是我需要的。你可以使用
simpleeval
软件包,但我自己从来没有用过。如果答案回答了您的问题,请毫不犹豫地标记为已解决,您可以使用sympy的
parse_expr
功能。