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
high
etlow
, 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) // 2
une 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 queh
etH
sont bien compris. - Rendez votre code conforme à PEP8 sur des choses comme le lin maximum e longueur.
- Lutilisation de la
format
méthode destr
peut 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. -
pointer
est 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.