Ce billet fait partie dâune sĂ©rie de billets : #atelier-python.
- Article prĂ©cĂ©dent : đ Atelier Python ⥠â Notions de base : Boucles et variables.
- Article suivant : đ Atelier Python ⣠â Python depuis la ligne de commande
Merci de laisser un commentaire si vous avez essayé ou fini cet atelier. Le commentaire sera publié que si vous en faite la demande.
RĂšgles du jeu
On va commencer par un jeu trĂšs simple. Lâordinateur tire un nombre entier au hasard entre 1 et 100 et vous avez 7 essais pour le trouver.
AprĂšs chaque tentative, lâordinateur vous dira si le nombre que vous avez proposĂ© est trop petit, trop grand, ou si vous avez trouvĂ© le bon nombre.
Introduction de la notion de commentaire
Pour aider Ă la comprĂ©hension du code, il est nĂ©cessaire dâexpliquer ce qui est fait. Voici comment vous pouvez commencer votre code :
# Jeu du nombre mystĂšre
Cette ligne est un commentaire. Les commentaires nâont pas dâinfluence sur le programme lui-mĂȘme ; ils sont lĂ pour aider Ă la lecture et Ă la comprĂ©hension du code.
RĂšgles de base pour les commentaires
- Un commentaire ne doit pas ĂȘtre redondant avec le code. Il nâest pas nĂ©cessaire de commenter des choses Ă©videntes ! Dâune maniĂšre gĂ©nĂ©rale, mieux le code est Ă©crit, moins il y aura besoin de commentaires.
- Pour dĂ©terminer ce quâil faut indiquer dans le commentaire, se poser la question « pourquoi ? » et non pas « comment ? ». En effet, on arrivera souvent Ă comprendre ce que fait une fonction sans commentaires, mais on ne verra pas toujours son utilitĂ©.
Introduction de la notion de bibliothĂšque
Comme souvent dans les jeux, nous allons avoir besoin dâun gĂ©nĂ©rateur de nombre alĂ©atoire. Ici, il sâagira dâinitialiser la variable contenant le nombre Ă rechercher.
Comme la plupart des langages, Python propose un certain nombre de bibliothĂšques standards qui propose des outils communs pour manipuler diffĂ©rents types dâobjets. Par exemple, ici on ajoutera Ă nombre programme qui sait gĂ©rer les nombres alĂ©atoires.
from random import randint
Dans notre cas, on importera quâune seule fonction : randint
et on précise dans quelle bibliothÚque cette fonction se trouve : random
.
Notez : quâil est possible de crĂ©er votre propre bibliothĂšque de fonctions, en Python on utilise dans ce cas plutĂŽt le terme : module.
Les variables
Nous allons identifier les variables nécessaires à ce jeu.
Dâabord il va falloir stocker le nombre mystĂšre, on utilisera pour cela une variable que lâon nommera par exemple : nombre_secret
.
Le nombre secret devra ĂȘtre comparĂ© Ă la proposition du joueur (variable nombre
) et il sera également nécessaire de compter le nombre de coups joués que le mémorisera dans : nbr_essais
Ce sont les 3 variables indispensables au jeu.
Pour initialiser la variable nombre_secret
, on utilisera la fonction importée randint
comme suit :
nombre_secret = randint(1,100)
La fonction random.randint()
La librairie random
propose une série de fonctions qui implémentent des générateurs de nombres pseudo-aléatoires. Ce type de fonctionnalité produit généralement des nombres compris entre 0 et 1, et donc un nombre à virgule.
Si lâon souhaite travailler avec des nombres entiers, il faut utiliser la fonction suivante : random.randint()
qui accepte deux nombre comme arguments, a et b, et retourne un nombre entier de lâintervalle compris entre a et b [a;b]. La syntaxe sera : random.randint(a, b)
. La commande from L import F
permet dâĂ©viter de prĂ©fixer la fonction, dâoĂč lâĂ©criture :
nombre_secret = randint(1,100)
Nous venons de voir que 3 variables sont indispensables Ă la rĂ©alisation de ce programme, cependant pour des raisons de lisibilitĂ©s, mais Ă©galement pour des raisons de paramĂ©trage de notre jeu, nous en utiliserons dâautres :
- Le nombre dâessais maximum sera stockĂ© dans
nbr_essais_max
. - La borne haute du nombre secret sera elle aussi mise dans une variable, permettant de paramétrer le jeu :
nombre_secret_max
. Du coup, lâinitialisation denombre_secret
se fera comme suit :
nombre_secret = randint(1,nombre_secret_max) # nombre choisi par lâordinateur
RĂšgles pour les noms des variables
- Le nom dâune variable est composĂ© des lettres de
a
Ăz
, deA
ĂZ
, et des chiffres0
Ă9
, mais il ne doit pas commencer par un chiffre. - Les lettres accentuĂ©es, les cĂ©dilles, les espaces, les caractĂšres spĂ©ciaux tels que $, #, @, etc. sont interdits, Ă lâexception du caractĂšre
_
(souligné). Le tiret-
est Ă©galement interdit puisquâil correspond aussi Ă la soustraction. - La casse est significative :
nombre
etNombre
sont des variables diffĂ©rentes ! - Prenez lâhabitude dâĂ©crire lâessentiel des noms de variables en caractĂšres minuscules (y compris la premiĂšre lettre). Il sâagit dâune convention largement respectĂ©e.
- Nâutilisez les majuscules ou les soulignĂ©s quâĂ lâintĂ©rieur du nom, pour en augmenter la lisibilitĂ©. Par exemple :
nombreSecretMax
ounombre_secret_max
. - Utilisez des noms de variable qui ont un sens afin dâaugmenter la comprĂ©hension du programme. Cela vous Ă©vitera dâajouter des commentaires pour expliquer lâutilitĂ© de ces variables.
- Python compte 33 mots rĂ©servĂ©s qui ne peuvent pas non plus ĂȘtre utilisĂ©s comme noms de variable (ils sont utilisĂ©s par le langage lui-mĂȘme) :
and | as | assert | break | class | continue |
def | del | elif | else | except | False |
finally | for | from | global | if | import |
in | is | lambda | None | nonlocal | not |
or | pass | raise | return | True | try |
while | with | yield |
TPÂ : Ăcrire lâinitialisation du jeu
Ouvrez votre Ă©diteur Python (Thonny par exemple) et Ă©crivez le dĂ©but du programme qui contient lâinitialisation des variables.
Il y a cinq variables que vous devez initialiser. Cela signifie quâil faut leur donner une valeur de dĂ©part. Si on ne le fait pas, lâinterprĂ©teur Python va envoyer le message dâerreur du genre : NameError: name 'nbr_essais_max' is not defined
Typage fort
Câest au moment oĂč lâon initialise une variable que lâinterprĂ©teur Python la crĂ©e. On peut voir une variable comme une boĂźte qui va contenir une valeur : ce peut ĂȘtre un nombre, une chaĂźne de caractĂšres, une liste, etc.
La ligne suivant a pour effet de déposer dans cette boßte la valeur entiÚre 1.
nbr_essais = 1
Python est un langage avec un typage fort, cela signifie quâon ne pourra pas mettre autre chose que des nombres entiers dans cette variable par la suite.
Pensez Ă©galement aux commentaires.
-
Solution
nbr_essais_max = 7 nbr_essais = 1 nombre_secret_max = 100 nombre_secret = randint(1,nombre_secret_max) # nombre choisi par lâordinateur nombre = 0 # nombre proposĂ© par le joueur
Affichage initial du jeu.
AprĂšs lâinitialisation, on va afficher les rĂšgles du jeu, on souhaite obtenir quelque chose comme ça :
Jâai choisi un nombre entre 1 et 100
Devine le en 7 tentatives au maximum !
-
Solution
print("Jâai choisi un nombre entre 1 et",nombre_secret_max) print("Devine le en",nbr_essais_max,"tentatives au maximum !")
Pensez Ă utiliser les variables et non leur valeur.
Corps du jeu
Voici la trace de ce que pourrait-ĂȘtre une partie gagnante :
Jâai choisi un nombre entre 1 et 100
Devine le en 7 tentatives au maximum !
Essai numéro : 1
Ta proposition : 50
Trop grand
Essai numéro : 2
Ta proposition : 25
Trop grand
Essai numéro : 3
Ta proposition : 12
Bravo ! Tu as trouvé 12 en 3 essai(s)
Et voici la trace dâune partie oĂč le joueur perd :
Jâai choisi un nombre entre 1 et 100
Devine le en 7 tentatives au maximum !
Essai numéro : 1
Ta proposition : 1
Trop petit
Essai numéro : 2
Ta proposition : 2
Trop petit
Essai numéro : 3
Ta proposition : 3
Trop petit
Essai numéro : 4
Ta proposition : 4
Trop petit
Essai numéro : 5
Ta proposition : 5
Trop petit
Essai numéro : 6
Ta proposition : 7
Trop petit
Essai numéro : 7
Ta proposition : 8
Trop petit
Désolé, Tu as utilisé 7 essais en vain.
Le nombre secret était : 60 .
- Le corps du jeu commencera par une boucle qui testera deux conditions, pour cela nous utiliseront lâopĂ©rateur
and
. On devra écrire quelque chose comme :
while PREMIER_TEST and SECOND_TEST:
Lâune des conditions sâassure que le nombre secret nâa pas Ă©tĂ© trouvĂ©, lâautre devant vĂ©rifier que le nombre dâessais reste infĂ©rieur ou Ă©gale au nombre dâessais maximum autorisĂ©s.
- La saisie du nombre proposĂ© par le joueur se fait Ă lâaide de :
nombre = int(input("Ta proposition : "))
En effet, input()
retourne une chaĂźne de caractĂšre qui doit ĂȘtre convertie en entier. Cela se fait Ă lâaide de int()
.
- à chaque « tour » de boucle, le contenu de la variable
nbr_essais
doit ĂȘtre incrĂ©mentĂ©. On doit prendre le contenu denbr_essais
et lui ajouter la valeur1
:nbr_essais + 1
.
On met ce résultat dans nbr_essais + 1
, tout cela sâĂ©crit :
nbr_essais = nbr_essais + 1
que lâon peut simplifier Ă lâaide de lâopĂ©rateur +=
comme suit :
nbr_essais += 1
On favorisera cette seconde Ă©criture autant que possible.
TPÂ : Ăcrire le jeu complet
Vous avez maintenant tous les Ă©lĂ©ments nĂ©cessaires Ă lâĂ©criture de ce jeu.
Faite attention Ă lâindentation.
-
Solution
# Jeu du nombre mystĂšre from random import randint nbr_essais_max = 7 nbr_essais = 1 nombre_secret_max = 100 nombre_secret = randint(1,nombre_secret_max) # nombre choisi par lâordinateur nombre = 0 # nombre proposĂ© par le joueur print("Jâai choisi un nombre entre 1 et",nombre_secret_max) print("Devine le en",nbr_essais_max,"tentatives au maximum !") while nombre != nombre_secret and nbr_essais <= nbr_essais_max: print("Essai numĂ©ro :",nbr_essais) nombre = int(input("Ta proposition : ")) if nombre < nombre_secret: print("Trop petit") elif nombre > nombre_secret: print("Trop grand") else: print("Bravo ! Tu as trouvĂ©",nombre_secret,"en",nbr_essais,"essai(s)") nbr_essais += 1 if nbr_essais > nbr_essais_max and nombre != nombre_secret : print("DĂ©solĂ©, Tu as utilisĂ©",nbr_essais_max,"essais en vain.") print("Le nombre secret Ă©tait :",nombre_secret,".")
Liens
- Bases de Python â Cours de Python en français.
኿