Initiation à la programmation, en python
Premier programme, construit et écrit pas à pas
Jeu du nombre mystérieux
Règle du jeu
Le jeu du nombre mystérieux se joue à deux: une personne qui choisit secrètement un nombre entier entre 0 et 100, et une autre personne qui doit le trouver.La personne qui cherche à deviner propose un nombre; la personne qui fait deviner donne alors une des trois réponses:
- Gagné: bien sûr si le nombre proposé est le bon
- trop petit: si le nombre proposé est plus petit que celui à deviner
- trop grand: si le nombre proposé est plus grand que celui à deviner
Première version
On appelle par exempleM
le nombre à faire deviner, par exemple M=37
.
Le programme suivant est donné à la personne qui cherche à deviner le nombre mystérieux.
Celle-ci l'exécute, et entre donc sa proposition.
M=37
N=int(input("Entrer un nombre:"))
if N==M:
print("Gagné !")
elif N>M:
print("Trop grand")
else:
print("Trop petit")
L'instruction elif
est la contraction de else et if: "sinon, si",
et permet d'ajouter une condition (voir les structures algorithmiques de base).
La personne qui cherche à deviner exécute ce programme, elle ne voit donc pas la valeur de
M
qu'on ne demande pas d'afficher.
Le programme prend alors la place du joueur qui fait deviner et retourne la réponse adaptée: "gagné", "trop petit" ou "trop grand".
Le programme s'arrête alors à ce stade, et la personne qui cherche à deviner peut ensuite relancer autant de fois que nécessaire le programme jusqu'à gagner.
Nombre de coups fixé à l'avance
On peut automatiser le fait d'avoir à relancer le programme. Ajoutons pour le moment la règle suivante: on fixe le nombre maximum de tentatives à 5; si après 5 propositions le nombre mystère n'est pas trouvé, la partie est perdue.Le programme devient:
M=37
N=int(input("Entrer un nombre:"))
for i in range(1,5):
if N==M:
print("Gagné !")
print("nombre de coups:",i)
quit()
elif N>M:
print("Trop grand")
else:
print("Trop petit")
N=int(input("Entrer un nombre:"))
print("Perdu en 5 coups")
Avant de quitter, en cas de victoire, on affiche le nombre de coups utilisés, c'est-à-dire le numéro i
de l'itération.
Sans limite
On peut enfin laisser libre le nombre de coups. Dans ce cas, on n'utilise pas une boucle avec un nombre prédéfini d'itération, mais une boucle "tant que" (while(*)):M=37
N=int(input("Entrer un nombre:"))
while not(N==M):
if N>M:
print("Trop grand")
else:
print("Trop petit")
N=int(input("Entrer un nombre:"))
print("Gagné !")
Sans limite, et décompte du nombre de coups
Au contraire du programme avec un nombre de coups fixé à l'avance, on ne connaît pas dans le programme précédent le nombre d'itérations effectuées.Il reste à ajouter ce compteur. Ceci se fait très classiquement ainsi: on utilise une variable,
c
par exemple, qu'on initialise à 0,
puis à chaque passage on ajoute 1 à c
ainsi: c=c+1
On dit qu'on incrémente la variable c
. Notre programme est donc complété ainsi:
M=37
N=int(input("Entrer un nombre:"))
c=1
while not(N==M):
if N>M:
print("Trop grand")
else:
print("Trop petit")
N=int(input("Entrer un nombre:"))
c=c+1
print("Gagné !")
print("nombre de coups:",c)
Joueur seul, contre l'ordinateur
Enfin, jusqu'ici, un joueur fait deviner son nombre (37 jusque là) à un autre joueur par le biais d'un programme.Il n'y a plus qu'un pas pour que l'ordinateur devienne complètement le joueur qui fait deviner: il doit choisir lui-même le nombre à faire deviner !
On peut par exemple lui demander de tirer ce nombre au hasard: il faut pour cela importer une bibliothèque(*) permettant de tirer des nombres au hasard, et de s'en servir. La fonction
randint
(*) retourne alors un nombre entier aléatoire.
from random import randint
M=randint(1,100)
N=int(input("Entrer un nombre:"))
c=1
while not(N==M):
if N>M:
print("Trop grand")
else:
print("Trop petit")
N=int(input("Entrer un nombre:"))
c=c+1
print("Gagné !")
print("nombre de coups:",c)
À vous de jouer maintenant… combien de coups pour trouver le nombre mystérieux ?
Une autre partie ?
On peut maintenant aussi proposer une nouvelle partie. Bien sûr, on ne va pas recopier le programme entier, encore moins plusieurs fois et autant de fois que de nouvelles parties qu'on va proposer.On ajoute autour de notre programme complet une boucle conditionnelle, dont la condition
A=1
est initialement vérifiée
(en initialisant simplement A
à 1 au tout début).
Ensuite, en fin de jeu, on propose une nouvelle partie et l'utilisateur saisit une nouvelle valeur pour A
pour laquelle on convient que la valeur 1 siginifie une autre partie (la boucle conditionnelle se relance), tandis que 0 (ou tout autre valeur) met donc fin à la boucle conditionnelle et au programme.
from random import randint
A=1
while A==1:
M=randint(1,100)
print(M)
N=int(input("Entrer un nombre:"))
c=1
while not(N==M):
if N>M:
print("Trop grand")
else:
print("Trop petit")
N=int(input("Entrer un nombre:"))
c=c+1
print("Gagné !")
print("nombre de coups:",c)
A=int(input("Une autre partie 1-Oui/ 2-Non ?"))
Variables, affectation, types et opérations
- randint
- contraction de random, aléatoire, et integer, entier. Le type integer désigne les nombres entiers, ou intègres, non divisés, ni partagés …
- while
- En français: "tant que", ou "pendant que".
while
introduit une boucle conditionnelle, c'est-à-dire un ensemble d'instructions qui vont être répétées tant que la condition indiquée à la suite du while est vraie, c'est-à-dire satisafaite.
Voir les structures algorithmiques de base. - bibliothèque
- En anglais (en python donc, et plus généralement en informatique),
library.
Une library, ou module, regroupe un ensemble de programmes, fonctions, commandes, qui peuvent être chargés.
Par exemple, la librarymath
permet d'importer des fonctions mathématiques comme pi, sqrt, cos, sin, … , et la libraryrandom
permet d'importerrandom()
,randint()
,gauss()
, …
L'ensemble des modules et bibliothèques se trouve ici: https://docs.python.org/3.6/py-modindex.html.