2013-07-08 36 views
0

我確定這對每個人都是超級基礎,但由於某些原因,我無法弄清楚下面的代碼,只打印出「很高興再次見到你」。python新手 - 爲什麼只打印第一行?

我是編程新手,這是我第一次嘗試創建一個小的交互。任何想法爲什麼其他選項在elif和其他不打印?

def was_read(): 
    print "Have you read this before?" 
    read = raw_input('Yes or No? ') 
    if read == 'Yes' or 'yes': 
     print 'Glad to see you back at it again.' 
    elif read == 'No' or 'no': 
     print 'Hope its a good one then!' 
    else: 
     print "I'm sorry I didn't understand that" 
     was_read() 
+1

注意,調用'was_read()'內本身可以爲你創建一個問題,因爲你是堆疊功能每次發生這種情況時都會調用更深的。當你完成時,將例程封裝在'while True:'loop和'break'中會更好。 – zigg

回答

5

雖然Python可能看起來像英文,但它不是英文。你所寫的將它這樣解釋:

if (read == 'Yes') or ('yes') 

'yes'是truthy,所以你if聲明真的就像:

if (read == 'Yes') or True 

False or TrueTrue or True都是True,所以你的第一個if語句將永遠是真正。

要明確:

if read == 'Yes' or read == 'yes' 

或者只是做了簡單的方法:

if read.lower() == 'yes' 
+0

好解釋(+1)。請注意,'read.lower()=='yes''會導致稍微不同的行爲;例如,它會允許「yEs」,而OP的代碼不會。 – arshajii

+0

非常感謝你的快速和有益的迴應。你能解釋爲什麼這段代碼不需要任何括號嗎? elif next ==「taunt bear」and not bear_moved: print「熊已經離開了門,現在可以經過了。」 bear_moved = True – user2093601

+0

@ user2093601:就像'1 + 2 * 3'是'6'一樣,因爲'*'的優先級高於'+',所以'=='的優先級高於'和'。 – Blender