[英]Boolean operation with symbol in Sympy
對符號執行布爾變量的布爾運算會產生TypeError
,但反之則沒有問題:
>>> from sympy import *
>>> x = Symbol('x', bool=True)
>>> x ^ True
Not(x)
>>> True ^ x
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
True ^ x
TypeError: unsupported operand type(s) for ^: 'bool' and 'Symbol'
我可以嘗試捕獲:
try :
print True ^ x
except TypeError:
print x ^ True
Not(x)
但是,對於我當前的任務,不可能用try-except
我必須處理約200個符號。 我該如何實現?
這是一個錯誤,已在SymPy的開發版本中修復,並將在下一版本中修復。 如果您不能使用git版本並且迫不及待,則一種解決方法是在sympy.logic.boolalg.Boolean中對__rxor __rxor__
(等等)進行sympy.logic.boolalg.Boolean
,使其等於sympy.logic.boolalg.Boolean.__xor__
。
In [1]: from sympy.logic.boolalg import Boolean
In [2]: Boolean.__rxor__ = Boolean.__xor__
In [3]: True ^ x
Out[3]: ¬ x
順便說一句, Symbol('x', bool=True)
不執行任何操作。 它在Symbol中添加了假設x.is_bool
,但是由於這不是SymPy知道的真實假設,因此它不會做任何事情。
這很丑陋,但它應該做您想要的:
expressions = [
r'S[15] ^ (S[19] & S[72]) ^ S[112]',
]
for e in expressions:
try:
eval(e) # Do your thing
except TypeError:
pass
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.