Hra pro hledání půlení

Začínám se učit Python a snažím se tuto hru pro hledání půlení optimalizovat.

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

Odpověď

Některé věci, které by podle mého názoru mohly vylepšit váš kód, jsou zcela správné:

  • Proměnné pro high a low byste neměli pevně kódovat jejich hodnoty v úvodní print.
  • Měli byste použít //, abyste se ujistili, že dostáváte celočíselné dělení.
  • Můžete napsat guess = (low + high) // 2 pouze jednou, pokud jej umístíte jako první řádek do smyčky while.
  • Při kontrole pointer, možná budete chtít nejprve převést malá písmena, abyste se ujistili, že h i H jsou srozumitelné.
  • Upravte svůj kód tak, aby vyhovoval PEP8 , například maximální lin e délka.
  • Pomocí metody format metody str můžete objasnit, co tisknete.

Shrnutí:

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

Odpověď

Kromě bodů Jaimeho.

  1. Zbavte se příznaku guessing a nechte si udělat nekonečnou smyčku s přestávkou tvrzení.

  2. pointer je opravdu divný název pro tuto proměnnou, protože v jiných programovacích jazycích znamená něco jiného.

Odpověď

Vyplnění odpovědi od Jamieho s poznámkou:

Když zadejte "c", i když číslo není to, na které si myslíte, vždy vytiskne tuto část kódu print("Game over. Your secret number was {0}."

Abyste tomu předešli, musíte otestovat také (str(numbers) == str(guess)) na větvi (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 

Komentáře

  • Smyslem této hádanky je, že uživatel nikdy nezadá skutečné číslo, protože to je tajemství .

Odpověď

Kromě dalších odpovědí: když jako své tajemství zvolím číslo 100 , kód se spustí do nekonečné smyčky a opakovaně se mě zeptá, jak je v porovnání s 99. Po získání více můžete rozsah omezit odpověď od uživatele.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *