1

惑星が太陽からどれだけ離れているかをクイズするプログラムがあります。唯一の問題は、私がどのような答えを出したとしても、常に正しいと表示されることです。ここに私のコードへのリンクがあります: http://pastebin.com/MimECyjm

可能であれば、私はまだPythonに堪能ではないので、もっと単純な答えが欲しいです

問題のコード:

mercury = "57.9"
mercury2 = "57900000"

def Mercury():
    ans = raw_input("How far is Mercury from the sun? ")
    if mercury or mercury2 in ans:
        print "Correct!"
        time.sleep(.5)
        os.system("cls")
        main()
    else:
        print "Incorrect!"
        Mercury()
4

3 に答える 3

6

あなたはこれを持っています:

if mercury or mercury2 in ans:

これの代わりに:

if ans in (mercury, mercury2):

しかし、あなたにはもっと深刻な問題があります。このようなコード

def Mercury():
    ans = raw_input("How far is Mercury from the sun? ")
    if mercury or mercury2 in ans:
        print "Correct!"
        time.sleep(.5)
        os.system("cls")
        main()
    else:
        print "Incorrect!"
        Mercury()

最終的にはstackoverflowが発生します。これは、関数を呼び出しているが、関数から戻ることがないためです!

whileループを使用するようにコードを再構築する必要があります

プログラムから重複の一部を削除することも検討する必要があります

たとえば、このような関数を使用できます

def main():
    while True:    
        print "Planetary Distance from the Sun"
        time.sleep(.5)
        rand = random.randint(1,1)
        if rand==1:
            ask_planet_distance("Mercury", mercury, mercury2)
        elif rand==2:
            ask_planet_distance("Venus", venus, venus2)
        ...


def ask_planet_distance(planet_name, distance1, distance2):
    while True:
        ans = raw_input("How far is {} from the sun? ".format(planet_name))
        if ans in (distance1, distance2):
            break
        else:
            print "Incorrect!"
    print "Correct!"
    time.sleep(.5)
    os.system("cls")

惑星データをlist

于 2012-08-14T16:19:36.963 に答える
6

問題は、あなたが持っていることです:

if mercury or mercury2 in ans:

この if ステートメントは、Trueifが (常にmercury評価されるTrue) または when mercury2 in ansisに評価されTrueます。

mercurymercury = "57.9"はに評価される空でない文字列 ( )Trueです。たとえば、bool("57.9")Python が常にTrue空でない文字列を計算することを確認してください。文字列が空の場合は になりますFalse

したがって、ユーザーが何を答えようとも、コードは常にそれが正しいことを示します。ここにあなたが書くことができるものがあります:

if mercury in ans or mercury2 in ans:

ただし、おそらく次のように記述した方がよいでしょう (以下のコメントの説明を参照してください)。

if ans in [mercury, mercury2]:
于 2012-08-14T16:17:16.943 に答える
3

問題は、if ステートメントの条件にあります。

例:

if ans == venus or venus2:

これは次のようになります。

if ans == venus or ans == venus2:
于 2012-08-14T16:18:02.173 に答える