Chap1 Python
Chap1 Python
Intelligence
Chapitre 1 – Le langage Python : Notions de
base
2 ÈME EB , BIS et BI
Plan du
Chapitre
1. Historique du langage
6. Types élémentaires
8. Opérations d’entrée/sortie
2
1)Historique du
langage
Python est un langage de programmation développé depuis 1989 par le développeur néerlandais
Guido Van Rossum et de nombreux collaborateurs.
Le nom Python revient à une série de comédie des années 70 de la BBC nommée “Monty
Python’s
Flying Circus”
Principales versions officielles parues :
Python 1.0 – Janvier 1994, Python 2.0 – Octobre 2000
Python 2.4 – Novembre 2004, Python 2.5 – Septembre 2006
Python 2.6 - Octobre 2008, Python 2.7 – Juillet 2010
Révolution du langage python et apparition de la v3
◦ Python 3.0 - Décembre, 2008
◦ Python 3.5 – Septembre, 2015
3/76
1)Historique du
Classement
langage (Septembre
2016)
TIOBE
Septembre
2016
Avril
2015
Avril
2014
Langage de
Programmation
Ratings Evolution
4/76
1)Historique du langage
Classement PYPL (Septembre
2016)
5
2)Présentation générale de
Python
C’est un langage qui inclut tous les types de données, les branchements
conditionnels, les boucles, l’organisation du code en procédures et
fonctions, objets et classes, découpage en modules.
Mode d’exécution : transmettre à l’interpréteur Python le fichier script
«.py »
Python est associé à de très nombreuses librairies très performantes,
notamment des librairies de calcul scientifique (Numpy, SciPy, Pandas,
etc.). De fait, il est de plus en plus populaire, y compris auprès des data-
scientists. Il est plus généraliste que R qui est vraiment tourné vers les
statistiques.
6
2)Présentation générale de Python
Mode compilé vs. mode interprété
Langage interprété : + portabilité application ; - lenteur (ex. R, VBA,
Python…)
Langage compilé : + rapidité ; - pas portable (ex. Lazarus)
Langage pseudo-compilé : + portabilité plate-forme ; - lenteur (ex.
Java)
Python est interprété, il est irrémédiablement lent, mais… on peut
lui associer des librairies intégrant des fonctions compilées qui, elles,
sont très rapides.
7
2)Présentation générale de Python Avantages (1/4)
Python est un logiciel libre « free » : utilisation sans restriction dans les projets
commerciaux;
Python est un langage portable (peut fonctionner sur différentes plateformes OS (operating system);
Python convient aussi bien à des scripts d'une dizaine de lignes qu'à des projets complexes de plusieurs
dizaines de milliers de lignes;
La syntaxe de Python est très simple et, combinée à des types de données
évolués;
Python est un Langage de haut niveau (faire beaucoup avec peu de code, un programme python est
3 à 5 fois moins cours qu’un programme C).
8/76
2)Présentation générale de Python
Un exemple !
9
2)Présentation générale de Python Avantages(2/4)
Python est un langage orienté objet qui supporte l’héritage et la surcharge des opérateurs; Python est
Dynamiquement typé:
◦ tout objet manipulable par le programmeur possède un type bien définit à l'exécution,
Python est un langage inter-opérable (avec C Cython, Java Jython, C++, Fortran F2Py…)
Python gère ses ressources (mémoire, descripteurs de fichiers...) sans intervention du programmeur,
◦ par un mécanisme de comptage de références,
10/76
2)Présentation générale de Python
Avantages(3/4)
Python intègre, comme Java ou les versions récentes de C++, un système
d'exceptions,
◦ permettant de simplifier considérablement la gestion des erreurs,
◦ Lorsqu'une exception se produit, l'exécution normale du programme est
interrompue et
l'exception est traitée !!
Evolutif, Python est un langage qui continue à évoluer, grâce à une communauté
d’utilisateurs très actifs
11/76
2)Présentation générale de Python
Avantages (4/4)
Langage polyvalent : Nous pouvons presque tout faire avec Python grâce à ses
bibliothèques variées
Utilisé par de grands acteurs dans le monde: La NASA, Google, Youtube,
Mozilla…
De plus en plus utilisé dans la recherche, l’enseignement et l’industrie.
12/76
2)Présentation générale de Python
Domaines d’applications
Python, est un langage de programmation de plus en plus populaire utilisé entre autres:
◦ WEB: Google (pure Python et Django*), Youtube, Mozilla, Yahoo, eBay (Plone**), Nokia (Plone**)
◦ Scientifique : la NASA (pure Python et Plone), la CIA (Plone)… la liste est bien trop longue.
◦ L’enseignement principalement dans plusieurs pays
13/76
3) Environnement de développement intégré de Python
Plusieurs EDI sont disponibles,
IDLE : est un environnement de développement intégré fourni avec Python (bon
choix pour débutant), IDLE propose un certain nombre d'outils :
◦un éditeur de texte (pour l’écriture de script) avec une coloration syntaxique, une
indentation
automatique et l’auto-complétion*.
◦ un interpréteur (pour exécuter le programme)
◦ un débogueur (pour tester le programme)
14/76
3) Environnement de développement
intégré
Il existe d'autres IDE pour Python :
• Eclipse/Pydev (17,31%),
• NetBeans,
• Spyder,
• Eric...
• winPython ,
• anaconda V3,
• Python(x,y)..
15/76
4) Mode interactif & mode
script
Une fois installé Python (la dernière version 3.5.0) peut être utilisé en deux modes, mode
interactif ou en mode script:
Image extraite du cours de Jean-Luc Charles, Eric Ducasse, Art et Métiers Paris Tech
16/76
4) Mode interactif & mode
script
Description : Dans le mode interactif, vous pouvez entrer directement des
commandes Python dans l'interpréteur Python, et les résultats sont
immédiatement affichés.
C'est un environnement interactif qui permet d'explorer et de tester le code
ligne par ligne.
17/76
4) Mode interactif & mode
script
18/76
4) Mode interactif & Mode script
Description : Dans le mode script, vous écrivez votre code dans un fichier
avec l'extension .py et exécutez le fichier Python en entier. C'est la manière
la plus courante d'écrire des programmes plus longs et structurés.
19/76
4) Mode interactif & Mode script
20/76
4) Mode interactif & Mode script
Différences principales :
21/76
4) Mode interactif & mode script Mode interactif
Les instructions tapées sont exécutées directement par l’interpréteur python,
c’est aussi le mode calculette .
22/76
4) Mode interactif & mode script Mode script
(1/2)
Une nouvelle fenêtre s’ouvre , vous écrivez votre code Python. Il faut enregistrer dans un
fichier d’extension « .py »
23/76
4) Mode interactif & mode
script Mode script (2/2)
Exécution :
24/76
5) Commentaires, Aide et modules en Python
Commentaires
Tout ce qui suit le caractère # est considéré comme un commentaire
et ne sera jamais évalué.
20
5) Commentaires, Aide et modules en Python
Utilisation de l’aide
L’utilisation de l’aide en ligne se fait par la commande
help(identificateur)
Exemple :
>>>help(int)
Help on class int in module builtins:
class int(object)
| int(x=0) -> integer
| int(x, base=10) -> integer
….
Methods defined here:
| abs (...)
| x. abs () <==> abs(x)
| add (...)
| x. add (y) <==> x+y
| and (...)
| x. and (y) <==> x&y
| bool (...)
| x. bool () <==> x != 0
26/76
5) Commentaires, Aide et modules en Python
Utilisation de l’aide
27/76
5) Commentaires, Aide et modules en Python
Utilisation de l’aide
Help on class int in module builtins: Indique que vous consultez la documentation pour la classe int qui est
définie dans le module intégré (builtins).
class int(object) : Donne la signature de la classe int. Ici, object indique que la classe int est une sous-classe
de l'objet de base en Python.
int(x=0) -> integer : Indique que la classe int peut être instanciée avec un argument optionnel x (par défaut
égal à 0), et renverra un entier.
28/76
5) Commentaires, Aide et modules en Python
Utilisation de l’aide
Methods defined here : Signale que les méthodes définies pour la classe int sont répertoriées ci-dessous.
_ _abs_ _(...) : La méthode _ _abs_ _ est expliquée ici, indiquant que x._ _abs_ _() est équivalent à abs(x).
_ _add_ _(...) : La méthode _ _add_ _ est expliquée ici, indiquant que x._ _add_ _(y) est équivalent à x + y.
_ _and_ _(...) : La méthode _ _and_ _ est expliquée ici, indiquant que x._ _and_ _(y) est équivalent à x & y.
_ _bool_ _(...) : La méthode _ _bool_ _ est expliquée ici, indiquant que x._ _bool_ _() est équivalent à x != 0.
29/76
5) Commentaires, Aide et modules en Python
Import de modules (1/4)
Trois manières d’import de modules
1ère manière:
>>>import math
>>>dir(math)
[' doc ', ' name ', ' package ', 'acos', 'acosh', 'asin', 'asinh', 'atan',
'atan2', 'atanh', 'ceil', 'copysign', 'cos',………, 'pi', 'pow', 'radians', 'sin', 'sinh',
'sqrt', 'tan', 'tanh', 'trunc']
>>> math.ceil(7.8989) #partie entière supérieure
8
>>> math.floor(7.8989) #partie entière inférieure
7
>>>help(math.ceil)
Help on built-in function ceil in module math:
ceil(...)
ceil(x)
Return the ceiling of x as an int.
This is the smallest integral value >= x.
30/76
5) Commentaires, Aide et modules en Python
Import de modules (1/4)
Trois manières d’import de modules
1ère manière:
>>>import math
Cela importe le module math, qui est un module Python intégré fournissant des fonctions mathématiques.
>>>dir(math)
Renvoie la liste des attributs du module math. Les attributs incluent différentes fonctions mathématiques telles que acos,
ceil, floor, etc.
>>> math.ceil(7.8989) #partie entière supérieure
8
Utilisée pour arrondir à la partie entière supérieure de 7.8989,
résultant en 8.
>>>help(math.ceil)
La commande help(math.ceil) fournit une documentation détaillée
sur la fonction ceil du module math. Elle explique que la fonction
ceil(x) renvoie le plafond de x en tant qu'entier, ce qui est la plus
petite valeur entière supérieure ou égale à x.
31/76
5) Commentaires, Aide et modules en Python
Import de modules (2/4)
2ème manière: Utilisation d’un alias
>>>import math as m
>>>dir(m)
[' doc ', ' name ', ' package ', 'acos', 'acosh', 'asin', 'asinh',
'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos',………, 'pi', 'pow',
'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
>>> m.sqrt(2)
1.4142135623730951
>>> m.tan(m.pi)
-
1.2246467991473532
e-16
32/76
5) Commentaires, Aide et modules en Python
Import de modules (2/4)
2ème manière: Utilisation d’un alias
>>>import math as m
Cela importe le module math et lui donne un alias m. Désormais, au lieu d'utiliser
math.sqrt, vous pouvez utiliser l'alias m : m.sqrt
>>>dir(m)
La fonction dir(m) renvoie la liste des attributs du module math, mais cette fois-ci, on
utilise l'alias m au lieu de math.
>>> m.sqrt(2)
La fonction sqrt du module math est utilisée avec l'alias m pour calculer la racine carrée
de 2.
>>> m.tan(m.pi)
La fonction tan du module math est utilisée avec l'alias m pour calculer la tangente de
pi.
33/76
5) Commentaires, Aide et modules en Python
Import de modules (3/4)
3ème Manière : Importation de toutes les fonctions d’un module
34/76
5) Commentaires, Aide et modules en Python
Import de modules (3/4)
3ème Manière : Importation de toutes les fonctions d’un module
>>>dir(math)
->Erreur
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
dir(math)
NameError: name 'math' is not defined
Lorsque vous utilisez from math import * le nom du module math n'est pas défini
directement dans l'espace de noms global. C'est pourquoi la commande dir(math)
génère une erreur.
35/76
5) Commentaires, Aide et modules en Python
Import de modules (3/4)
3ème Manière : Importation de toutes les fonctions d’un module
>>>sqrt(2)
En important toutes les fonctions avec
from math import * vous pouvez utiliser
directement la fonction sqrt sans spécifier le
module
1.4142135623730951
>>> help(abs)
Help on built-in function abs in module builtins: abs(...)
abs(number) -> number
Return the absolute value of the argument.
En important toutes les fonctions avec from math import * vous pouvez
utiliser directement la fonction sqrt sans spécifier le module La commande
help(abs) fournit une documentation détaillée sur la fonction abs sans
spécifier le module. Cela est possible en raison de l'importation de
toutes les fonctions avec
from math import * 36/76
5) Commentaires, Aide et modules en Python
Import de modules (4/4)
La troisième manière représente l’avantage d’accéder directement aux fonctions
mais représente également l’inconvénient:
◦d’encombrement de l’espace de noms réservé et,
◦ la possibilité de conflit entre deux fonctions ayant le même identificateur provenant de
deux modules différents !!!
◦ Il est généralement recommandé d'importer seulement les fonctions nécessaires ou
d'utiliser des alias pour éviter ces problèmes.
Exemple
>>>from math import *
>>>from numpy import *
◦ Les deux contiennent la fonction sqrt , l’une définie pour les réels l’autre sur les tableaux!
◦ Laquelle sera utilisée ????
37/76
5) Commentaires, Aide et modules en Python
Module math
Parmi les fonctions les plus utiles du module math, on trouve :
Racine carrée : sqrt
Factorielle : factorial
Fonctions trigonométriques : cos, sin, tan, asin, acos, atan
Conversion des angles :degrees, radians
log, exp : log,log10, log2
fonctions d’arrondissement : floor, ceil
troncature : trunc
NB : Le module math stocke aussi la valeur de π et de e.
38
6) Les types sous Python
(1/9) Les types sous Python
Non Mutables
Mutables
Non
Ordonnés Ordonnés Ordonnés
39
6) Les Types sous Python
(2/9)
Python est un langage dont le typage est automatique. Cela signifie que bien que gérant différents
types, lorsqu'une variable est affectée, l'interpréteur trouvera automatiquement son type.
40/76
6) Les types élémentaires
(3/9)
Un objet ne peut changé ni d’identité ni de type !
Quand un objet n’a plus de nom (nombre de référence nul), il est détruit
automatiquement:
◦ mécanisme automatique de "ramasse miettes", ou garbage collector.
>>> x = 9 x 9
>>> y = x int
>>> y
>>> x = "abc" x
>>> 9 "abc"
int st
y
r
41/76
6) Les types élémentaires
(4/9)
Les types élémentaire intrinsèques (built-in)
◦ Le NONETYPE : seule valeur possible None
◦c’est la valeur retournée par une fonction qui ne retourne rien,
◦ Le type bool : deux valeurs possible True et False (1/0)
◦ Les types numériques int, float, complex :
◦ Le type int x = 898, Le type float x = 8.98
◦ Le type complex z = 8+1j*8
42/76
6) Les types élémentaires (5/9) Le type entier : <class int>
>>> x=3
>>> y=6
>>> type(x),type(y)
(<class 'int'>, <class 'int'>)
Les opérations arithmétiques +, -, *, **, /, //, %
43/76
6) Les types élémentaires
(6/9) Le type entier : <class
int>
>>> pow(x,y) # calcul de x à la puissance y
729
>>> x/y # division réelle
0.5
>>> x//y #quotient de la division entière
0
>>> x%y #reste de la division entière
3
Les opérateurs de comparaison <, <=, !=, ==, >, >=
>>>x==y
False
>>>x>=y
False
>>>x<=y
True
>>>x!=y
True
44/76
6) Les types élémentaires
(7/9) Le type réel: <class
float>
>>> x=12/7; y=4.
>>> x;y
1.7142857142857142
4.0
>>> type(x); type(y)
<class 'float'> <class 'float'>
47/76
7) Affectation des variables et mots réservés
(1/4)
Une affectation crée un nom (identificateur, variable) qui référence un
objet (les identifiants au format nom sont réservés à
l’interpréteur Python)
C’est l’objet qui porte le type et les données (valeur, pour un objet
numérique).
Un même objet peut être référencé sous plusieurs noms (alias).
>>>x=5 x
>>>y=5
>>>x,id(x),type(x)
y
(5, 505626168, <class 'int'>) 5
>>>y,id(y),type(y) 505626168
(5, 505626168, <class 'int'>)
z
48/76
7) Affectation des variables et mots réservés
(1/4)
Les valeurs de x et y sont 5 dans les deux cas.
Les identifiants (id(x) et id(y)) sont les mêmes, ce qui indique que x et y pointent vers le même objet
en mémoire.
En Python, les petits entiers sont souvent optimisés et réutilisés, d'où le même identifiant pour des
entiers de petite valeur comme 5.
Les types de x et y sont tous deux <class 'int'>, indiquant qu'ils sont de type entier.
En résumé, dans cet exemple, x et y sont des variables de type entier contenant la valeur 5, et en
raison de l'optimisation de Python pour les petits entiers, ils partagent le même objet en mémoire,
comme en témoigne leur identifiant identique.
49/76
7) Affectation des variables et mots réservés
(2/4)
Nom des variables
Les noms de variables sont des noms qu’on choisit assez librement
Quelques règles pour les noms de variables sous Python :
1. Un nom de variable est une séquence de lettres (a à z , A à Z) et de chiffres, qui doit toujours commencer par
une lettre.
2. 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é).
3. La casse est significative, Attention : Mariem, mariem , MARIEM sont donc des variables différentes. Soyez
attentifs !
4. 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 simple convention, mais elle est largement respectée. N'utilisez les majuscules qu'à
l'intérieur même du nom, pour en augmenter éventuellement la lisibilité, comme dans TableDesMatieres.
50/76
7) Affectation des variables et mots réservés
(3/4)
Assignation
En Python comme dans de nombreux autres langages, l'opération d'affectation est représentée par le signe égal :
>>> msg = "Quoi de neuf ?" # affecter la valeur "Quoi de neuf ?" à msg
n 7 en binaire
@ « quoi de neuf » en
msg
binaire…
@
3,14159
Pi
en binaire.
.
.
51
7) Affectation des variables et mots réservés
(4/4)
Mots réservés
En plus de ces règles, il faut encore ajouter que vous ne pouvez pas
utiliser comme noms de variables les 29 « mots réservés » au langage ci-
dessous :
52
8) Les opérations d’entrée/sortie (1/4)
Opération d’affichage : print()
Opération d’affichage : print()
>>> print('ceci est un message')
ceci est un message
>>> print("ceci est un message")
ceci est un message
>>> print("ceci un message \n
avec retour à la ligne")
ceci un message
avec retour à la ligne
>>> print(""" Ceci est un message
sur plusieurs lignes
avec beaucoup d'espaces et des
sauts de ligne""")
Ceci est un message
sur plusieurs lignes
avec beaucoup d'espaces et des
sauts de ligne
53/76
8) Les opérations d’entrée/sortie (2/4)
Opération d’affichage : print()
>>> x=10;y=10;z=10;
>>> print (x, y, z, sep=' ');
10 10 10
>>> print (x, y, z, sep=';');
10;10;10
>>> print (x, y, z , sep='\n');
10
10
10
>>> print ('x =',x,'y =',y, 'z =', z, sep= ' ' , end =';');
x = 10 y = 10 z = 10;
54/76
8) Les opérations d’entrée/sortie (3/4)
Opération de lecture : input()
Opération de lecture : input()
>>> x=input("saisir : ")
Saisir : 3498392483
>>> print("la saisie",x, "est de type",type(x))
la saisie 3498392483 est de type <class 'str'>
55/76
8) Les opérations d’entrée/sortie (4/4)
Opération de lecture : input()
Il est toutefois possible de convertir la quantité saisie en entier, réel ou même booléen au moyen de
int(), float(), et bool()
>>> x=int(input("saisir un entier"))
saisir un entier 12
>>> print(x, "de type", type(x))
12 de type <class 'int'>
#Ou encore en réel
>>> x=float(input("saisir un réel"))
saisir un réel 23
>>>>>> print(x, "de type", type(x))
23.0 de type <class 'float'>
56/76
9)Structures conditionnelles & Itératives
Principe d’indentation
De manière générale, un bloc contient tout le code avec une même indentation.
44
9)Structures conditionnelles &
Itératives Les structures
conditionnelles (1/4)
Syntaxe: (Attention à
l’indentation !!! )
if condition1:
instruction 1
elif L'indentation après le ":" est obligatoire.
condition2:
instruction 2
elif condition3:
instruction 3
instruction 4
else :
instructio
n 5
instructio
n 6 58/76
9)Structures conditionnelles & Itératives
Les structures conditionnelles (2/4)
Ecrire un programme qui saisit un nombre et teste si l’entier est nul, pair ou
impair
59/76
9)Structures conditionnelles & Itératives
Les structures conditionnelles (3/4)
Application: Résolution d’équation de 2nd degré
Ecrire un programme qui saisi trois entiers a, b et c et résout dans l’ensemble C l’équation
de second degré ax2+bx+c= 0.
On discutera tous les cas possibles pour a, b et c !
60/76
9)Structures conditionnelles &
Itératives Les structures
conditionnelles (4/4)
61/76
9)Structures conditionnelles & Itératives
Les structures itératives : Boucle For
(1/5)
Syntaxe:
for i in range(a): for i in range(a,b,c):
instructions instructions
62/76
9)Structures conditionnelles &
Itératives Boucle For (2/5)
Exemples:
(a) (b)
(d)
(c)
63/76
9)Structures conditionnelles & Itératives
Boucle For (3/5)
L’instruction for in : permet d’itérer sur le contenu d’une liste, d’un tuple, les caractères d’une chaîne ou même
un fichier …
64/76
9)Structures conditionnelles & Itératives
Boucle For (4/5)
#utilisation de l’instruction « continue »
for num in range(2, 10):
if num % 2 == 0:
print("Un nombre paire", num)
continue
print("Un nombre impaire", num)
#utilisation de l’instruction « break» et « else »
for n in range(2, 10):
print("n=",n)
for x in range(2, n):
print("x=",x)
if n % x == 0:
print(n, ‘=', x,
'*', n//x)
break
else: # exécuté à la fin normale de la boucle
print(n, ‘est un nombre premier')
65/76
9)Structures conditionnelles & Itératives Boucle For
(5/5)
Construction de listes par compréhension:
66/76
9)Structures conditionnelles & Itératives
Boucle tant que
Syntaxe:
Remarque:
while condition: Il existe l’instruction « pass » pour rien faire
instructions1
Exemple:
else: while True:
instructions2 pass # Busy-wait pour une
interruption clavier (Ctrl+C) ...
Exemple :
i=1
while i<=5:
print(i)
i +=1
else:
print("Fin
boucle")
67/76
9)Structures conditionnelles & Itératives Utilisation du break, continue, pass
Ces trois instructions permettent à l’utilisateur d’avoir un plus grand contrôle de la boucle.
Comme en C, l’instruction « break » permet de sortir de la boucle
instantanément et de passer à la suite. Elle annule le passage dans la boucle else.
L’instruction « continue » saute au début de la boucle la plus imbriquée.
« pass » : Si à un endroit on a syntaxiquement besoin d'un bloc mais qu'il n'y a rien à
faire, on peut utiliser l'instruction pass, qui justement ne fait rien
Exemple
if condition:
pass
else:
instruction .
..
55
Application: Jeu de devinette (1/2)
Ecrire un programme devinette qui permet de deviner un entier généré par le
programme de façon aléatoire (compris entre 1 et 100), on indiquera à
l’utilisateur si l’entier introduit est plus grand ou plus petit que l’entier
caché.
Un bravo sera affiché lorsqu’il aurait deviné l’entier, on lui indiquera
également au bout de combien de tentatives il est parvenu à trouver le
nombre.
Remarque:
pour générer un entier aléatoire il faut importer le package random, puis utiliser
la fonction randint(a,b) où a et b désigne l’intervalle [a,b] dans lequel l’entier
aléatoire sera tiré.
69/76
Application: Jeu de devinette
(2/2)
print("Jeu de devinette")
from random import *
c=randint(1,100)
x=int(input("devinez un entier entre 1 et 100: "))
i=1
while x!=c:
if x<c:
print("votre entier est plus petit que
l'entier caché")
else:
print("votre entier est plus grand que
l'entier caché")
i+=1
x=int(input("devinez un entier
entre 1 et 100:
"))
print("Bravoooo, vous avez deviné au bout de ", i,
"tentatives")
70/76
Application 2 (1/2)
Modifier le programme précédant en ajoutant 3 niveaux de difficulté (difficile (4
tentatives), Moyen (7 tentatives) ou facile (12 tentatives))
Le joueur choisi un niveau de difficulté, un nombre d’essai lui est alors
attribué, si ce dernier épuise ses essais il aurait échoué et un message sera
affiché.
Remarque: On lui indiquera à chaque fois le nombre de tentatives restantes
71/76
Application 2
(2/2)
72/76