Attention ! Cet interpréteur n’est pas totalement compatible avec Python3.
"Jeu du «plus ou moins», implémentation pédagogique à base d’exceptions."
import random
MAX = 20
STOP_STR = "merci"
nb_mystere = random.randrange(MAX)
class PlusOuMoinsException(Exception): pass
class StopException(PlusOuMoinsException): pass
class BravoException(PlusOuMoinsException): pass
class TropException(PlusOuMoinsException):
def __init__(self, code = 0):
self.code = code
def proposition(nb_mystere):
try:
entree = input()
if entree == STOP_STR:
raise StopException # Non récupérée par le except qui vient.
proposition = int(entree)
except KeyboardInterrupt:
print()
raise StopException # Conversion d’exception.
if proposition == nb_mystere:
raise BravoException # Ici la classe.
elif proposition < nb_mystere:
raise TropException(0) # Ici l'objet.
else:
raise TropException(1) # Exceptions traitées par l(es) appelant(s).
print("Bienvenue dans le jeu du « plus ou moins ».")
print("Il consiste à deviner un nombre dans range({0}).".format(MAX))
print("Taper « {0} » ou Ctrl+C pour arrêter.".format(STOP_STR))
while True:
print("Votre tentative: ", end="")
try: # C’est ici que les exceptions sont gérées.
proposition(nb_mystere)
except StopException:
print("Au revoir.")
break
except BravoException:
print("Gagné, on recommence !")
nb_mystere = random.randrange(MAX)
except PlusOuMoinsException as e: # TropException pas attrapée en tant
adjectifs = ["petit", "grand"] # que telle, on utilise la hiérarchie.
print(" --> Trop {0}.".format(adjectifs[e.code]))
except ValueError as e:
print("Veuillez entrer un nombre.")
except Exception as e: # Difficile de tomber ici, quoique…
print("Erreur non gérée.")
raise e
print("Tant pis.")
finally:
print("Bien bien bien…")