簡體   English   中英

Sympy中帶符號的布爾運算

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM