2013-07-08 35 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