2016-09-19 112 views
1

我期望以相同的方式評估以下兩個代碼塊,但似乎並非如此。例如,用此:如何評估具有多個條件的條件語句?

if True or False and False: 
    print('True')                
else:                   
    print('False') 

打印爲真。但有了這個:

if (True or False) and False: 
    print('True') 
else:                   
    print('False') 

False is printed。這裏是我的邏輯故障:

  • True or False = True
  • True and False = False

通過置換,(True or False) and False = True and False = False

爲什麼會發生這種情況?

回答

3

這是因爲operator precedence。根據Python 2.x和3.x文檔,and運算符的優先級高於or運算符。另外,看看布爾真值表:

enter image description here

這意味着在你的表達:

if True or False and False: 

在表達式中,False and False被分組,因爲優先在一起。這意味着Python評估它爲:

if True or (False and False): 

現在,它的評估從左到右。由於第一個條件是True,因此它會短路並跳過第二個條件,並計算打印爲「真」的True。 (此短路,因爲如果第一邊是真實的,它必須是真實

現在,在你的第二個例子:

if (True or False) and False: 

這使得True or False評價第一,這給True。然後它True and False這是False,打印'假'。

>>> print(True or False) 
True 
>>> print(True and False) 
False 
+0

這與短路無關。非短路評估會產生相同的結果。 – user2357112

+0

你仍然沒有提到優先順序。根據你的回答邏輯,「假,真或假」將是「假」。 – user2357112

+0

@ user2357112我已更新答案以包含正確信息。感謝您指出錯誤信息和批評,非常感謝! – Li357

1
操作

標準訂單給and優先or,所以先聲明True or False and False是邏輯上等同於

True or (False and False) 

這個計算結果爲True

第二條語句是

(True or False) and False 

這個計算結果爲False