我有一个类似"2(5x+4) + 3(2x-1)"
的纯文本输入,我需要扩展和简化它。似乎sympy
要求将其作为由python类型组成的python对象输入。有没有一种方法可以自动解析它/不需要它的库,因此我可以给它提供字符串,并以一种人类可读的格式给出答案?
sympy已经在sympy.parsing.sympy_parser.parse_expr
下内置了这样的解析器。为了获得输入语句所需的结果,您还必须添加implicit_multiplication
转换(因为sympy否则将不会生成对2(
和5x
有意义的语句):
from sympy.parsing.sympy_parser import (
parse_expr,
standard_transformations,
implicit_multiplication,
)
parse_expr("2(5x+4) + 3(2x-1)", transformations=standard_transformations + (implicit_multiplication,))
您想使用sympify函数,您的表情将像这样:
sympify('2*(5*x+4) + 3*(2*x-1)')
您需要在字符串中的元素之间进行操作才能进行解析。
所以而不是:
"2(5x+4) + 3(2x-1)"
字符串应该是:
"2*(5*x+4) + 3*(2*x-1)"
代码
from sympy import simplify, Symbol
s = "2*(5*x+4) + 3*(2*x-1)" # Revised input string
ns = {} # local symbol table
ns["x"] = Symbol("x") # Add x as a local symbol
print(simplify(s, locals = ns)) # Parse string using local symbols
输出
16*x + 5