Новое в python. Почему печатается только первая строка?

Я уверен, что это очень просто для всех, но по какой-то причине я не могу понять, что код ниже печатает только «Рад снова видеть вас».

Я новичок в программировании, и это моя первая попытка создать что-то маленькое для взаимодействия. Любые идеи, почему другие параметры в elif и else не печатаются?

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()

person user2093601    schedule 08.07.2013    source источник
comment
Обратите внимание, что вызов was_read() внутри самого себя может создать для вас проблему, поскольку каждый раз, когда это происходит, вызовы функций укладываются все глубже. Было бы лучше заключить подпрограмму в цикл while True: и break, когда вы закончите.   -  person zigg    schedule 09.07.2013


Ответы (1)


Хотя Python может выглядеть как английский, это не английский язык. То, что вы написали, будет интерпретировано как:

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

'yes' правдиво, поэтому ваше утверждение if действительно действует так:

if (read == 'Yes') or True

False or True и True or True оба являются True, поэтому ваше первое утверждение if всегда будет истинным.

Будьте явными:

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

Или просто сделайте это проще:

if read.lower() == 'yes'
person Blender    schedule 08.07.2013
comment
Хорошее объяснение (+1). Обратите внимание, что read.lower() == 'yes' приведет к немного другому поведению; например, это позволит 'yEs', тогда как код OP - нет. - person arshajii; 09.07.2013
comment
Большое спасибо за быстрый и полезный ответ. Не могли бы вы объяснить, почему этот код не нуждается в скобках? elif next == дразнить медведя, а не медведя_moved: print Медведь вышел из двери. Вы можете пройти через это сейчас. Bear_moved = Истина - person user2093601; 09.07.2013
comment
@ user2093601: Точно так же, как 1 + 2 * 3 равно 6, потому что * имеет более высокий приоритет, чем +, == имеет более высокий приоритет, чем and. - person Blender; 09.07.2013
comment
@ user2093601: Под 6 я подразумеваю 7 ;) - person Blender; 09.07.2013