2012-06-25 51 views
-7

我對Python中的比較運算符有疑問。我想知道這是對還是錯。==對比在Python中的運算符

我有一定的輸出分配給一個變量。所以我們可以說:

result1, result2, result3 

現在我喜歡

if result1 == 0 and result2 == 0 and result3 == 0: 
    print "Success " 
else: 
    print "failure" 

我無疑是一個比較能夠以這種格式

if 0 in (result1 , result2 ,result3): 
    print "Success" 
else : 
    print "failure" 

這個比較所做的是使用Python這樣對不對?如果不是,那麼原因是什麼?

+1

它必須是顯而易見的,第二個示例使用是** **或本 –

+5

「問題」可能已經解決了無非是想代碼看看它是否按預期工作。 –

回答

5
if 0 in (result1, result2, result3): 

等同於:

if result1==0 or result2==0 or result3==0: 

你想要的是這樣的:

if (0,0,0) == (result1, result2, result3): 

即相當於:

if result1==0 and result2==0 and result3==0: 

其實你可以甚至做到這一點:

if result1==result2==result3==0: 

因爲您正在檢查所有3個變量是否等於相同的東西。

+3

Python區分大小寫。所以'x OR y'是一個'SyntaxError'。 –

+0

謝謝,糾正。 –

6

你可以做比較,但你的第二次比較不會做與第一次相同的事情。

這種比較將只True當每個變量是0:

if result1 == 0 and result2 == 0 and result3 == 0: 

這種比較將是True當變量中的至少一個是0:

if 0 in (result1, result2, result3): 

,你可以看,這不是完全相同的比較。要執行相同的比較,你可以這樣做:

if (0, 0, 0) == (result1, result2, result3): 
0

也許做一個可變函數?

def allZero(*args): 
    for elem in args: 
     if elem != 0: 
      return False 
    return True 

if allZero(result1, result2, result3): 
    return "Success" 
else: 
    return "Failure" 

然後你就可以測試許多resultN一次,只要你喜歡。

+3

對類別_「過於簡單的問題的過於複雜的答案」投票獎勵_;) – invert

4

在第二個例子中,如果任何值爲「0」,並且不等於and,那麼它將被評估爲「真」。

如果你有多種結果,想確認他們是否匹配給定值,我建議使用all()功能:

results = [0, 1, 0] 
if all(result == 0 for result in results): 
    print "Success" 
else: 
    print "Failure" 

或使用any()

if not any(results): 
    print "Success" 
... 

然而,這種反邏輯對我來說通常很難理解,也許比非存在檢查存在更爲pythonic。所以,如果你改變你的邏輯來檢查它是否存在,你可以只寫:

if all(results): 
    print "Success" 
else: 
    print "Failure" 
+1

您的最後一個例子具有向後的邏輯 - 要麼'所有(結果)'應該'打印'失敗'或條件應該是'如果沒有結果):'。 – lvc

+0

謝謝,我暗示要修改底層數據以檢查是否存在,但可能不清楚。我已經添加了你的建議,如果沒有任何()。 – monkut