2012-08-02 91 views
3

我是從一個在線教程學習Python的。我的問題是,當我運行該腳本,不管是什麼我輸入的響應我得到的是,如果去==「廚房」 ......Python函數運行到第一個if語句不管輸入

def go_to(): 
    go = raw_input("Go to? ") 

    if go == Kitchen or breakfast: 
     print "You rumble down stairs and into the kitchen. Your mom has left some microwaved waffles on the table for you. Your big boy step sits by the counter." 
    elif go == "back to bed" or "back to sleep" or bed or sleep: 
     print "You hit snooze and roll over." 
    elif go == "bathroom" or "toilet" or "potty" or "pee" or "poop" or "take a sh*t" or "take a dump" or "drop a load": 
     print "You make a stop at the head first." 
     go_to() 
    else: 
     print "That is not a command I understand." 
     go_to() 
go_to() 
+5

您需要一個新的教程,因爲'or'的用法不正確。 – 2012-08-02 15:34:26

+2

就目前而言,這個程序會因爲語法錯誤而中止。縮進在Python中很重要。請解決這個問題。此外,你有'牀'和'睡眠'這些沒有引用的東西。當你的函數被調用時,這也會出錯。 – 2012-08-02 15:36:36

+1

你不喜歡''''和'''字符,是嗎? – glglgl 2012-08-02 15:41:03

回答

1

正如伊格納西奧說,Y你需要一個新的教程。

如果子表達式go == Kitchenbreakfast評估爲True,則表達式go == Kitchen or breakfast將爲真。這將發生,如果go的計算結果爲相同的對象Kitchen,或它們的類型定義了一個__eq__方法,其限定平等它們,或者這將是情況下,如果breakfast是一個對象,它是不None

的方式來檢查,如果變量包含在列表中的值是:

if go in (Kitchen, breakfast): 
    # do something 

另請注意,您的代碼不顯示其中的變量Kitchenbreakfast定義,你的縮進不正確。

+0

我猜'廚房'和'早餐'沒有定義... – 2012-08-02 15:42:20

+0

是的,他們werent的意思是變量,但stri NGS。我只是在嘗試不同的事情,把報價拿走,忘了把它們放回去。謝謝您的幫助。 – 2012-08-02 17:43:55

+0

@ user1571810無論它們是變量還是字符串都無關緊要。適用相同的評估規則(當然除了有額外的評估步驟外)。 – Marcin 2012-08-02 17:45:27

0

我beleive的問題是你的第一個if語句

大多數編程語言,你不能只是說「或」像你一樣。你需要做的是重複所有條件的「go ==」部分。

if go == Kitchen or go == breakfast: 

它現在正在做的是評估(去==廚房)並發現它是假的。那麼它正在評估「早餐」並且返回true。因爲它是一個「或」的陳述,那麼整個如果是真的。

5

正如在評論中提到的,你的or使用是不正確這裏。這:

go == "kitchen" or "breakfast" 

等效於此:

(go == "kitchen") or "breakfast" 

or運營蒙上它的兩個操作數到布爾值,它給你:

(something) or true 

總是降低到true,所以你總是進入if語句

0

語法

if go == "Kitchen" or "breakfast": 

是因爲計算的順序的錯誤。看來你打算檢查一下去是「廚房」還是「早餐」。但是,您檢查是否是「廚房」或字符串「早餐」是否爲真。後者總是這樣,因爲一個非空字符串計算的東西,一點也不假。

描述你的意圖將是直觀的方式:

if (go == "kitchen") or (go == "breakfast"): 

也許更Python,你也可以這樣寫:

if go in ["kitchen", "breakfast"]: 
0

要檢查的條件是一個事物的列表中的一個,那麼你應該使用in,如:

if go in ('Bathroom', 'take a dump', 'have a beep'): 
    # do something... 
elif go in ('Kitchen', 'Living room'): 
    # etc... 
else: 
    # no idea where to go? 

採用or不符合你的期望,並已在其他文章中解釋過。