aapssfc/src/devine_ordi_2.py
2012-03-17 12:21:34 +01:00

87 lines
2 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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 :-(")