2012-09-08 145 views
8

我試圖讓一個if語句從多個條件觸發,而不用多次用不同的觸發器重寫語句。例如:if/elif語句的多個條件

if user_input == "look": 
    print description 


if user_input == "look around": 
    print description 

你會如何將這些內容壓縮成一個聲明?

我試過使用'或',它導致任何raw_input觸發語句,而不管輸入是否匹配任一條件。

if user_input == "look" or "look around": 
    print description 

回答

11

什麼你想要做的是

if user_input == "look" or user_input == "look around": 
    print description 

另一種選擇,如果你有很多的可能性:

if user_input in ("look", "look around"): 
    print description 

由於您使用的2.7,你也可以寫它是這樣的(它工作在2.7或3+,但不在2.6或以下):

if user_input in {"look", "look around"}: 
    print description 

這使得你的元素的set,這是非常快一點的搜索(雖然只有當你檢查的元素數量遠遠大於2時才重要)。


你第一次嘗試總是經歷的原因是這樣的。 Python中的大部分內容評估爲TrueFalse,None或空字符串,列表,字典等)。 or需要兩件事情,並將它們評估爲布爾值。因此user_input == "look" or "look around"被視爲(user_input == "look") or "look_around";如果第一個是錯誤的,就像你寫的if "look_around":,它會一直經過。

+0

感謝Dougal!真愚蠢的問題! – Blaine

+0

@Blaine這是一個很多新程序員在Python中遇到的問題;它看起來像是在做你想做的事情,但是,事實並非如此。 :)希望我的解釋爲什麼它的運作是有道理的。 – Dougal

+0

嗯,解釋它。一直在學習我的邏輯表,所以我得到你! :) – Blaine

2

你可以使用正則表達式,如果他們遵循一個模式與 可選節相匹配的字符串,或者你可以做一個數組查找:

if user_input in ["look", "look around"]: 
    print description 

布爾運算符or只有布爾值的作品,它會評估表達式 ,如果其中一個表達式計算爲True,則返回True。 它與自然語言無關'