2013-12-17 98 views
0

對不起,發佈這樣一個天真的問題,但我只是無法弄清楚這一點。我已經寫了下面的條件語句:python if ... elif always not working

if taxon == "Bracelets": 
    catId = "178785" 
elif taxon == "Kids Earrings" or "Earrings": 
    catId = "177591" 
elif taxon == "Mangalsutras": 
    catId = "177595" 
elif taxon == "Necklaces" or "Necklace Sets": 
    catId = "177597" 
elif taxon == "Kids Pendants" or "Pendants": 
    catId = "177592" 
elif taxon == "Pendant Sets": 
    catId = "177593" 
elif taxon == "Anklets": 
    catId = "178788" 
elif taxon == "Toe Rings": 
    catId = "178787" 
elif taxon == "Rings": 
    catId = "177590" 
else: 
    print "no match\n" 

但無論怎樣類羣的價值是,它總是在第二個條件,即

elif taxon == "Kids Earrings" or "Earrings": 
    catId = "177591" 

,因此,CATID的值保持177591下降。

+0

'elif的類羣== 「兒童耳環」 或類羣== 「耳環」:'否則第二個條件永遠是真 – reto

+0

@MartijnPieters:真。但是,很難找到它,因爲問題的名稱沒有提示任何內容 – nish

+0

沒關係,這是許多初學者遇到的問題,而沒有意識到發生了什麼問題。 –

回答

13

這應該是

elif taxon == "Kids Earrings" or taxon == "Earrings": 

你原來的代碼測試的"Earrings"真值,而不是taxon是否具有價值"Earrings"

>>> bool("Earrings") 
True 

一種更好的方式來構建這是一本字典:

id_map = {} 
id_map["Bracelets"] = "178785" 
id_map["Earrings"] = "177591" 
id_map["Kids Earrings"] = "177591" 
# etc 

then la你可以做的

id_map[taxon] 

這也更適合存儲在配置文件或數據庫中,以避免硬編碼你的Python代碼中的值。

1

問題是,它始終爲真,因爲它評估布爾型True,它檢查字符串是否爲空。

更改爲:

if taxon == "Bracelets": 
    catId = "178785" 
elif taxon == "Kids Earrings" or taxon == "Earrings": 
    catId = "177591" 
elif taxon == "Mangalsutras": 
    catId = "177595" 
elif taxon == "Necklaces" or taxon == "Necklace Sets": 
    catId = "177597" 
elif taxon == "Kids Pendants" or taxon == "Pendants": 
    catId = "177592" 
elif taxon == "Pendant Sets": 
    catId = "177593" 
elif taxon == "Anklets": 
    catId = "178788" 
elif taxon == "Toe Rings": 
    catId = "178787" 
elif taxon == "Rings": 
    catId = "177590" 
else: 
    print "no match\n 

在我個人而言,我會使用Python dict好纔是真的好,而不是如其他:

options = {"option1": "value1", "option2": "value2".....} 
3

使用這個成語:

elif taxon in ("Kids Earrings", "Earrings"): 
+0

這實際上可能會導致一些問題,我認爲,如分類單元是「孩子」例如。 –

+2

它不會造成問題。 –

+0

你說得對+1,我不知道那個選項。 –

0

的第二個條件不針對一個變量進行檢查。像這樣沒有意義! 試試這樣說:

... 
elif taxon == "Kids Earrings" or taxon == "Earrings": 
    catId = "177591" 
... 
1

這種情況:

taxon == "Kids Earrings" or "Earrings"

看起來像

(taxon == "Kids Earrings") or "Earrings"

這始終是正確的,因爲"Earrings"判斷爲真(是一個非空串)。

你想要做的事:

taxon in ("Earrings, "Kids Earrings")

或只寫幾個條件:

taxon == "Earrings" or taxon == "Kids Earrings"

或者是:

taxon.endswith("Earrings")

1

使用

 
elif taxon in ("Kids Earrings", "Earrings"): 
7

其他人已經給你的問題的語法答案。

我的答案是改變這個醜陋的代碼來使用字典查找。例如:

taxes = {"Bracelets": 178785, "Necklaces": 177597, "Necklace Sets": 177597} 
#etc 

然後使用

catId = taxes[taxon] 
+0

非常感謝。這真的很有幫助。 \米/ – nish