Je « commence à apprendre Python et jessaie doptimiser ce jeu de recherche de bisection.
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))
Réponse
Je pense que certaines choses pourraient améliorer votre code, ce qui est tout à fait correct:
- Ayant des variables pour
highetlow, vous ne devriez pas « t coder en dur leurs valeurs dans louvertureprint. - Vous devez utiliser
//pour vous assurer que vous obtenez une division entière. - Vous pouvez écrire
guess = (low + high) // 2une seule fois, si vous le placez comme première ligne dans la bouclewhile. - Lors de la vérification de
pointer, vous pouvez commencer par le convertir en minuscules, pour vous assurer quehetHsont bien compris. - Rendez votre code conforme à PEP8 sur des choses comme le lin maximum e longueur.
- Lutilisation de la
formatméthode destrpeut rendre plus clair ce que vous imprimez.
Rassemblez tout cela:
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))
Réponse
En plus des points de Jaime.
-
Débarrassez-vous du drapeau
guessing, et ayez juste une boucle infinie avec une pause déclaration. -
pointerest un nom vraiment étrange pour cette variable dautant plus quil signifie autre chose dans dautres langages de programmation.
Réponse
En complétant la réponse donnée par Jamie, avec une remarque:
Quand vous type "c", même si le nombre nest pas celui auquel vous pensez, imprime toujours cette partie du code print("Game over. Your secret number was {0}."
Donc, pour éviter cela, vous devez également tester (str(numbers) == str(guess)) sur la branche de (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
Commentaires
- Le but de ce jeu de devinettes est que lutilisateur nentre jamais le nombre réel car cest un secret .
Réponse
En plus des autres réponses: quand je choisis le nombre 100 comme secret , le code se déroulera dans une boucle sans fin, me demandant à plusieurs reprises comment il se compare à 99. Vous pouvez restreindre davantage la plage après avoir obtenu une réponse de lutilisateur.