2013-07-30 8 views
2
Join = input('Would you like to join me?') 
if Join == 'yes' or 'Yes': 
    print("Great," + myName + '!') 
else: 
    print ("Sorry for asking...") 

Так что это мой код. Это длиннее; просто включив проблему. Я задаю вопрос «да» или «нет», и когда в консоли он работает гладко, пока вы не доберетесь до него. Что бы вы ни вводили, вы получаете выход «да». Может ли кто-нибудь помочь? Я также использовал высказывания elif, но не повезло.Да или нет выход Python

+2

вы перепутать инден когда вы вставили код, или это то, как ваш код появляется в вашем файле? – 2rs2ts

+0

@ 2rs2ts - он испортил отступы, когда вставил код. В противном случае он получил другое сообщение об ошибке. –

+0

@ Robᵩ Да, я знаю. Я пытался привести OP к реализации, а не сказать, что вы неправильно ввели код. – 2rs2ts

ответ

10
if Join == 'yes' or 'Yes': 

Это всегда так. Python читает как:

if (Join == 'yes') or 'Yes': 

Вторая половина or, будучи не пустой строкой, всегда верно, так что все выражение всегда верно, потому что ничего or верно, то верно.

Вы можете исправить это явно сравнивая Join с обоими значениями:

if Join == 'yes' or Join == 'Yes': 

Но в данном случае я хотел бы предложить лучший способ написать это так:

if Join.lower() == 'yes': 

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

Join = input('Would you like to join me?').lower() 
if Join == 'yes': # etc. 

Вы можете написать это так, что пользователь может ввести все, что начинается с y или на самом деле, просто y :

Join = input('Would you like to join me?').lower() 
if Join.startswith('y'): # etc. 
+0

Спасибо. Я фактически исправил проблему таким же образом. Другие советы чрезвычайно полезны. Еще раз спасибо –

0

Это не то, как работает оператор or. Заменить:

if Join == 'yes' or 'Yes':

с:

и он будет делать то, что вы хотите.

EDIT: Или попробовать это, для более общего назначения:

if 'yes'.startswith(Join.lower()):

, которые должны соответствовать 'у', 'Y', 'вы', 'Е', 'YE', и так на.

+0

Это * * как работает оператор 'or'. Однако не для того, чтобы использовать оператор 'or' для достижения цели OP. – 2rs2ts

+0

Только если вы решите использовать «это», чтобы ссылаться на что-то другое для меня - «Что, будучи желательным поведением, которое OP хочет от оператора' or', не работает оператор 'or'. –

0

если заявление должно быть на самом деле:

if Join=='yes' or Join =='Yes' 

Путем если заявление написано в вашем коде будет вызывать код, который будет оцениваться следующим образом:

(if Join == 'yes') or ('Yes'): 

Обратите внимание, что («Да») является truthy и всегда будет оценивать истинную

1

Я ответил this question вчера

вы можете использовать .lower()

Join = input('Would you like to join me?') 
if Join.lower() == 'yes': 
    print("Great," + myName + '!') 
else: 
    print ("Sorry for asking...") 
Смежные вопросы