2012-06-21 4 views
-3

나는 작업중인 간단한 코드에 문제가 발생했습니다. 그것은 당신의 이름과 당신의 하루가 어떻게되었는지 묻습니다. 당신의 대답에 따라, 그것은 그 대답과 관련된 행동을해야합니다. 사전에 모든 도움을 주셔서 감사합니다.IF 조건 문자열 실패시

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 not in ('good', 'Good', ...): 

또한 else 절이 유용 할 수도 있습니다. 당신이 경우에, 더 나은 아직

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

나 :

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 : 비어 있지 않은 문자열 리터럴 파이썬에서 truthy이기 때문에

16

이러한 조건은 항상 true가됩니다 '우수'및 기타 사례 변형을 포함하려는 경우 :

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

+1 "good (대답)"을 포함하는 "good (대답)" – 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":