10. Jeu du nombre secret#

Nous avons maintenant quelques notions de Python. Elles sont peu nombreuses mais nous perttent de réaliser un jeu simple : le jeu du nombre secret. Le but est simple. Un nombre secret est tiré au hasard entre 0 et 100. Le joueur doit trouver se nombre en un nombre minimum de tentative. À chaque tentative il reçoit un indice, « plus grand », « plus petit ».

La meilleure approche en programmation est de déterminer les étapes élémentaires nécessaires et de les réaliser indépendamment.

  1. Écrire une fonction qui permette à un joueur de saisir un nombre au clavier.

  2. Demander au joueur de saisir un nombre tant qu’il n’a pas trouvé le bon et de donner un indice.

  3. Compter le nombre de tentatives et l’afficher à la fin.

10.1. 1. Saisir un nombre.#

Commençons donc avec la saisie. Écrivez une fonction get_number qui demande à l’utilisateur de saisir un nombre au clavier. Cette fonction demande à l’utilisateur un nouveau nombre tant que le nombre saisi n’est pas compris entre 0 et 100. cette fonction renvoie le nombre saisi par l’utilisateur.

Remarque, pour éviter une erreur du type TypeError: '<' not supported between instances of 'str' and 'int', pensez à convertir votre chaine de caractère avant de la comparer avec un nombre.

def get_number():
    pass

Tester votre fonction avec l’instruction suivante.

n = get_number()
if n == None :
    print("> Non ! Votre fonction semble ne pas renvoyer de valeur. Vérifiez le return.")
elif type(n) != int :
    print("> Non ! Votre fonction ne renvoie pas une valeur entière. Pensez à l'utilsation de \"int()\".")
elif n < 0 or n > 100 :
    print("> Non ! Il semble que le nombre saisi ne soit pas compris entre 0 et 100.")
else :
    print("> Ok, ça semble bon.")

Voici une correction possible.

def get_number():
    n = int(input("Saisir un nombre entre 0 et 100. "))
    while n < 0 or n > 100:
        n = int(input("Saisir un nouveau nombre, il doit être compris entre 0 et 100. "))
    return n

10.2. 2. Boucle de jeu#

Nous pouvons maintenant attaquer le coeur du jeu. Il faut tout d’abbord choisir un nombre au hasard. Dans le chapitre sur les bibliothèques nous avons appris à le faire.

from random import randint
secret = randint(0, 100)

Ensuite, nous allons utiliser la fonction get_number pour créer la boucle de jeu. On demande à l’utilisateur de saisir un nombre. Puis, tant que ce nombre n’est pas égal au nombre secret, on indique un indice et on demande un nouveau nombre au joueur.

Pour simplifier un peu le chose, je vous conseille d’afficher le nombre secret dans les premiers temps. Cela permet de tester plus facilement le programme.

from random import randint

secret = randint(0, 100)
print(secret)

# Compléter ici avec la boucle de jeu...

Voici une correction possible.

from random import randint

secret = randint(0, 100)
print(secret)
guess = get_number()
while secret != guess:
    if secret < guess :
        print("Votre proposition est trop grande.")
    elif secret > guess :
        print("Votre proposition est trop petite.")
        
    guess = get_number()

10.3. 3. Nombre de tentatives#

Maintenant que l’on a une version rudimentaire du jeu, introduisons le nombre de tentative. Pour cela, il faut un compteur que l’on incrémente (augmente de 1 en 1), à chaque tentative.

Enfin, après la boucle de jeu, on affiche un message de victoire avec le compteur. Pour afficher un message contenant un nombre, on peut utiliser ce genre d’instruction (on verra mieux ensuite).

print("Un chaine avec un nombre : " + str(variable) + " !" )
from random import randint

secret = randint(0, 100)
print(secret)

# ...

Voici une correction possible.

from random import randint

secret = randint(0, 100)
nb = 1
guess = get_number()
while secret != guess:
    if secret < guess :
        print("Votre proposition est trop grande.")
    elif secret > guess :
        print("Votre proposition est trop petite.")
        
    guess = get_number()
    nb = nb+1

print("Bravo !")
print("Vous avez trouvé en " + str(nb) + " essais.")