-3

私が取り組んでいる単純なコードに問題がありました。それはあなたの名前とあなたの一日がどうだったかを尋ね、あなたの答えに応じて、その答えにリンクされたアクションを実行する必要があります. 事前にご協力いただきありがとうございます。

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?"        
4

5 に答える 5

15

空でない文字列リテラルはPythonでは true であるため、これらの条件は常に true になります。

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) ... :`

そのコードを次のように書き換えます。

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

さらに良いことに、「GOOD」やその他の大文字と小文字のバリエーションを含めたい場合は、次のようにします。

if answer.lower() == "good":
if answer.lower() not in ("good", "ok", ...):
...
于 2012-06-21T12:30:43.783 に答える
4

これは間違っています:

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

あなたはおそらく意味しました:

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

また

if answer in ("Bad", "bad"):
于 2012-06-21T12:30:02.600 に答える
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句が役立つ場合もあります。

于 2012-06-21T12:30:24.440 に答える
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
于 2012-06-21T12:32:35.377 に答える
1

論理演算子を使用する場合は、ブール値もオペランドとして使用する必要があることに常に注意してください。

意味、あなたのコードで

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

answer == "Good"ブール値を生成する と"good"、基本的に文字列リテラルであるを比較しようとしています。

それを修正するには、条件を書き直す必要があります

if answer == "Good" or answer == "good":
于 2012-06-21T12:34:31.640 に答える