Python 使用关系运算符计算表达式时与sympify不一致的行为
当我使用sympify解析一个带有大于运算符的表达式时,我得到一个根为StrictGreaterThan的表达式。但是,替换Python 使用关系运算符计算表达式时与sympify不一致的行为,python,sympy,Python,Sympy,当我使用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.co
==
运算符,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
我在使用Symphy时解决这个问题的一种方法是将RHS带到LHS,然后对字符串进行symphy()。
i、 e.将
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 )
我在使用Symphy时解决这个问题的一种方法是将RHS带到LHS,然后对字符串进行symphy()。
i、 e.将
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 )
如中所述
双等号(=)用于测试相等性。但是,
准确地测试表达式,而不是象征性地测试表达式
您可以使用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
无论如何,它看起来确实不一致。如中所述
双等号(=)用于测试相等性。但是,
准确地测试表达式,而不是象征性地测试表达式
您可以使用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
不管怎样,这看起来真的不一致