Bisektionssøgningsspil

Jeg begynder at lære Python og prøver at optimere dette bisection-søgespil.

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

Svar

Nogle ting synes jeg vil forbedre din kode, hvilket er helt korrekt:

  • At have variabler til high og low, skal du ikke hårdkode deres værdier i åbningen print.
  • Du skal bruge // for at sikre, at du får heltal.
  • Du kan skrive guess = (low + high) // 2 kun en gang, hvis du placerer den som den første linje inde i while -sløjfen.
  • Når du kontrollerer for pointer, kan du først konvertere det til små bogstaver for at sikre, at både h og H forstås.
  • Gør din kode i overensstemmelse med PEP8 på ting som maksimum lin længde.
  • Brug af format -metoden til str kan gøre det mere klart, hvad du udskriver.

Sætter det hele sammen:

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

Svar

Ud over Jaimes point.

  1. Slip af med guessing -flagget, og få bare en uendelig løkke med en pause udmelding.

  2. pointer er et rigtig underligt navn for den variabel, især da det betyder noget andet i andre programmeringssprog.

Svar

Afslutning af svaret givet af Jamie med en bemærkning:

Når du skriv "c", selvom tallet ikke er det, du tænker på, skal du altid udskrive denne del af koden print("Game over. Your secret number was {0}."

For at undgå det skal du også teste (str(numbers) == str(guess)) på grenen af (response == "c"):

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 

Kommentarer

  • Pointen med dette gættespil er, at brugeren aldrig indtaster det faktiske antal, da det er en hemmelighed .

Svar

Ud over de andre svar: når jeg vælger tallet 100 som min hemmelighed , koden løber ind i en endeløs løkke og spørger mig gentagne gange, hvordan den kan sammenlignes med 99. Du kan begrænse rækkevidden mere, når du får et svar fra brugeren.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *