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

참고이 기능을 스태킹로 이 일이 발생할 때마다 더 깊은 전화. 루틴을 while while : while 루프로 감싸는 것이 좋을 것이다. – zigg

답변

5

파이썬은 영어처럼 보일 수 있지만 영어가 아닙니다. 당신이 쓴 것은 그것은 같이 해석됩니다 :

if (read == 'Yes') or True 

False or TrueTrue or True 그래서 첫 번째 if 문은 항상있을 것입니다, 모두 True 있습니다

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

'yes'은 그래서 당신의 if 문은 정말 같은 역할을, truthy입니다 참된.

명시해야합니다 :

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

또는 단지 그것을 할 간단한 방법 : 전화`was_read()가`내부 자체가 당신을 위해 문제를 만들 수

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

좋은 설명 (+1). 'read.lower() == 'yes'는 약간 다른 동작을 일으킬 것입니다; 예를 들어 OP의 코드는 그렇지 않지만 'yEs'는 허용 할 수 있습니다. – arshajii

+0

신속하고 유용한 답변을 보내 주셔서 감사합니다. 이 코드에 괄호가 필요없는 이유를 설명해 주시겠습니까? elif next == "도발 곰"이 아니라 bear_moved : 인쇄 "곰이 문에서 움직였습니다. 이제 그걸 통과 할 수 있습니다." bear_moved = True – user2093601

+0

@ user2093601 : '*'가 '+'보다 우선 순위가 높기 때문에 '1 + 2 * 3'이 '6'과 같이 '=='은 (는) '및'보다 우선 순위가 높습니다. – Blender

관련 문제