2014-09-20 2 views
0

Я хочу, чтобы иметь возможность определить, является ли вход действительным. У меня есть:Python: повторение функции, когда raw_input недействителен

servqual = raw_input(">").lower() 
while servqual != "great" or "good" or "lacking" or "poor": 
    print "I didn't understand that. Please try again." 
    servqual = raw_input(">").lower() 

Однако всякий раз, когда я запускаю его через петлю она всегда предполагает Правда, даже если я введите правильный ответ. Я просмотрел разные ответы, но ни один из них, похоже, не работает в этом сценарии.

ответ

4
servqual != "great" or "good" or "lacking" or "poor" 

эквивалентно

(servqual != "great") or "good" or "lacking" or "poor" 

И поскольку строки считаются True, вы всегда получаете его Истинную

Правильный способ сделать это:

servqual != "great" and servqual != "good" and servqual != "lacking" and servqual != "poor" 

или

servqual not in ("great", "good", "lacking", "poor") 

Ваш окончательный код будет выглядеть

servqual = raw_input(">").lower() 
while servqual not in ("great", "good", "lacking", "poor"): 
    print "I didn't understand that. Please try again." 
    servqual = raw_input(">").lower() 

Вы можете дополнительно улучшить его с помощью следующей конструкции.

while raw_input(">").lower() not in ("great", "good", "lacking", "poor"): 
    print "I didn't understand that. Please try again." 
+0

Спасибо, это сработало отлично! – sfowler12

1

У вас есть:

while servqual != "great" or "good" or "lacking" or "poor": 

Это означает то же самое:

while (servqual != "great") or "good" or "lacking" or "poor" 

Поскольку "good" or "lacking" or "poor" всегда верно, все условие истинно.

Вместо этого, вы можете сделать это:

while servqual not in ("great", "good", "lacking", "poor"): 
    ...