python - 为什么我用 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
有人知道为什么吗?我该如何解决?
先感谢您。
解决方案
尽管这两个表达式打印相同,但它们的内部表示不同,因为以不同的顺序存储 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
推荐阅读
- mysql - 从另一个 MYSQL 表中更新列,不包括现有数据
- prolog - 函数接受一个元素和一个列表并检查列表的长度是否等于元素
- javascript - 试图为特定场景建立一个随机变量,但结果似乎忽略了“if”语句
- python - 执行if条件嵌套在python for循环中的有效方法
- python - 使用 python-docx 访问其他段落样式属性
- python - 获取图中的 X,Y 位置(不在图中)
- c - 操作系统开发,浮点除法问题导致 NaN
- flutter - ChangeNotifier 侦听器和处置。内存泄漏?
- asp.net-core - ModelState.IsValid() 即使在之前的 ModelState 关闭后也不会验证
- go - fabric-sdk-go.beta3 执行 LifecycleApproveCC 失败