2014-12-02 104 views
-2

我試圖循環訪問數組,跳過某些產品類型。我的問題是它不會跳過它們。無論產品類型是否在跳過列表中,都會發生同樣的事情。Python中的多條件IF條件

for i in source: 
    if (i["product_type"] == 00 and i["product_type"] == 35 and i["product_type"] == 72): 
     print i["product_name"] + " has been skipped" 
    else: 
     # Upload product 
+7

你的意思'或',而不是'和'?毫無疑問,product_type只能是一件事,它不能同時是00,35和72。 – nos 2014-12-02 12:44:33

回答

2

這裏的問題是,你根本不能在一個語句中擁有所有這些條件。一個項目不能具有相同屬性的多個值。您的變量i只有一個product_type屬性,這樣你實際上是尋找的是要測試的的任何一個選項道:你想用的,而不是and運營商or操作

if i["product_type"] == 0 or i["product_type"] == 35 or i["product_type"] == 72: 
    # 

下面是一個更可讀版本的代碼(假設你的產品類型值爲INT:

if i["product_type"] in [ 0, 35, 72 ]: 
    print i["product_name"] + " has been skipped" 
else: 
    # Upload product 

此代碼將檢查,看看是否product_type值列表中引用:
[ "00", "35", "72" ]


最後要注意,你不需要向parethesis來包裝你的條件語句(如你與JS/PHP爲例)你可以簡單地忽略它們:

if "foo" in [ "foo" ]: 
    pass 

的工作方式相同

if ("foo" in [ "foo" ]): 
    pass 
+0

第二種選擇中列表中的值應該是整數而不是字符串 – CoryKramer 2014-12-02 12:47:46

+0

@Cyber​​ - 00怎麼可能是一個int? – Lix 2014-12-02 12:48:28

+1

,因爲他們使用的是Python 2.x,看看他們的'print'語句....哦,我明白你的觀點,是的,它會被解釋爲'八進制'(儘管對於'0'他們很幸運) – CoryKramer 2014-12-02 12:49:32

0

你應該or那些在一起,而不是and,因爲i["product_type"]只能有一個單一的價值,我認爲只是一個錯字。

if (i["product_type"] == 0 or i["product_type"] == 35 or i["product_type"] == 72): 

但是,它是更容易和更簡潔的使用以下

if i["product_type"] in (0, 35, 72): 
+0

有沒有使用元組和列表來包含選項之間的區別? – Lix 2014-12-02 12:52:23

+1

@Lix沒有不真的。我想,如果有很多元素需要檢查,最好使用像{0,35,72}這樣的集合來加快成員查找的速度,但在這種情況下,它很簡單。 – CoryKramer 2014-12-02 12:53:29

+0

但是這個集合需要一些時間來創建,所以如果你不經常進行測試,最好是按列表/元組去做。 – 2014-12-02 12:59:58