私はPythonを学び始めており、この二分検索ゲームを最適化しようとしています。
high = 100 low = 0 guess = (high + low)/2 print("Please think of a number between 0 and 100!") guessing = True while guessing: print("Is your secret number " + str(guess) + "?") pointer = raw_input("Enter "h" to indicate the guess is too high. Enter "l" to indicate the guess is too low. Enter "c" to indicate I guessed correctly.") if pointer == "h": high = guess guess = (low + guess)/2 elif pointer == "l": low = guess guess = (high + guess)/2 elif pointer == "c": guessing = False else: print("Sorry, I did not understand your input.") print("Game over. Your secret number was: " + str(guess))
回答
コードが改善されると思うことがいくつかありますが、これは非常に正しいことです。
-
high
とlow
の変数があるので、最初のprint
。 -
//
を使用して、整数除算を取得していることを確認する必要があります。 - を
while
ループ内の最初の行として配置した場合は1回のみ。 - 、
h
とH
の両方が理解されていることを確認するために、最初に小文字に変換することをお勧めします。 - 最大linなどのコードを PEP8 に準拠させますeの長さ。
-
str
のformat
メソッドを使用すると、印刷内容をより明確にすることができます。
すべてをまとめる:
high, low = 100, 0 print("Please think of a number between {0} and {1}!".format(low, high)) guessing = True while guessing: guess = (low + high) // 2 print("Is your secret number {0}?".format(guess)) pointer = raw_input("Enter "h" to indicate the guess is too high. " "Enter "l" to indicate the guess is too low. " "Enter "c" to indicate I guessed correctly.").lower() if pointer == "h" : high = guess elif pointer == "l" : low = guess elif pointer == "c": guessing = False else: print("Sorry, I did not understand your input.") print("Game over. Your secret number was {0}.".format(guess))
回答
Jaimeのポイントに加えて。
-
guessing
フラグを削除し、ブレークのある無限ループを作成します。ステートメント。 -
pointer
は、特に他のプログラミング言語で他の何かを意味するため、その変数の非常に奇妙な名前です。
回答
ジェイミーからの返信を完了し、次のようにコメントします。
"c"
と入力すると、考えている番号ではない場合でも、常にコードのこの部分が出力されますprint("Game over. Your secret number was {0}."
したがって、これを回避するには、(response == "c")
のブランチで(str(numbers) == str(guess))
もテストする必要があります。
high, low = 100, 0 guess = (low + high) // 2 numbers = raw_input("Please think of a number between {0} and {1}!".format(low, high)) guessing = True while guessing: print("Is your secret number {0}?".format(guess)) response = raw_input("Enter "h" to indicate the guess is too high. " "Enter "l" to indicate the guess is too low. " "Enter "c" to indicate I guessed correctly.").lower() if response == "h" : high = guess elif response == "l" : low = guess elif (response == "c") and (str(numbers) == str(guess)) : print("Game over. Your secret number was {0}.".format(guess)) break else: print("Sorry, I did not understand your input.") guess = (low + high) // 2
コメント
- この推測ゲームのポイントは、秘密であるため、ユーザーが実際の数値を入力しないことです。 i>。
回答
他の回答に加えて:秘密として100を選択した場合、コードは無限ループに陥り、99との比較を繰り返し尋ねられます。取得後、範囲をさらに制限できます。ユーザーからの回答。