2014-01-28 5 views
-2
code_str = input("Enter code: ") 

while code_str !="Q": 
    print("Code:",code_str) 
    if code_str == 'B' and code_str == "D" and code_str == "W": 
     print("Good Code.") 
    else: 
     print("Bad code. Try Again") 
    code_str = input("Enter code: ") 

Мне нужно сделать это, он печатает хороший код всякий раз, когда B, D или W, вводится пользователем, однако я не могу понять это. Благодаря!Заявление Python «IF»

+1

Он всегда должен печатать «Плохой код». Я думаю, – Sheng

+2

'и'? как это будет работать? –

+2

Не редактируйте свой вопрос, чтобы превратить его в совершенно другой вопрос; спросите нового. – user2357112

ответ

0
if code_str == 'B' and code_str == "D" and code_str == "W": 

Условием выше Условный оператор всегда будет вычисляться False потому code_str никогда не будет и равна "B"и равным "D".

Чтобы устранить эту проблему, вам нужно использовать or вместо and:

if code_str == 'B' or code_str == "D" or code_str == "W": 

или, вы можете использовать in:

if code_str in ("B", "D", "W"): 

Edit:

Для вашего обновленного вопрос, вы можете использовать str.lower:

while code_str.lower() != "q": 
2

если code_str является B, она не может быть D и W в то же время!

Вы должны изменить ваш and к or:

if code_str == 'B' or code_str == "D" or code_str == "W": 

или упростить немного:

if code_str in ('B', 'D', 'W'): 

следующее упрощает еще дальше, но будет соответствовать BD и DW и BDW и пустым струн. если вы уже продезинфицировать вход, чтобы быть один символ, это нормально, хотя:

if code_str in 'BDW': 
+2

или для дальнейшего упрощения: 'in" BDW "' –

+0

хороший вызов, но возможно, это слишком много учит :) – mhlester

+4

Нет, кортеж прав. Мы не хотим разрешать 'BD' в качестве входных данных. – user2357112

0
if code_str == 'B' and code_str == "D" and code_str == "W": 

должен быть

if code_str == 'B' or code_str == 'D' or code_str == 'W': 

или (лучше):

if code_str in {'B', 'D', 'W'}: 
0

Вы будете требуется заявление if для возврата True, если только одно из условий: True , вы не можете использовать оператора and для этого, поскольку он возвращает True, если выполняются все условия. Таким образом, вы должны заменить операторов and оператором or.