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
oglow
, bør du ikke hardkode verdiene deres i åpningenprint
. - 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 iwhile
loop. - Når du ser etter
pointer
, kan det være lurt å først konvertere den til små bokstaver, for å sikre at bådeh
ogH
er forstått. - Gjør koden din i samsvar med PEP8 på ting som maksimum lin lengde.
- Ved å bruke
format
-metoden tilstr
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.
-
Kvitt deg med
guessing
flagget, og bare ha en uendelig løkke med et brudd uttalelse. -
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.