2017-02-03 21 views
1

我正在使用python和Sympy。SAT驗證器python

我有以下格式的規則:Or(x,And(y,z))。 不幸的是,Sympy subsxreplace函數沒有提供足夠快的實現來驗證上述規則是否滿足x = False,y = True和z = True。

如何將此表達式有效地轉換爲給定x,y,z和規則的其他庫,並且我將得到True/False這個賦值是否滿足規則?

回答

0

,你可以做,在純Python中的2種方式(與x=True/False, y=True/False, z=True/False):

x or (y and z) 

或(如0 == False, 1 == True):

x | (y & z) 

然後你可以遍歷所有組合搭配:

from itertools import product 

for x, y, z in product((True, False), repeat=3): 
    print(x, y, z) 
    print(x or (y and z)) 
    print(x | (y & z)) 
    print() 

爲了將sympy函數轉換爲python expr分裂國家,你可以嘗試lambdify module

from sympy import lambdify, Or, And, var 

x, y, z = var('x y z') 
or_and = lambdify((x, y, z), Or(x, And(y, z))) 
print(or_and(True, False, False)) 

希望儘可能多地希望加快你的問題了......

+0

這些都是很好的建議,但問題是如何有效地轉換成什麼樣的表達Sympy爲以你建議的新形式。 –

+0

@JackStevens:好的,誤解了,對不起。添加了更新。希望有所幫助。 –

+0

感謝您的建議,它看起來不錯。我試圖在我的代碼中實現它,導致了另一個問題,我發佈了另一個stackoverflow [問題](https://stackoverflow.com/questions/42045906/typeerror-return-arrays-must-be-of-arraytype -use-lambdify-of-sympy-in-python)for。 –