如何在Python中使用sympy计算表达式
我想用Python里的sympy库来计算下面的表达式。
exp = '(a+b)*40-(c-a)/0.5'
在这个例子中,a=6
,b=5
,c=2
,我该怎么用sympy来计算这个表达式呢?请帮帮我。
5 个回答
7
我知道上面已经有人回答过这个问题,但如果你遇到一个包含未知符号的字符串表达式,并且需要访问这些符号,下面是我用的代码。
# sympy.S is a shortcut to sympify
from sympy import S, Symbol
# load the string as an expression
expression = S('avar**2 + 3 * (anothervar / athirdvar)')
# get the symbols from the expression and convert to a list
# all_symbols = ['avar', 'anothervar', 'athirdvar']
all_symbols = [str(x) for x in expression.atoms(Symbol)]
# do something with the symbols to get them into a dictionary of values
# then we can find the result. e.g.
# symbol_vals = {'avar': 1, 'anothervar': 2, 'athirdvar': 99}
result = expression.subs(symbols_vals)
15
你可以使用 模块 sympy.parsing.sympy_parser
中的 parse_expr()
函数 将你的字符串转换成一个 sympy 表达式。
>>> from sympy.abc import a, b, c
>>> from sympy.parsing.sympy_parser import parse_expr
>>> sympy_exp = parse_expr('(a+b)*40-(c-a)/0.5')
>>> sympy_exp.evalf(subs={a:6, b:5, c:2})
448.000000000000
38
文档在这里:http://docs.sympy.org/。你真的应该看看!
要“计算”你的表达式,可以写类似下面的代码:
from sympy import Symbol
a = Symbol("a")
b = Symbol("b")
c = Symbol("c")
exp = (a+b)*40-(c-a)/0.5
就这样。如果你想要的“计算”是别的意思,你也可以解这个方程 exp = 0:
sympy.solve(exp)
> {a: [0.0476190476190476*c - 0.952380952380952*b],
> b: [0.05*c - 1.05*a],
> c: [20.0*b + 21.0*a]}
对于其他的内容,你真的应该看看文档。也许可以从这里开始:http://docs.sympy.org/0.7.1/tutorial.html#tutorial
更新:因为你在问题中添加了 a、b、c 的值,你可以把这个加到解决方案中:
exp.evalf(subs={a:6, b:5, c:2})