二分検索ゲーム

私は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)) 

回答

コードが改善されると思うことがいくつかありますが、これは非常に正しいことです。

  • highlowの変数があるので、最初のprint
  • //を使用して、整数除算を取得していることを確認する必要があります。
  • whileループ内の最初の行として配置した場合は1回のみ。
  • hHの両方が理解されていることを確認するために、最初に小文字に変換することをお勧めします。
  • 最大linなどのコードを PEP8 に準拠させますeの長さ。
  • strformatメソッドを使用すると、印刷内容をより明確にすることができます。

すべてをまとめる:

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のポイントに加えて。

  1. guessingフラグを削除し、ブレークのある無限ループを作成します。ステートメント。

  2. 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 

コメント

  • この推測ゲームのポイントは、秘密

回答

他の回答に加えて:秘密として100を選択した場合、コードは無限ループに陥り、99との比較を繰り返し尋ねられます。取得後、範囲をさらに制限できます。ユーザーからの回答。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です