Jag börjar lära mig Python och försöker optimera det här halvsökningsspelet.
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
Några saker som jag tror skulle förbättra din kod, vilket är helt korrekt:
- Med variabler för
high
ochlow
bör du inte hårda koden för deras värden i inledningenprint
. - Du bör använda
//
för att se till att du får heldelning. - Du kan skriva
guess = (low + high) // 2
bara en gång om du placerar den som den första raden inutiwhile
-slingan. - När du söker efter
pointer
, kanske du först vill konvertera det till gemener, för att se till att bådeh
ochH
är förståda. - Gör att din kod överensstämmer med PEP8 på saker som max lin längd.
- Med
format
-metoden förstr
kan du tydligare se vad du skriver ut.
Att sätta ihop allt:
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
Förutom Jaimes poäng.
-
Bli av med
guessing
-flaggan och ha bara en oändlig slinga med en paus påstående. -
pointer
är ett riktigt konstigt namn för den variabeln, särskilt eftersom det betyder något annat i andra programmeringsspråk.
Svar
Slutför svaret från Jamie med en kommentar:
När du skriv "c"
, även om numret inte är det du tänker på, skriver du alltid ut den här delen av koden print("Game over. Your secret number was {0}."
För att undvika det måste du också testa (str(numbers) == str(guess))
på grenen av (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
- Poängen med detta gissningsspel är att användaren aldrig matar in det faktiska antalet eftersom det är en hemlighet .
Svar
Förutom de andra svaren: när jag väljer siffran 100 som min hemlighet , kommer koden att gå in i en oändlig slinga, och upprepade gånger frågar mig hur den kan jämföras med 99. Du kan begränsa räckvidden mer när du får ett svar från användaren.