首页 > 解决方案 > 为什么我用 SymPy 的 parse_expr 得到这个结果

问题描述

我写了以下代码:

simplification = parse_expr(str_expression, evaluate=True)
expression = parse_expr(str_expression, evaluate=False)

if expression == simplification:
   msg = "Couldn't simplify!"
else:
   msg = "Simplified:"

我认为如果表达式无论是否被评估都是相同的,那一定意味着它已经尽可能地简化了。但由于某种原因,对于

str_expression = "s+5"

我知道这个表达式是错误的:

expression == simplification

有人知道为什么吗?我该如何解决?

先感谢您。

标签: pythonparsingsympyexpr

解决方案


尽管这两个表达式打印相同,但它们的内部表示不同,因为以不同的顺序存储 args。该doit方法通常应该撤消以下效果evaluate=False

In [10]: expression
Out[10]: s + 5

In [11]: simplification
Out[11]: s + 5

In [12]: expression.args
Out[12]: (s, 5)

In [13]: simplification.args
Out[13]: (5, s)

In [14]: expression.doit().args
Out[14]: (5, s)

In [15]: expression.doit() == simplification
Out[15]: True

推荐阅读