-1

書籍「Python Programming for the Absolute Beginner Third Edition」を使用して Python を学習する過程で、設定された課題に苦労しています。

プレイヤーが数字を選び、プログラムが乱数を選んで推測し、それよりも高い質問または低い質問を使用してその数字に近づく数字推測プログラムを作成する必要があります。私はそれのほとんどを理解しましたが、より高いループまたはより低いループに苦労しています. 私が抱えている問題は、プログラムを上または下に移動させられないことです。つまり、最後から2番目の推測です。

私の番号は 78 のコンピューター ピック 50 です。より高いコンピューターは 80 をピックします。より低いコンピューターは 12 をピックできます (50 を下回りたくない場合)。

私はPython 3.1を使用しています

これがコードのコピーです。

import random

computer_tries = 0
player_number = None
computer_guess = random.randint(1, 100)

print(
    """
    Welcome Player to the fabulous number guessing game.
    Please allow me to show you my incredible deduction skills
    """)

question = None
while question != ("yes"):
    question = input("Has the player picked a number? ")
    question = question.lower()
    if question == "yes":
        print("\nI will now guess your number!!!\n")
        while player_number == None:
            computer_tries += 1
            print(computer_guess, "\n")
            confirmation = input("Is this the correct number? ")
            confirmation = confirmation.lower()
            if confirmation == "yes":
                player_number = computer_guess
                if computer_tries < 2:
                    print("I did it! I guessed your number was", computer_guess,
                           "and it only \ntook me", computer_tries,
                           "try to get it right!")
                else:
                    print("I did it! I guessed your number was", computer_guess,
                           "and it only \ntook me", computer_tries,
                           "tries to get it right!")
            else:
                higher_lower = None
                while higher_lower not in ("higher", "lower"):
                    higher_lower = input("Is my guess higher or lower"
                                + " than your number? ")
                    higher_lower = higher_lower.lower()
                    if higher_lower == "higher":
                        higher = computer_guess
                        computer_guess = random.randint(higher, 101)
                    elif higher_lower == "lower":
                        lower = computer_guess
                        computer_guess = random.randint(0, lower)
                    else:
                        print("Please choose either higher or lower.")



input("\n\nPress the enter key to exit")

あなたが与えることができるどんな助けにも前もって感謝します.

アリー

4

4 に答える 4

2

コードに次の問題があります。

  1. たとえば、乱数ジェネレーターは、数値スペクトルの片側にのみバインドされているrandom.randint(0, lower)ため、バウンドを無視していhigherます。についても同様ですcomputer_guess = random.randint(higher, 101)
  2. higherを初期化することをお勧めしますlower
  3. いくつかのデバッグが役立ちます:)

作業コードは次のとおりです。

import random

computer_tries = 0
player_number = None
computer_guess = random.randint(1, 100)

print(
    """
    Welcome Player to the fabulous number guessing game.
    Please allow me to show you my incredible deduction skills
    """)

question = None
lower = 0 # initial lower guess
higher = 101  # initial higher guess
while question != ("yes"):
    question = input("Has the player picked a number? ")
    question = question.lower()
    if question == "yes":
        print("\nI will now guess your number!!!\n")
        while player_number == None:
            computer_tries += 1
            print(computer_guess, "\n")
            confirmation = input("Is this the correct number? ")
            confirmation = confirmation.lower()
            if confirmation == "yes":
                player_number = computer_guess
                if computer_tries < 2:
                    print("I did it! I guessed your number was", computer_guess,
                           "and it only \ntook me", computer_tries,
                           "try to get it right!")
                else:
                    print("I did it! I guessed your number was", computer_guess,
                           "and it only \ntook me", computer_tries,
                           "tries to get it right!")
            else:
                higher_lower = None
                while higher_lower not in ("higher", "lower"):
                    higher_lower = input("Is my guess higher or lower"
                                + " than your number? ")
                    higher_lower = higher_lower.lower()
                    if higher_lower == "higher":
                        higher = computer_guess
                        computer_guess = random.randint(lower+1, higher-1)
                    elif higher_lower == "lower":
                        lower = computer_guess
                        computer_guess = random.randint(lower+1, higher-1)
                    else:
                        print("Please choose either higher or lower.")
                    print("DEBUG: number must be " + str(lower) + " < x < " + str(higher))


input("\n\nPress the enter key to exit")
于 2012-11-30T11:09:19.210 に答える
1

可能な数値の上限と下限を格納することは決してありません。あなたの例では、プログラムが 50 を選択して「より高い」と言うとすぐに、「その数は間違いなく 50 よりも高い」という情報をどこかに保存する必要があります。「下」と答える場合も同様です。

于 2012-11-30T10:49:38.443 に答える
1

min_comp_guess や max_comp_guess のようなものを保存する必要があります。次に、数値を「推測」しようとしているときに、有効な範囲 (明らかに min_comp_guess から max_comp_guess まで) を生成する必要があります。

私は常に2番目です!:)

于 2012-11-30T10:52:11.100 に答える
0

私は完全に間違っているかもしれませんが、コードをテストしているときに、プログラム数を選択すると、選択した数よりも大きくなるか、またはおそらく減少し、推測した数に近づくことはありませんでした. 私が作成した同様の上位/下位プログラムにも同じ問題がありました。問題を修正するために、大なり記号と小なり記号を入れ替えただけです。これが役に立ち、プログラムに適用できることを願っています。

于 2015-03-03T22:01:42.080 に答える