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 fonction
jeudans la console (sans argument) et fais une partie du juste prix.Solution
Il suffit d'appeler la fonction
jeuet 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 fonction
inputdans la console en faisant en sorte que la boîte de dialogue affiche le messageQuel est ton nom ?Solution
On appelle la fonction
inputavec 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
inputrenvoie 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 fonctioninputrenvoie 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 variable
nomqui contient une valeur saisie de manière interactive grâce à la fonctioninputcomme 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
nomet on l'affecte de manière interactive à l'aide deinputen 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 variablenomUne 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
randintdu modulerandomque tu as déjà rencontré.Importe la fonction
randintdans ton programme et créé une variablenombrequi 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
randintdu modulerandomOn crée ensuite une variable
nombrecontenant un entier choisi aléatoirement entre 0 et 100 inclus à l'aide derandint. Avec la fonctionrandintles 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
nombrecrée une variablechoixqui 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 100Solution
On affecte une valeur à la variable
choixgrâce à la fonctioninput. L'argument de la fonctioninputest 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
choixetnombre. Le soucis c'est queinputne 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, alorsnn'est pas égale au nombre 3 mais à la chaîne de caractères'3'>>> n = input('nombre') >>> n == 3 False >>> n == "3" TrueL'astuce c'est de convertir
nen 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 TrueConvertis le nombre choisi par le joueur en un entier à l'aide de la fonction
int. Ensuite utilise une instruction conditionnelle pour tester l'égalité entrechoixetnombre: 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
choixen un nombre à l'aide de la fonctionint.Ensuite on utilise une instruction conditionnelle : si
nombreetchoixsont é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 comme indice
Trop petitouTrop 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 quenombreest différent dechoix, il faut demander au joueur sa nouvelle estimation. Ceci permet de réaffecter la variablechoixde 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 TrueFinis 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 message
Gagné !à 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
choixetnombresont différentes. C'est-à-dire tant quechoix != nombreDans le corps de la boucle while, puisque
nombreetchoixont 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
choixavec 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é !")