Gra w szukanie podziału

Zaczynam uczyć się języka Python i próbuję zoptymalizować tę grę z wyszukiwaniem na pół.

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

Odpowiedź

Myślę, że kilka rzeczy poprawiłoby Twój kod, co jest całkiem poprawne:

  • Mając zmienne dla high i low, nie należy na stałe zakodować ich wartości w otwierającym print.
  • Powinieneś użyć //, aby upewnić się, że otrzymujesz dzielenie liczb całkowitych.
  • Możesz napisać guess = (low + high) // 2 tylko raz, jeśli umieścisz go jako pierwszą linię wewnątrz pętli while.
  • Podczas sprawdzania pointer, możesz najpierw przekonwertować je na małe litery, aby upewnić się, że zarówno h, jak i H są zrozumiałe.
  • Spraw, aby Twój kod był zgodny z PEP8 w takich kwestiach jak maksymalna lin e długość.
  • Użycie metody format str może lepiej wyjaśnić, co drukujesz.

Wszystko razem:

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

Odpowiedź

Oprócz punktów Jaimea.

  1. Pozbądź się flagi guessing i po prostu miej nieskończoną pętlę z przerwą komunikat.

  2. pointer to naprawdę dziwna nazwa tej zmiennej, zwłaszcza że oznacza coś innego w innych językach programowania.

Odpowiedź

Uzupełnienie odpowiedzi udzielonej przez Jamiego z uwagą:

Kiedy wpisz "c", nawet jeśli numer nie jest tym, o którym myślisz, zawsze drukuje tę część kodu print("Game over. Your secret number was {0}."

Aby tego uniknąć, należy więc przetestować również (str(numbers) == str(guess)) na gałęzi (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 

Komentarze

  • Celem tej gry w zgadywanie jest to, że użytkownik nigdy nie wprowadza rzeczywistej liczby, ponieważ jest to sekret .

Odpowiedź

Oprócz innych odpowiedzi: kiedy wybiorę liczbę 100 jako mój sekret , kod wpadnie w nieskończoną pętlę, wielokrotnie pytając mnie, jak wypada w porównaniu z 99. Możesz bardziej ograniczyć zakres po uzyskaniu odpowiedź od użytkownika.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *