Jeu de recherche de bisection

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 et low, vous ne devriez pas « t coder en dur leurs valeurs dans louverture print.
  • 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 boucle while.
  • Lors de la vérification de pointer, vous pouvez commencer par le convertir en minuscules, pour vous assurer que h et H sont bien compris.
  • Rendez votre code conforme à PEP8 sur des choses comme le lin maximum e longueur.
  • Lutilisation de la format méthode de str 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.

  1. Débarrassez-vous du drapeau guessing, et ayez juste une boucle infinie avec une pause déclaration.

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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *