2012-06-21 2 views
-3

У меня возникла проблема с простым кодом, над которым я работаю. Он спрашивает ваше имя и то, как ваш день был, и в зависимости от вашего ответа ему ДОЛЖНО выполнить действие, связанное с этим ответом. Благодарим вас за помощь.IF условно на String failing

import time 
print "Hello." 
time.sleep(.5) 
print "What's your name?" 
var = raw_input() 
time.sleep(.3) 
print "Hello", var 
time.sleep(1) 
print "How are you?" 
i = 0 
answer1 = False 
answer2 = False 
answer0 = False 
repeat = True 
while repeat == True: 
     if i == 0: 
       answer = raw_input() 
     if answer == "Good" or "good": 
       answer1 = True 
     if answer == "Bad" or "bad": 
       answer2 = True 
     if answer is not "good" or "Good" or "ok" or "Ok" or "OK" or "Not so good" or "not so good" or "Not so good." or "not so good.": 
       answer0 = True 
     if answer2 == True: 
       print "That sucks." 
       time.sleep(1) 
       print "Well that's end of my code", var 
       time.sleep(1) 
       print "See ya!" 
       break 
     if answer1 == True: 
       print "That's awesome!" 
       time.sleep(1) 
       print "Well that's end of my code", var 
       time.sleep(1) 
       print "See ya!" 
       break 
     if answer0 == True: 
       print "I'm sorry, I didn't understand you." 
       time.sleep(1.5) 
       print "Are you good, ok, or not so good?"   
+5

И что же код на самом деле делать? –

+3

... Должны ли мы догадываться о том, что он делает на самом деле **? –

+0

что он распечатывает, если что-нибудь? –

ответ

4

Это неправильно:

if answer == "Bad" or "bad": 

вы, вероятно, имел в виду:

if answer == "Bad" or answer == "bad": 

или

if answer in ("Bad", "bad"): 
2

Как говорят комментарии, вы должны быть более конкретными о том, что неверно, но следующая строка:

if answer is not "good" or "Good" or "ok" or "Ok" or "OK" or "Not so good" or "not so good" or "Not so good." or "not so good." 

Это должно выглядеть, например.

if answer not in ('good', 'Good', ...): 

Кроме того, вы можете найти else пункт иногда полезно.

16

эти условия всегда будут верны, потому что непустые строковые литералы являются truthy в питоне:

if answer == "Good" or "good": 
if answer == "Bad" or "bad": 
if answer is not "good" or "Good" or "ok" ...: 
... 
# is the same as 
if (something == something_else) or (True) or (True) ... :` 

так replate, что код:

if answer in ("Good", "good"): 
if answer not in ("good", "Good", "ok", ...): 
.... 

или еще лучше, если вы хотите включить «ХОРОШЕЕ» и другие варианты случаев:

if answer.lower() == "good": 
if answer.lower() not in ("good", "ok", ...): 
... 
+1

+1 для «хорошего» ответа, который включает в себя 'lower()' – JoeFish

+0

@JoeFish по вашему определению «хороший ответ», мы должны полностью переписать весь его код, потому что это полный беспорядок, но это было бы не по теме для вопрос. – KurzedMetal

1

замените ваше состояние этими.

if i == 0: 
     answer = raw_input().strip() #use strip(), because command prompt adds a \n after you hit enter 
     if answer == ("Good") or answer ==("good"): 
       answer1 = True 
     if answer == "Bad" or answer =="bad": 
       answer2 = True 
1

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

Значение в коде

if answer == "Good" or "good": 

Вы пытаетесь сравнить, answer == "Good", что дает логическое значение, и "good", которая в основном строковым.

Чтобы исправить это, необходимо переписать свои условия

if answer == "Good" or answer == "good":