2017-10-11 49 views
0

我有以下元組列表。我試圖測試一個消極的情況,以失敗的條件。如何使If語句失敗,並有多個條件

>>> regop = [('1000', '63', 'Untaggged', '1000')] 

我想寫一個條件:

>>> if int(regop[0][0]) != 1000 and int(regop[0][1]) != 63 and regop[0][2] != 'Untaggged' and int(regop[0][3]) == 100: 
... print "error" 

在這種情況下,int(regop[0][3]) == 100False,休息3個條件是True,但我已經使用and,應該不是這個if條件失敗並且打印error?它力圖打印Error。 我對這裏出了什麼問題無能爲力。幫助將不勝感激!

+3

'True and False'的計算結果爲'False',因此條件不會被觸發,所以'print'錯誤''不會被執行。 – metatoaster

+1

只有當所有值不匹配時,纔會打印「錯誤」。如果您希望在一個或多個'!='子句爲真時打印它,請使用'或'而不是'和' –

+0

明白了,謝謝much @ metatoaster – npatel

回答

2

你會需要or代替and,如果你想在if的評估,以True條件的任何觸發。

作爲對當前解決方案的改進,我建議使用any

vals = (1000, 63, 'Untaggged', 100) 
if any(x != y for x, y in zip(regop[0], vals)): 
    print('error') 

any回報True如果連一個單一的條件計算爲True發電機解析裏。相反地​​,如果想要結果爲True,則僅在條件中的理解爲True時,將any替換爲all

使用any/all消除了多次硬編碼x1 != y1 or x2 != y2 or ...的需要,並且得到簡潔的代碼。