繁体   English   中英

使用关系运算符评估表达式时,行为与症状不一致

[英]Inconsistent behavior with sympify when evaluating expressions with relational operators

当我使用sympify解析一个大于运算符的表达式时,我得到了一个以StrictGreaterThan为根的表达式。 但是,用==运算符代替, sympify将表达式评估为布尔False。 如何避免sympy使用==评估表达式,以便像使用>运算符一样获得通用表达式?

from sympy import *

In [2]: s1 = 'a - 4 > b + 5'

In [3]: expr1 = sympify(s1)

In [4]: type(expr1)

Out[4]: sympy.core.relational.StrictGreaterThan

In [5]: s2 = 'a - 4 == b + 5'

In [6]: expr2 = sympify(s2)

In [7]: type(expr2)

Out[7]: bool

我在使用sympy时解决此问题的一种方法是将RHS引入LHS,然后将字符串sympify()。
即将LHS - RHS LHS == RHS更改为LHS - RHS

exprStr =  'a - 4 == b + 5'
indOfEq = exprStr.find('==')
if indOfEq != -1:
   splitExpr  = exprStr.split('=')
   if len(splitExpr)==2:
      exprStr = splitExpr[0]+'-('+splitExpr[1]+')'
expr2 = sympify(exprStr )

http://docs.sympy.org/dev/gotchas.html中所述

双等号(==)用于测试相等性。 但是,这将精确地测试表达式,而不是符号测试。

您可以使用sympy.Eq ,如下所示

In [54]: sympy.Eq(sympy.abc.a - 3, sympy.abc.b + 5)
Out[54]: a - 3 == b + 5

In [55]: sympy.GreaterThan(sympy.abc.a - 3, sympy.abc.b + 5)
Out[55]: a - 3 >= b + 5

无论如何,这似乎确实前后矛盾。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM