2016-05-16 548 views
1

我正在做一個任務,遇到了讓我困惑的事情,因爲我對python不太好用。這是代碼。爲什麼這個python if語句不等於true?

def main(): 


    list = [1,2] 
    x = 2 

    if (x in list == True): 
     print("hi") 

    if (x in list): 
     print("Why does this proc?") 

main() 

我相信輸出將是兩個,但輸出只是第二個if語句。我知道,在C,如果你有這樣的事情

if (x = 6) 

,由於只有一個「=」 x是現在等於6.(作爲其讀取,如果(),X = 6)。

這個python代碼發生了什麼類似的事情?是否首先檢查'list == true',然後從那裏檢查x是否在列表中?

任何有識之士將不勝感激!

+2

就是這樣。它正在檢查'x列表和列表== True'。 –

+0

出於好奇,我爲什麼沒有收到錯誤?我也做了一些測試,並嘗試了'if(list == False)',這也沒有發生。當python比較兩者時,結果如何? – Childishforlife

+1

爲什麼你會得到一個錯誤?這是一個完全合法的Python語句。是的,這也不會起作用,'list'不等於'False'。 –

回答

6

正如你所看到的,是的,你的表達需要明確的分組:

>>> 2 in [1,2] == True 
False 
>>> (2 in [1,2]) == True 
True 

需要注意的是,作爲@tavo和@MorganThrapp提,不帶括號的版本做一個鏈接比較,檢查2 in [1,2]然後檢查[1,2] == True。後者是錯誤的,所以完整的表達也是錯誤的。

順便說一句,不要在內置插件如list之後命名變量,否則您將無法輕鬆使用這些函數。

而且,你不必表達式的結果比較True

>>> 2 in [1,2] 
True 

這樣做是要求相當於「是‘蛋糕已經準備好’一個真正的說法?」而不是「蛋糕準備好了嗎?」。

+2

你確定它只是關於操作優先?因爲[2]([1,2] == True)'會引發錯誤。 – tavo

+0

我對這個術語表示歉意,這只是我在這裏張貼的東西,並不是實際使用的代碼。感謝您的信息! – Childishforlife

+0

@tavo - 注意和編輯;謝謝。 – TigerhawkT3