#encoding: utf-8 ############# # Fonctions # ############# import random def try_to_guess( nb_min, nb_max ): """Choisi un nombre compris entre un min et un max et le renvoie.""" if nb_min == nb_max or nb_min > nb_max: # Au cas où cette erreur apparait, il est préférable de signaler l'erreur # pour qu'elle puisse être traitée. raise Exception("tu as triché !") # Il est plus efficace d'essayer le nombre au milieu des deux bornes, # plutôt que d'en choisir un au hasard. #import math #return nb_min + math.floor( (nb_max - nb_min) / 2 ) # En python, il existe un opérateur plus concis, # qui ne nécessite pas d'importer un module. return nb_min + (nb_max - nb_min) // 2 # Il aurait été plus concis d'écrire le calcul sous cette forme, # mais attention au dépassement avec des grands nombres ! #return (nb_min + nb_max) / 2 def reply( answer, guess, min, max ): """Analyse la réponse de l'humain et renvoie vrai si on a trouvé la bonne.""" if answer == 0: min = guess + 1 elif answer == 1: max = guess - 1 elif answer == 2: print("Enfin !") return True,min,max else: print("Tu dois répondre par 0, 1 ou 2 !") return False,min,max ######## # Code # ######## min = 0 max = 10 print("Pense à un nombre entre",min,"et",max) attempts = 10 found = False while attempts > 0: # Au cas où la fonction try_to_guess fait remonter une erreur, # on peut l'attraper ici, afficher un message et sortir. try: guess = try_to_guess(min,max) except Exception as err: print("Erreur :",err) break print("Je crois que tu penses au nombre", guess, ", est-il:") print("0: trop petit ?") print("1: trop grand ?") print("2: le bon numéro ?") answer = int( input() ) found,min,max = reply( answer, guess, min, max ) if found == True: break else: attempts = attempts - 1 if found: print("J'ai gagné :-)") else: print("J'ai perdu :-(")