2017-03-01 82 views
0
def main(): 
    x = True 
    y = False 
    z = False 
    if not x or y: #False 
     print (1) 
    elif not x or not y and z: #False 
     print (2) 
    elif not x or y or not y and x: #True 
     print (3) 
    else: 
     print (4) 

main() 

這是我們在Python類中學習的一個邏輯問題。我不明白答案是3怎麼回事,not x or y or not y and xTrue,誰能幫忙?瞭解長布爾表達式的評估

+0

你問過你的導師嗎? – TigerhawkT3

回答

3

無論何時與布爾表達式混淆,它都有助於使用括號來使評估序列清晰。圓括號可以按照the precedence rules和運算符的關聯性放置。然後你就可以替代並評估結果:

>>> (not x) or y 
# not x ==> not False == False 
# y == False 
# False or False == False 

>>> (not x) or ((not y) and z) 
# not x == False 
# not y == True 
# z == False 
# True and z ==> True and False == False 
# False or False == False 

>>> ((not x) or y) or ((not y) and x) 
# Evaluate it yourself 

如果自己評估的最後一個例子,你會看到它如何導致False or True這將產生True從而使包含它運行if聲明。

+0

所以它不會是x == F #not y == T #not x or y or true == T #False or True == T 我明白了:)謝謝!只有一個問題:如果要打印1,它必須是如果不是x或y:#true? –

+0

哇哇..對格式化感到抱歉。林新的這個網站,我真的不知道如何使代碼更清潔。 –

+0

沒關係@DanSieger。因爲它是'1',所以''或'運算符至少需要一個'True'值。 'x或y'('x == True')會這樣做,所以'not x or not y'('not y == True')和'x or not y'(both'x' and'not y'等於'True')。 –