我的任務是編寫一個函數解釋,其中包含兩個參數,一個有效的表達式和一個解釋,如果整個表達式在此特定解釋中爲真,則給出真值。邏輯常量和表達式應該作爲字符串進行管理,因此您需要爲布爾操作實現它們自己的函數。邏輯值解釋函數返回不正確的結果
請注意,函數應該返回「true」或「false」不是True或False。
下面是一些可能的輸入和輸出:
>>> interpret(["door_open", "AND", "cat_gone"],
{"door_open" : "false", "cat_gone" : "true", "cat_asleep" : "true"})
'false'
>>> interpret(["cat_asleep", "OR", ["NOT", "cat_gone"]],
{"door_open" : "false", "cat_gone" : "true", "cat_asleep" : "true"})
'true'
>>> interpret(["true", "OR", "true"], {})
'true'
>>> interpret("cat_gone", {"door_open": "false", "cat_gone": "true"})
'true'
>>> interpret(["NOT", ["NOT", ["NOT", ["cat_asleep", "OR", ["NOT", "cat_asleep"]]]]],
{"cat_asleep": "false"})
'false'
>>> interpret(["NOT", "AND", "true"], {"NOT":"true"})
'true'
>>> interpret(["NOT", "AND"], {"AND": "false"})
'true'
所以這是到這裏我的代碼,它的工作原理上面顯示的第一個和最後一個案例,但在所有其他人,我不是得到錯誤的輸出或根本沒有所有。這裏有什麼問題,我該如何解決?
def and_operator(statement, values):
if isinstance(statement[0], str) and isinstance(statement[2], str):
statement[0] = (statement[0], values)
statement[2] = (statement[2], values)
return "true" if statement[0] == "true" and statement[2] == "true" else "false"
if isinstance(statement[0], str):
return and_operator()
return interpret(statement[0], values), interpret(statement[2], values)
def or_operator(statement, values):
if isinstance(statement[0], str) and isinstance(statement[2], str):
statement[0] = (statement[0], values)
statement[2] = (statement[2], values)
return "true" if statement[0] == "true" or statement[2] == "true" else "false"
def not_operator(expr, value):
if isinstance(expr[1], str):
return "false" if expr[1] == "true" else "true"
return interpret(expr[1:], value)
def real_values(element, interp):
if element in interp:
element = interp[element]
return element
def item_is_list(e, i):
return True if isinstance(e[i], list) else False
def interpret(statement, interpretation):
length = len(statement)
if item_is_list(statement, 0):
return statement
if length == 3:
if statement[1] == "AND":
return and_operator(statement, interpretation)
elif statement[1] == "OR":
return or_operator(statement, interpretation)
elif len(statement) == 2:
return not_operator(statement, interpretation)
我從你在問題中顯示的內容中得到不同的(也是不正確的)結果。無論如何,在幾乎沒有描述代碼的作用或它在內部如何操作(除了錯誤代碼本身)的情況下,很難調試別人的代碼。它試圖實現什麼算法? – martineau
不知道任何額外的細節,從閱讀你的代碼我可以告訴你的兩個函數有一個問題隱式地返回'None'當他們一直執行到最後(因爲沒有以前的條件語句是「真」所以沒有之前的'return'語句遇到並執行)。 – martineau