2014-08-27 70 views
5

你好,這可能是一個非常基本的問題,但是因爲我對編程和python很陌生,所以我很想學習。更好的方式,寫一個長的「if」語句?

我正在製作一個程序,該程序從用戶輸入「玩卡」套裝。該計劃只接受正確的訴訟。

例如;

鑽石,心,俱樂部,黑桃

如果用戶進入其他任何東西,如「三角形」的程序返回「輸入錯誤」。

這是我這麼遠:

if suit == "Diamonds": 
    return "Accepted" 
if suit == "Hearts": 
    return "Accepted" 
if suit == "Clubs": 
    return "Accepted" 
if suit == "Spades": 
    return "Accepted" 
else: 
    return "Wrong input" 

我的問題是,有沒有更好的方式來寫這篇文章不是通過製作一個全新的「如果」語句,每種花色的這個繁瑣的過程會。

+5

作爲一個側面說明,你真的應該使用'這裏elif' (好吧,直到你換掉其中一個答案)。 「如果」的效率會降低,並且如果您的條件與這些條件不完全相互排斥,還會導致微妙的錯誤。 – 2014-08-27 21:38:59

回答

7
if suit in ("Diamonds","Hearts","Clubs","Spades"): 
    return "Accepted" 
else: 
    return "Wrong input" 

只需使用in檢查會員,如果suit是不是在元組,你else條款將被執行。

membership operators

您也可以使用not in反向邏輯:

if suit not in ("Diamonds","Hearts","Clubs","Spades"): 
    return "Wrong input" 
else: 
    return "Accepted" 

如果您要檢查的值也:

if suit in ("Diamonds","Hearts","Clubs","Spades") and value in ("Ace","king","Queen"....): 
    return "Accepted" 
else: 
    return "Wrong input" 

使用set{"Diamonds","Hearts","Clubs","Spades"}是一種更有效檢查會員的方式

+0

如果有2條if語句會怎麼樣。一個如果聲明爲西裝,另一個爲卡的價值...... **「else」**聲明會干擾其他「if」聲明? – Andre 2014-08-27 21:40:59

+0

@Ali,所以你想知道具體的衣服? – 2014-08-27 21:42:50

+0

這樣的事情...用戶輸入卡和西裝的價值...所以如果它是38鑽石...那麼它也應該返回錯誤 – Andre 2014-08-27 21:45:16

8

您可以使用in檢查suit是在一個列表,元組或一組公認的西裝:

if suit in {"Diamonds", "Hearts", "Clubs", "Spades"}: 
    return "Accepted" 
else: 
    return "Wrong input" 

你也可以使用一個tuple(與(...)),list[...])或frozenset而不是set{...})。

2

我不知道這是否適合您的需要,但有時使用字典中的一個替代方法可能與if ... elif長序列幫助:

states = {"Diamonds": "accepted", 
      "Hearts": "accepted", 
      "Clubs": "accepted", 
      "Spades": "accepted"} 
return states.get(suit,"wrong input") 
+0

humm非常有趣...這實際上可以以某種方式併入我的程序中。 – Andre 2014-08-27 21:54:22