Dubbelsökningsspel

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 och low bör du inte hårda koden för deras värden i inledningen print.
  • 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 inuti while -slingan.
  • När du söker efter pointer, kanske du först vill konvertera det till gemener, för att se till att både h och H är förståda.
  • Gör att din kod överensstämmer med PEP8 på saker som max lin längd.
  • Med format -metoden för str 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.

  1. Bli av med guessing -flaggan och ha bara en oändlig slinga med en paus påstående.

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

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *