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.")

10.4. 4. Un programme complet#

Prenons maintenant un peu de temps pour étudier une version un peu plus développée du jeu. Téléchargez le fichier source et regardez comment il est organisé. C’est ce à quoi doit ressembler un programme un fait. jeu du nombre secret.

  1. Il débute avec les imports et la définition des constantes. Ces constantes nous permettent de changer les bornes du jeu en évitant d’avoir à modifier le code à plusieurs endroit différents. De plus, donner un nom à une valeur nous aide à savoir à quoi elle correspond.

  2. À la suite, nous avons la définition d’un ensemble de fonction. Ces fonctions sont des outils qui seront assemblés plus loin. Leur nom est explicite pour que l’on sache ce qu’elles font, sans même avoir à regarder ce que contient le code. Elles comportent un commentaire decrivant leur fonctionnement.

  3. Vient ensuite la fonction main, elle réuni toutes les briques de base que nous avons préparées avant.

  4. Enfin, nous avons l’appel de la fonction main. C’est le point d’entrée de notre programme. C’est depuis cet appel de fonction que tout est déroulé.

En organisant de la sorte le code, un développeur ouvrant ce fichier source pourra facilement comprendre ce que fait et comment fonctionne le programe. Il parcourera rapidement le fichier pour vérifier comment il est organiser. Il sera rassurer de voir que tout est bien construit. En arrivant à l’appel de la fonction main, il saura que c’est le point d’entré du programme. Il pourra alors analyser le code de la fonction. Les noms des fonctions et des variables étant pertinants, il va lire la fonction presque comme si elle était écrite en langage naturel. Éventuellement, s’il a un doute, il pourra aller regarder le détail d’une fonction.