Bisection search game

Jeg begynner å lære Python og prøver å optimalisere dette bisection search-spillet.

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

Noen ting jeg tror vil forbedre koden din, noe som er helt riktig:

  • Å ha variabler for high og low, bør du ikke hardkode verdiene deres i åpningen print.
  • Du bør bruke // for å sikre at du får heltallsdeling.
  • Du kan skrive guess = (low + high) // 2 bare én gang, hvis du plasserer den som første linje inne i while loop.
  • Når du ser etter pointer, kan det være lurt å først konvertere den til små bokstaver, for å sikre at både h og H er forstått.
  • Gjør koden din i samsvar med PEP8 på ting som maksimum lin lengde.
  • Ved å bruke format -metoden til str kan du tydeligere hva du skriver ut.

Sette alt 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

I tillegg til Jaimes poeng.

  1. Kvitt deg med guessing flagget, og bare ha en uendelig løkke med et brudd uttalelse.

  2. pointer er et veldig rart navn for den variabelen, spesielt da det betyr noe annet i andre programmeringsspråk.

Svar

Fullfører svaret gitt av Jamie, med en bemerkning:

Når du skriv "c", selv om tallet ikke er det du tenker på, skriver du alltid ut denne delen av koden print("Game over. Your secret number was {0}."

Så for å unngå det må du også teste (str(numbers) == str(guess)) på grenen til (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

  • Poenget med dette gjetningsspillet er at brukeren aldri legger inn det faktiske tallet siden det er en hemmelighet .

Svar

I tillegg til de andre svarene: når jeg velger tallet 100 som hemmeligheten min , vil koden løpe inn i en endeløs sløyfe, og spør meg gjentatte ganger hvordan den kan sammenlignes med 99. Du kan begrense rekkevidden mer etter at du har fått et svar fra brukeren.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *