Crée un jeu interactif
Il reste de nombreuses notions et fonctions prédéfinies à découvrir et chaque projet de ce chapitre va te montrer de nouveaux aspects du langage Python.
Dans cette leçon je vais te montrer comment rendre tes programmes interactifs et pour ça tu vas créer un jeu, le jeu du juste prix. L'ordinateur choisi un nombre entre 0 et 100 et on doit deviner le nombre.
- 1
Pour commencer tu vas tester le jeu. J'ai créé pour ça une fonction
jeu
. Lorsque tu appelles cette fonction, une boîte de dialogue apparaît et te demandes de choisir un nombre. Cette boîte réapparaît tant que tu n'as pas trouvé le nombre mystère, en indiquant si ton estimation est trop petite ou trop grande.
Appelle la fonctionjeu
dans la console (sans argument) et fais une partie du juste prix.Solution
Il suffit d'appeler la fonction
jeu
et de faire une partie.>>> jeu() gagné
- 2
Pour ajouter de l'interactivité dans un programme on utilise la fonction
input
. Cette fonction est prédéfinie dans Python, donc il n'est pas nécessaire de l'importer d'un module.Par exemple
input("choisi un nombre :")
fait s'afficher une boîte de dialogue avec le messagechoisi un nombre :
.
Appelle la fonctioninput
dans la console en faisant en sorte que la boîte de dialogue affiche le messageQuel est ton nom ?
Solution
On appelle la fonction
input
avec le bon message en argument. La boîte de dialogue apparaît et on peut alors saisir une valeur, qui s'affiche ensuite dans la console. J'ai entré Pikachu :>>> input("Quel est ton nom ?") Pikachu
- 3
Pour que le programme soit pleinement interactif il nous faut un moyen d'accéder à la valeur saisie par l'utilisateur dans la boîte de dialogue.
La fonction
input
renvoie justement à la fin de son exécution la valeur saisie par l'utilisateur. C'est d'ailleurs pour ça que la valeur s'est affichée automatiquement dans la console à la question précédente. On peut alors récupérer cette valeur dans une variable.Par exemple en faisant
nom = input("Quel est ton nom ?")
lorsqu'une valeur est saisie et que la boîte de dialogue est validée, la fonctioninput
renvoie cette valeur qui est ensuite affectée à la variablenom
. On peut alors accéder au nom de la personne via cette variable.
À toi de jouer. Dans l'éditeur, crée une variablenom
qui contient une valeur saisie de manière interactive grâce à la fonctioninput
comme au paragraphe précédent. Tu peux personnaliser le message. Ensuite affiche un message du typeBonjour à toi ****
à l'aide d'une f-string en remplaçant les étoiles par le nom de la personne.Solution
On crée tout d'abord une variable
nom
et on l'affecte de manière interactive à l'aide deinput
en faisantnom = input("Comment t'appelles-tu ?")
Ce code fait apparaître une boîte de dialogue avec le message
Comment t'appelles-tu ?
et la valeur saisie par l'utilisateur est ensuite affectée à la variablenom
Une fois que l'on a le nom de la personne dans la variable
nom
, on peut afficher un message d'accueil personnalisé avec une f-string.nom = input("Comment t'appelles-tu ?") print(f"Bonjour à toi {nom}")
- 4
Tu as maintenant tous les ingrédients pour créer le jeu interactif ! Voici la logique de ce programme :
- l'ordinateur choisit un nombre de manière aléatoire
- le joueur fait une estimation (interactive) du nombre mystère
- on compare l'estimation et le nombre mystère
- si le joueur a gagné le programme s'arrête, sinon un indice s'affiche et le joueur refait une estimation.
Dans la suite tu va implémenter ces différentes étapes. Pour commencer il faut générer un nombre aléatoire. Pour ça on utilise la fonction
randint
du modulerandom
que tu as déjà rencontré.
Importe la fonctionrandint
dans ton programme et créé une variablenombre
qui contient un nombre choisi aléatoirement entre 0 et 100. Tu peux effacer le code de la question précédente.Solution
On commence par importer la fonction
randint
du modulerandom
On crée ensuite une variable
nombre
contenant un entier choisi aléatoirement entre 0 et 100 inclus à l'aide derandint
. Avec la fonctionrandint
les bornes sont incluses, à la différence de la fonctionrange
. Donc on peut appelerrandint(0,100)
pour obtenir un nombre aléatoire entre 0 et 100 inclus.from random import randint nombre = randint(0,100)
- 5
En-dessous de la variable
nombre
crée une variablechoix
qui va contenir le nombre choisi par le joueur. Cette variable est affectée de manière interactive grâce àinput
. Affiche un message pour guider le joueur dans son choix, par exempleChoisi un entier entre 0 et 100
Solution
On affecte une valeur à la variable
choix
grâce à la fonctioninput
. L'argument de la fonctioninput
est le message qui s'affiche dans la boîte de dialogue.from random import randint nombre = randint(0,100) choix = input("Choisi un nombre entre 0 et 100")
- 6
Il reste à comparer les variables
choix
etnombre
. Le soucis c'est queinput
ne renvoie pas un nombre mais une chaîne de caractères.Pour t'en rendre compte fais le test dans la console. Si tu exécutes
n = input("nombre")
et que tu tapes le nombre 3 dans la boîte de dialogue, alorsn
n'est pas égale au nombre 3 mais à la chaîne de caractères'3'
>>> n = input('nombre') >>> n == 3 False >>> n == "3" True
L'astuce c'est de convertir
n
en un entier en utilisant la fonction prédéfinieint
(pour integer, entier en anglais). Par exempleint("3")
renvoie le nombre 3.>>> n = int(input('nombre')) >>> n == 3 True
Convertis le nombre choisi par le joueur en un entier à l'aide de la fonctionint
. Ensuite utilise une instruction conditionnelle pour tester l'égalité entrechoix
etnombre
: s'il y a égalité, affiche le messagegagné
, sinon affiche le messageperdu
. Il n'y a qu'un seul essai possible pour le moment.Solution
On commence par convertir la variable
choix
en un nombre à l'aide de la fonctionint
.Ensuite on utilise une instruction conditionnelle : si
nombre
etchoix
sont égaux on affiche gagné, et perdu sinon.from random import randint nombre = randint(0,100) choix = int(input("Choisi un nombre entre 0 et 100")) if nombre == choix: print("gagné") else: print("perdu")
- 7
Dernière étape : le joueur peut réessayer s'il s'est trompé. À chaque fois qu'il se trompe, on affiche une nouvelle boîte de dialogue interactive avec un indice comme
Trop petit
ouTrop grand
.Comme il faut répéter des actions similaires, on va utiliser une boucle. On ne sait pas à l'avance combien de fois le joueur va se tromper, donc on utilise une boucle
while
. Tant quenombre
est différent dechoix
, il faut demander au joueur sa nouvelle estimation. Ceci permet de réaffecter la variablechoix
de manière interactive en affichant un indice adapté.Égalité et différence
En Python on teste l'égalité de deux variables avec
==
et on teste si elles sont différentes avec!=
>>> 1 == 2 False >>> 1 != 2 True
Finis de coder le jeu, en remplaçant l'instruction conditionnelle de la question précédente par une boucle while comme décrit dans le paragraphe précédent. Pour avoir un message adapté il va falloir tester si le nombre choisi est trop petit ou trop grand. N'oublie pas de le convertir en un entier et affiche le messageGagné !
à la fin.Solution
On commence par enlever l'instruction conditionnelle de la question précédente qui ne permet de faire qu'un seul essai. On la remplace par une boucle while qui s'exécute tant que les variables
choix
etnombre
sont différentes. C'est-à-dire tant quechoix != nombre
Dans le corps de la boucle while, puisque
nombre
etchoix
ont des valeurs différentes, il n'y a donc que deux possibilités : ou bien l'estimation est trop petite, ou bien elle est trop grande.Si l'estimation du joueur est trop petite alors on affiche une nouvelle boîte de dialogue pour réaffecter la variable
choix
avec une nouvelle estimation. On en profite pour donner un indice dans le message de la boîte de dialogue.Si l'estimation est trop grande on adapte la logique précédente.
Enfin lorsque le joueur trouve le nombre mystère, l'exécution sort de la boucle while et les lignes suivantes sont lues. On affiche alors le message
Gagné !
from random import randint nombre = randint(0,100) choix = int(input("Choisi un nombre entre 0 et 100")) while nombre != choix: if choix < nombre: choix = int(input("Trop petit")) else: choix = int(input("Trop grand")) print("Gagné !")