根据字符串输入展开和简化表达式

问题描述 投票:2回答:2

我有一个类似"2(5x+4) + 3(2x-1)"的纯文本输入,我需要扩展和简化它。似乎sympy要求将其作为由python类型组成的python对象输入。有没有一种方法可以自动解析它/不需要它的库,因此我可以给它提供字符串,并以一种人类可读的格式给出答案?

python python-3.x parsing math sympy
2个回答
1
投票

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,))

1
投票

您想使用sympify函数,您的表情将像这样:

sympify('2*(5*x+4) + 3*(2*x-1)')

0
投票

您需要在字符串中的元素之间进行操作才能进行解析。

所以而不是:

"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
© www.soinside.com 2019 - 2024. All rights reserved.