Intro Python 3
Intro Python 3
Micha Hersch
19 février 2024
1 Introduction
Python est un langage de programmation, c’est-à-dire que c’est un langage
qui permet à un humain (le programmeur ou la programmeuse) d’expliquer à un
ordinateur ce qu’il doit faire. Un programme est une série d’instructions écrites
de façon à ce que l’ordinateur les comprenne et qu’il peut exécuter une à une.
Toutes les applications, sites web, et appareils numériques, fonctionnent grâce
à des programmes qui sont écrit soit en Python (comme par exemple youtube
ou dropbox) soit en d’autres langages. Certains petits programmes ont juste
quelques instructions, alors que d’autres en ont des millions.
Le langage Python, comme la plupart des langages de programmation, est
basé sur l’anglais, donc il faut savoir un peu d’anglais pour se rappeler de la
significations des instructions.
Voici un exemple d’un tout petit programme en Python qui ne contient
qu’une seule instruction :
Exemple 1
print("bonjour") 1
En anglais, "print" signifie “imprime". En Python, l’instruction print fait que
l’ordinateur écrit à l’écran le contenu de la parenthèse qui vient après.
Exemple 2
# un tout petit programme 1
print("bonjour") # salutations 2
1
Exercice 2 Ajouter un commentaire dans le programme de l’exercice précé-
dent. Vérifier qu’il ne change pas le déroulement du programme.
Parfois, l’ordinateur ne comprend pas les instructions qui sont données dans
le programme. Cela signifie qu’il y a une erreur dans le programme, et que
l’ordinateur ne peut pas l’exécuter. C’est un peu comme si on lui disait des
mots qu’il ne comprend pas.
2
2 Les variables simples
2.1 Types d’objet simples
De la même manière qu’une recette de cuisine indique au cuisinier comment
manipuler des ingrédients pour obtenir un plat, un programme indique au pro-
cesseur comment manipuler des objets pour obtenir une application. En Python,
les types d’objets de base sont les suivants :
1. les nombre entiers, appelés int : 2, 45, -4, 56
2. les nombres à virgules, appelés float : 2.3, 6.5, 78.9, -89.0. La décimale
est indiquée par un point (et non une virgule) comme cela est l’usage dans
les pays anglo-saxons.
3. les chaines de caractères, appelés str (pour string, chaîne) : "bonjour", "au
revoir", "3432", "232.543". Il s’agit simplements d’une suite de caractères
(lettre, chiffre, signe de ponctuation, espace) placées entre guillemets ou
(de manière équivalente) entre apostrophes.
4. Les booléens, appelés bool : True, False. Ce type d’objet ne peut prendre
que deux valeurs True (vrai) et False (faux), à écrire avec une majuscule.
2.2 Opérateurs
Pour chaque type d’objet, plusieurs opérateurs sont définis qui permettent
de manipuler ces objet. Pour les nombres entiers, les opérateurs suivants sont
les plus courants :
— + (addition),
— - (soustraction)
— * (multiplication)
— / (division)
— // (division entière)
— % (modulo ou reste de la division entière)
3
Toutes les opérations ci-dessus retournent un nombre entier, sauf la division (/)
qui retourne un nombre à virgule. Les opérateurs similaires sont définis pour les
nombres à virgules.
Il existe également les opérateurs de comparaison qui retournent des booléens
(True ou False) :
— > (plus grand que)
— < (plus petit que)
— >= (plus grand ou égal à)
— <= (plus petit ou égal à)
— == (égal à)
— != (non égal à)
Enfin, les opérateur logiques suivants sont définis sur les booléens :
— not (non)
— and (et)
— or (ou)
— == (égal à)
— != (non égal à)
4
Exercice 6 Prédire le résultat des instructions suivantes en Python
a) 3+2*5
b) 3*5+3
c) 6*2/4
d) 6/4*2
e) 6.0/4*2
f) 3*4<5*2
g) 2*4 != 5*2
h) 2+4*2 == (2+3)*2
i) 2==1+1 or 2==3
j) 2==1+1 and 2<=3
Entrer ces expressions dans un terminal Python pour vérifier les réponses.
Exemple 3
a = "Bonjour" 1
print(a) 2
Dans l’exemple ci-dessus, on donne le nom a à la chaîne de caractère "bonjour".
On peut dire que la variable a contient la chaîne de caractère "bonjour". Une
fois un objet nommé, on peut le manipuler en l’appelant par son nom. Dans
cet exemple on demande à l’ordinateur d’écrire le contenu de a, c’est-à-dire
"bonjour".
Chaque nom ne peut correspondre qu’à un seul objet, donc si on redonne un
nom déjà utilisé, l’ancien objet désigné par ce nom est oublié. Autrement dit, le
contenu de cette variable est remplacé avec le nouvel objet.
Exemple 4
a = "Bonjour" 1
a = "Au revoir" 2
print(a) 3
Dans le programme ci-dessus, la variable a désigne d’abord l’objet "Bonjour",
puis elle désigne l’objet "Au revoir". C’est cette dernière expression qui apparaît
à l’écran avec la dernière ligne du programme.
Une variable peut apparaître des deux côtés d’une assignation (d’un signe =).
En ce cas, l’ordinateur calcule d’abord le côté droit, puis assigne le résultat à la
variable apparaissant à gauche du signe =.
5
Exemple 5
b = 5 1
b = b*2 2
print(b) 3
Dans cet exemple, la première instruction assigne 5 à la variable b. Pour la
seconde instruction, il multiplie b par 2 (ce qui donne 10), puis le résultat est
assigné à b qui contient maintenant la nombre 10. La troisième instruction affiche
cette valeur.
6
3 Les fonctions
Python, comme tout autre langage de programmation, contient tout une sé-
ries de fonctions, c’est-à-dire des instructions déjà définies qui font faire quelque
chose au programme. Nous en avons déjà utilisés deux au chapitre précédent,
la fonction print qui affiche quelque chose à l’écran et la fonction type qui re-
tourne le type d’un objet. L’appel d’une fonction s’effectue en indiquant la nom
de la fonction, suivi d’une paires de parenthèses. Ces parenthèse contiennent les
éventuels arguments de la fonction, c’est-à-dire les objets nécessaires pour que
la fonction puisse être exécutée. S’il y en a plusieurs, ces arguments sont séparés
par des virgules.
Exemple 9
print("Hello!") 1
type(56.8) 2
a = "rouge" 3
print(a) 4
type(a) 5
Dans l’exemple ci-dessus, chaque appel de fonction se fait en fournissant un
objet en argument. Cet objet peut être donné directement (comme dans les
deux premières lignes), soit par une variable (ligne 4-5).
Certaines fonctions prennent plus qu’un argument comme la fonction pow qui
calcule la puissance de deux nombres, et qui a donc besoin de deux arguments :
Exemple 10
a = pow(2,3) # calcule 2 puissance 3 1
print(a) 2
Si vous ne donnez qu’un seul argument à la fonction pow, python vous indiquera
une erreur. Souvent, les fonctions retournent une valeur, qui contient le résultat
de la fonction. Dans l’exemple ci-dessus ce résultat (ici 8) est stocké dans la
variable a puis affiché.
La fonction print a ceci de spécial qu’elle peut accueillir zéro, un, ou plusieurs
arguments.
Exemple 11
a = 3 1
b = 5 2
print("a vaut", a, "b vaut", 4) # print a ici 4 arguments 3
7
carrée (square root en anglais) d’un nombre. Pour utiliser ces fonctions, il faut
d’abord importer le module.
Exemple 12
from math import * 1
a = sqrt(9) ## calcule la racine caree 2
La première ligne de l’exemple ci-dessus indique que l’on va utiliser les fonctions
du module math. La seconde ligne utilise la fonction sqrt pour calculer la racine
carrée de 9. La description des fonctions du module math est disponible ici :
https://docs.python.org/fr/3/library/math.html.
Exemple 13
nom = input("Quel est votre nom?") 1
print("Bonjour", nom) 2
Dans cet exemple, le programme va demander à la personne utilisatrice d’écrire
son nom dans le terminal, est assignera la chaîne de caractère entrée à la variable
nom. Il écrit ensuite "Bonjour" puis le nom donné par la personne utilisatrice.
Exemple 14
annee = int(input("Quel est votre annee de naissance")) 1
age = 2022-annee 2
print("Vous avez", age, "ans") 3
Si l’on n’appelle pas la fonction int dans la première ligne, annee sera une
chaîne de caractère et la seconde ligne retournera une erreur car python ne sait
pas comment soustraire une chaîne de caractère à un nombre.
8
Exercice 12 Ecrire un programme qui demande d’entrer un nombre et affiche
le carré de ce nombre dans le terminal.
9
4 Les structures de contrôle
Les structures de contrôle sont un élément central de la programmation.
C’est cela qui permet de moduler l’exécution du programme en fonction des
étapes intermédiaires. Les structures de contrôle se retrouvent de façon presque
identique dans les autres langages de programmation.
4.1 L’instruction if
L’instruction if (si, en anglais) permet d’effectuer une liste d’instructions
uniquement si une valeur booléenne (appelée la condition) est True (vraie) et
une autre liste d’instruction sinon.
Exemple 15
ok = True 1
if ok: 2
print("la variable ok est vraie") 3
else: 4
print("la variable ok est fausse") 5
Dans l’exemple ci-dessus, on définit la variable booléenne ok à True (vrai).
L’instruction if teste cette variable. Si elle est vraie, le bloc d’instructions (dé-
calé à droite) qui vient après les deux points est exécuté. sinon, le bloc d’ins-
tructions (aussi décalé à droite) qui vient après l’instruction else: est exécuté.
L’indentation du texte (c’est-à-dire où la ligne commence) est importante. Elle
permet à l’ordinateur de savoir quelles sont les instructions qui appartiennent
au bloc du if et quelles sont celles qui appartiennent au bloc du else. (Il est
conseillé d’utiliser la touche de tabulation du clavier, plutôt que la touche es-
pace, pour régler les indentations.) De même, les deux points sont nécessaires
pour que l’ordinateur puisse différencier la condition des blocs d’instructions.
Exemple 16
age = int(input("Quel est votre age?")) 1
if age<18: 2
print("Vous etes encore mineur.") 3
print("Vous ne pouvez pas encore voter.") 4
else: 5
print("Vous etes majeur.") 6
print("Vous pouvez voter." 7
print("Nous vous recontacterons.") 8
Dans cet exemple, la condition que l’on teste est age<18. C’est une valeur boo-
léenne que l’on peut tester même si elle n’est pas explicitement mise dans une
variable.
10
Exercice 14 Dans l’exemple ci-dessus, indiquer ce que le programme écrit si
l’utilisateur indique un âge inférieur à 18, et ce qu’il écrit dans le cas contraire.
Considérer en particulier la dernière ligne et vérifier sa réponse en exécutant le
programme.
Il peut arriver que le programme n’ai rien à faire si la condition est fausse.
En ce cas, on peut écrire l’instruction if sans la partie else:.
Exemple 17
ok1 = True 1
ok2 = False 2
if ok1: 3
print("ok1 est vraie") 4
if ok2: 5
print("ok2 est vraie") 6
Dans l’exemple ci-dessus, on utilise successivement deux instructions if, une qui
teste la variable ok1 et l’autre qui teste la variable ok2. Comme seule la variable
ok1 est vraie, le programme exécute les instructions du premier if, mais pas
celle du second.
Exemple 18
a = 1 1
while a<100: 2
print(a) 3
a = a*2 4
print("maintenant a vaut", a) 5
Dans cet exemple, on initialise la variable a à 1. Puis tant qu’elle est inférieure
à 100, on l’affiche à l’écran et on la double. Ainsi, le a passera de 1 à 2 à 4 à
8, etc. Le programme imprime donc toute les puissances de deux inférieures à
100.
Exemple 19
from random import * 1
nombre = randint(1,20) # randint est une fonction du module 2
random
11
dev= int(input("Je pense a un nombre entre 1 et 20. Devinez 3
lequel:"))
while dev !=nombre: 4
if dev > nombre: 5
dev = int(input("trop grand, essayez encore. ")) 6
else: 7
dev = int(input("trop petit, essayez encore. ")) 8
print("Bravo, vous avez trouve!") 9
L’exemple ci-dessus est un jeu de devinette. Il utilise la fonction randint(a,b)
qui retourne un entier aléatoire entre a et b. Cette fonction se trouve dans le
module random. Pour pouvoir utiliser cette fonction, il faut importer ce mo-
dule, ce qui est fait à la première ligne du programme. La fonction abs(a) qui
retourne la valeur absolue de a est aussi utilisée.
12
Exemple 20
from random import * 1
nombre = randint(1,20) 2
dev= int(input("Je pense a un nombre entre 1 et 20. Devinez 3
lequel:"))
while True: 4
if dev == nombre: 5
print("Bravo, vous avez trouve") 6
break 7
else: 8
dev = int(input("Faux, essayez encore")) 9
print("On peut passer a la suite") 10
L’instruction else placée à la fin d’une boucle est exécutée uniquement si la
boucle n’a pas été interrompue par un break :
from random import * 1
nombre = randint(1,20) 2
dev= int(input("Je pense a un nombre entre 1 et 20. Devinez 3
lequel ou indiquez 0 pour arreter:"))
while dev != 0: 4
if dev == nombre 5
print("Bravo, vous avez trouve") 6
break 7
else: 8
dev = int(input("Faux, essayez encore")) 9
else: 10
print("Vous n'etes pas perseverant. La reponse etait", nombre) 11
Dans cet exemple, la dernière instruction (ligne 11) n’est exécutée qui si la
boucle ne s’est pas terminée par un break, donc si l’utilisateur a arréter le jeu
avec un 0. L’instruction else de la ligne 8, va avec le if de la ligne 5, alors
que le else de la ligne 10 va avec le while de la ligne 4. Ces deux else ont des
significations différentes. Avec un if le bloc else est exécuté si la condition du
if est fausse, alors qu’avec un while, le bloc else est exécuté si la boucle n’a
pas été interrompue par un break.
Exemple 21
somme = 0 1
n = 1 2
while n != 0: 3
n = int(input("Entrez un nombre a ajouter a la somme (entrez 0 4
si vous voulez arreter)"))
if n <= 7: 5
continue 6
somme = somme + n 7
13
print(n, "a ete ajoute a la somme") 8
print("la somme vaut",somme) 9
14
5 Les types séquentiels
Certains programmes nécessitent l’utilisation d’un grand nombres de valeurs.
Il serait impraticable de les mettre chacune dans une variable. Comme d’autres
langages de programmation, Python offre la possibilité de stocker des séquences
de valeurs dans une variable. Nous allons voir trois types de séquences dispo-
nibles en python, les listes, les ranges et les tuples.
Exemple 22
# deux listes 1
jours = ["lundi", "mardi", "mercredi", "jeudi", 2
"vendredi", "samedi", "dimanche"] 3
visiteurs = [200, 120, 345, 256, 123, 765, 644] 4
# on s'intresse au premier jour... 5
j = jours[0] 6
v = visiteurs[0] 7
print("le", j, "il y a eu", v, "visiteurs") 8
# ... et au dernier jour 9
print("le", jours[6], "il y a eu", visiteurs[6], "visiteurs") 10
Dans l’exemple ci-dessous, on défini deux listes, une contenant les jours de la
semaine, et une contenant sept nombres entiers. Ensuite, on va chercher le pre-
miers élément de chaque liste et on les imprime. On va ensuite chercher les
sixièmes élément de chaque liste et on les imprime.
Exercice 18 Faire une liste contentant le nom des quatres saisons et une autre
contenant les valeurs suivantes : 14, 22, 15, 5 qui représentent les températures
moyennes. Imprimer les quatre saisons avec les quatre températures moyennes
correspondantes.
Si on donne un index négatif, cela signifie que l’on commence à compter
à partir de la fin. Ainsi, le −1e élément signifie le dernier élément de la liste,
comme dans l’exemple ci-dessous.
Exemple 23
fruits = ["pomme", "poire", "citron", "fraise"] 1
print("Le dernier fruit de la liste est", fruits[-1]) 2
print("Et l'avant-dernier fruit de la liste est", fruits[-2]) 3
15
Il est aussi possible de faire des listes contenant des éléments de types diffé-
rents et même des listes de listes.
Exemple 24
objets = ["Julie", 6,"Pierre",4, "Paul", 4] 1
print("Le second element est", objets[1]) 2
Exemple 25
branches = ["math", "allemand", "anglais"] 1
notes = [[4,5], [4,4.5,6], [3,5,4]] 2
print("branche:", branches[2], "notes:",notes[2]) 3
print("J'ai aussi fait un ", notes[1][2], "en", branches[1]) 4
Exemple 26
liste1 = [0,1] 1
liste2 = liste1 + [3,4,5] 2
liste3 = liste1*4 3
print(liste2) 4
print(liste3) 5
print(liste3[4]) 6
print(liste3[2:5]) 7
print(liste3[3:]) 8
if 3 in liste2: 9
16
print("3 est dans liste2") 10
else: 11
print("3 n'est pas dans liste2") 12
Exercice 20 Définir une liste qui contient 20 fois le nombre 3 puis 10 fois
le nombre 5 et la mettre dans une variable l. Afficher le contenu de cette liste
pour vérifier. Afficher ensuite uniquement les éléments 17 à 23 de cette liste.
Exemple 27
nombres = [0,1,2,3,4,5,6,7,8,9,10,11,12] 1
print(nombres[1:3]) 2
print(nombres[1:-4]) 3
print(nombres[2:10:2]) 4
print(nombres[3:12:3]) 5
print(nombres[-5:-2]) 6
print(nombres[-4::2]) 7
Exemple 28
lettres = ["a","b", ["e", "f"]] 1
if "a" in lettres: 2
print("La liste contient la lettre a") 3
else: 4
print("La liste ne contient pas la lettre a") 5
6
if "e" in lettres: 7
print("La liste contient la lettre e") 8
else: 9
print("La liste ne contient pas la lettre e") 10
17
5.2 Les tuples
Les tuples sont comme des listes, à la différences qu’ils ne peuvent pas être
modifiés. Il sont initialisés avec des parenthèses plutôt que des crochets, comme
dans l’exemple ci-dessous. Les opérateurs de liste décrits ci-dessus fonctionnent
également avec les tuples.
Exemple 29
tup1 = ("a","b") 1
tup2 = (0,1) 2
tup3 = tup1 + tup2 3
tup4 = tup3*2 4
print(len(tup4)) 5
print(sum(tup2)) 6
print(tup4[3:]) 7
Exemple 30
nombres = range(0,10) 1
n = len(nombres) 2
print("Le second element est", nombres[1]) 3
print("le range contient", n, "elements") 4
print("le range est", nombres) 5
li = list(nombres) 6
print("la liste contient aussi", len(li), "elements") 7
Exemple 31
18
presidents = ["Clinton","Bush","Obama","Trump","Biden"] 1
for name in presidents: 2
print (name, "fut president") 3
Dans l’exemple ci-dessus, la variable name prendra successivement les valeurs de
la liste presidents et l’instruction print sera à chaque fois exécutée.
L’instruction for peut également être utilisée avec un tuple ou un range.
Exemple 32
for i in range(1,11): 1
print(i) 2
Le programme ci-dessus affiche les nombres de 1 à 10.
19
6 La définition de fonction
Il est souvent utile d’écrire ses propres fonctions, afin de ne pas avoir à
écrire plusieurs fois la même liste d’instruction. En programmation, le concept
de fonction n’est pas exactement le même qu’en mathématiques. Il faut plutôt le
voir comme un sous-programme auquel on fournit des objets et qui en retourne
d’autres.
Exemple 33
def aucube(n): 1
cube = n * n * n 2
return cube 3
4
a = aucube(n=2) 5
b = aucube(n=5) 6
print("les cubes de 2 et 5 sont", a, "et", b) 7
Dans l’exemple ci-dessus le mot-clé def indique que l’on définit une fonction.
Toute définition de fonction commence avec ce mot-clé. Le mot qui suit est le
nom de la fonction (ici aucube) suivi d’une paire de parenthèses indiquant les
arguments de la fonction. La fonction de cet exemple n’a qu’un argument, appelé
n. La première ligne de la définition de la fonction se termine par deux points˜( :),
indiquant que la liste d’instructions va commencer. La fonction se termine avec
l’instruction return qui indique ce que la fonction retourne.
Après avoir définie cette fonction, le programme ci-dessus l’utilise dans les lignes
5 et 6. Ce n’est qu’à ce moment-là que les instructions de la fonction sont
exécutées. La première fois (ligne 5), la variable n prend la valeur 2 (ligne 5)
et le résultat de la fonction (ce qui est retourné par l’instruction return) est
assigné à la variable a. La seconde fois (ligne 6), n prend la valeur 5 et le résultat
de la fonction est assigné à b.
20
Exercice 26 Modifier l’exemple ci-dessus pour avoir une fonction aucarre
qui calcule le carré d’un nombre. Utiliser cette fonction pour calculer le carré
des nombres 6, 18 et 573.
Exemple 34
def saluer(nom): 1
print("Bonjour", nom) 2
print("Bienvenue") 3
return 4
5
saluer(nom="Pierre") 6
saluer("Jeanne") 7
L’exemple ci-dessus est montre la définition d’une fonction qui ne retourne
aucune valeur : l’instruction return n’est pas suivie par une variable. La fonc-
tion s’exécute mais ne retourne rien.
On remarque également que l’appel de fonction de la dernière instruction omet
le nom de l’argument (nom=) qui est facultatif. En ce cas, il faut respecter l’ordre
des arguments dans la fonction, comme dans l’exemple ci-dessous.
Exemple 35
def volume_cylindre(rayon, hauteur): 1
vol = 3.1415 * rayon**2 * hauteur 2
return vol 3
4
v1 = volume_cylindre(rayon=2.3, hauteur=10) 5
v2 = volume_cylindre(1.2,5) ## le rayon=1.2 et la hauteur=5 6
print("Le volumes des cylindres est de ", v1, "et ", v2) 7
Exemple 36
def saluer(nom): 1
global nbpers 2
nbpers = nbpers + 1 3
print("Bonjour", nom) 4
print("Bienvenue") 5
return 6
21
7
nbpers = 0 8
saluer("Pierre") 9
saluer("Jeanne") 10
print("J'ai pu saluer ", nbpers, "personnes") 11
Dans l’exemple ci-dessus le programme garde le compte du nombre de personnes
saluées dans la variable globale nbpers qui est mise à jour à chaque appel de
fonction. Grâce au mot-clé global de la ligne 2, python va chercher la valeur de
cette variable à l’extérieur de la fonction. Elle a été initialisé à la ligne 8, qui est
la première ligne exécutée par le programme après la définition de la fonction
saluer.
Exemple 37 Exemple 38
def fonction(x): 1def fonction(x): 1
a = 3 2 global a 2
a = a+1 3 a = a+1 3
return a*x 4 return a*x 4
a = 5 5 = 5
a 5
b = fonction(10) 6 = fonction(10)
b 6
print(b) print(b)
7 7
b = fonction(10) 8 = fonction(10)
b 8
print(b) print(b)
9 9
22
7 Les chaînes de caractères
7.1 Extraction de caractères
Comme les listes, il est possible d’extraire des caractères des chaînes de
caractères grâce aux crochets. Les indices commencent également à 0 pour le
premier caractères.
Exemple 39
nom = 'Julie' 1
prenom = 'Dupont' 2
print ('Bonjour', nom[0], '. ', prenom) 3
Comme dans les listes, il est également possible de sélectionner une “tranche”
de plusieurs caractères consécutifs en utilisant s[a:b] qui retourne les caractères
a à b-1 de la chaîne de caractères s. Si a n’est pas spécifié, on sélectionne depuis
le début de la chaîne de caractère, et si b n’est pas spécifié on sélectionne jusqu’à
la dernière lettre de la chaîne de caractère.
Exemple 40
mot = 'Bonjour' 1
a = mot[3:6] 2
print(a) 3
print (mot[:3]) 4
print (mot[1:]) 5
Dans l’exemple ci-dessous, la variable a contient les caractères 3 à 5 du mot
’Bonjour’, c’est-à-dire ‘jou’. Toutefois, à la différence des listes, il n’est pas
possible en Python de modifier une chaîne de caractère.
Exemple 41
l = ['a','b','c','d'] 1
l[1] = 'e' # possible car l est une liste 2
a = 'abcd' 3
## on ne peut pas ecrire a[1] = 'e' 4
## car a est une chaine de caractere. 5
## par contre on peut ecrire 6
a = a[0]+'e'+a[2:] 7
print(a) 8
23
Exemple 42
a = 'sos'*4 1
print(a) 2
Dans l’exemple ci-dessus, la variable a contient ’sossossossos’, autrement dit
les lettres ’sos’ répétées quatre fois.
24
Exercice 33 - Le jeu du pendu Le but de cet exercice est de programmer
le jeu du pendu. Les programmes vus jusqu’à présent étaient si simples qu’ils
pouvaient facilement s’écrire de façon linéaire, de la première à la dernière ligne.
Cependant ce n’est généralement pas ainsi que les programmeurs écrivent des
programmes. De même qu’on écrit un plan avant de rédiger un texte, ou qu’un
dessinateur commence avec des traits principaux avant de fignoler les détails, un
programmeur n’écrit généralement pas son programme de la première à la der-
nière ligne. Ici, nous allons procéder en implémentant d’abord les fonctionalités
principales puis nous allons étoffer le programmes pour le rendre plus complet
et amusant.
25
est deviné, féliciter l’utilisateur.
8. Modifier le programme pour permettre un maximum de dix erreurs. Pour
ceci créer une variable qui compte les erreurs de l’utilisateurs. Si cette
variable arrive à 10 interrompre la boucle, indiquer que le joueur a perdu
et afficher le mot qu’il fallait deviner.
9. Ce programme va toujours proposer le même mot à deviner, il faut le
modifier pour qu’il choisisse un mot de façon aléatoire.
— Créer une liste appelée touslesmots qui contient tous les mots pos-
sibles que l’ordinateur peut proposer. Pour commencer, une liste de 10
mots est amplement suffisante.
— Définir (en début de programme) une fonction appelée choisi_mot(li)
qui retourne un élément choisi au hasard dans la liste li. Utiliser la
fonction randint(a) qui choisi un nombre au hasard entre 0 et a-1.
Indication : Mettre la ligne suivante en début de programme pour
utiliser randint :
from random import *.
— Modifier l’initialisation de la variable mot au début du programme
pour qu’il choisisse aléatoirement un mot à deviner. Utiliser la fonction
choisi_mot et la liste touslesmots.
10. Modifier le programme pour qu’il fasse le dessin du pendu à chaque étape.
Pour ceci, définir une fonction dessine_pendu(n) qui dessine les n pre-
mières étapes du pendu.
Il est possible d’améliorer ce jeux de diverses manières. Par exemple, au lieu de
définir soit même une liste de mots, on pourrait dire au programme d’ aller en
chercher une sur le web (ce qui permettrai à l’utilisateur de choisir sa langue).
Ou alors on pourrait créer une interface graphique pour que le jeu se déroule
dans une fenêtre dédiée avec un vrai dessin de pendu.
26
8 Les dictionnaires
En Python, un dictionnaire, aussi appelés "table de hachage" dans d’autres
langages, est une structure qui permet stocker des couples d’éléments (en anglais
items) constitués d’une "clef" (en anglais key) et d’une "valeur" (en anglais
value). Dans l’analogie avec un dictionnaire réel, la "clef" représente le mot et
la "valeur", la définition. On ne peut donc accéder à la valeur (la définition)
qu’en utilisant la clef (le mot).
Pour initialiser un dictionnaire, on met la liste de couples clef:valeur dans
une accolade et séparés par une virgule. La clef est séparée de la valeur par
deux points. L’exemple ci-dessous utilise un dictionnaire Python pour réaliser
un dictionnaire français-anglais.
Exemple 43
dico = {"livre":"book", "souris":"mouse", 1
"ordinateur":"computer", "voiture": "car"} 2
print("En anglais, le mot 'souris' se dit", dico["souris"]) 3
Dans l’exemple ci-dessus, le dictionnaire dico ne peut être utilisé que pour
traduire du français vers l’anglais, mais pas pour traduire de l’anglais vers le
français car les éléments ne sont accessible que par leur clef (et non par leur
valeur). Pour accéder à la valeur correspondant à une clef, on place la clef entre
crochets juste après le nom du dictionnaire (dico["souris"] dans l’exemple
ci-dessus).
Dans cet exemple, la clef est donnée par une chaîne de caractère, mais elle peut
aussi être donnée par d’autres types de variable comme par exemple un entier :
Exemple 44
chiffres = {0:"zero", 1:"un", 2:"deux", 3:"trois", 4:"quatre", 1
5:"cinq", 6:"six", 7:"sept", 8:"huit", 9:"neuf"} 2
print("En toutes lettres, le chiffre 4 s'ecrit", chiffres[4]) 3
Il est aussi possible de mettre des listes commes valeurs :
Exemple 45
notes = {"Pierre": [5, 4.5], "Jean": [5,6,3.5], "Anna": [6,5,5]} 1
print("Les notes de Jean sont:", notes["Jean"]) 2
Il est bien entendu possible d’ajoûter ou de modifier une valeur dans un diction-
naire avec l’opérateur =.
Exemple 46
moyennes = {"Laure": 5, "Pierre": 4.5} 1
moyennes["Mia"] = 5.5 2
moyennes["Pierre"] = 4 3
print("La moyenne de Pierre est", moyennes["Pierre"]) 4
print("La moyennen de Mia est", moyennes["Mia"]) 5
27
Exercice 34 Ecrire un programme qui demande un nombre à l’utilisateur
d’entrer un nombre entier n et initialise un dictionnaire avec comme clef les
nombres de 1 à n et comme valeur la liste des diviseurs de la clef.
8.1 Muabilité
Tout comme les listes, les dictionnaires en Python sont muables (mutable
en anglais), contrairement aux variable de type simple (nombres, chaînes de
caractères, booléens) et aux tuples. Cela signifie concrètement qu’un dictionnaire
ou une liste qui sont passé comme argument d’une fonction peuvent être modifiés
par la fonction comme dans l’exemple ci-dessous.
Exemple 47
def ajoute(dic,nom,age): 1
age = int(age) # enleve la virgule a age 2
dic[nom] = age 3
return 4
5
dico = {} 6
a = 22.5 7
ajoute(dico,"Joelle", a) 8
a = 19.5 9
ajoute(dico,"Mike", a) 10
print("Le dictionnaire muable dico:", dico) 11
print("La variable immuable a:", a) 12
Dans l’exemple ci-dessus, le dictionnaire dico est modifié par la fonction ajoute,
alors que la variable a qui est un nombre ne l’est pas. Ainsi, à la fin du pro-
gramme, le dictionnaire contient les éléments {"Joelle":22, "Mike": 19},
alors que la variable a contient le nombre 19.5.
Les listes sont également muables en Python, mais il existe également des
listes immuables qui qu’appellent des tuples. On les utilisent lorsqu’on est sûr
de ne pas vouloir les modifier. Les tuples sont initialisés en mettant les éléments
séparés par des virgules dans une parenthèse.
Exemple 48
premiers = (2,3,5,7,11) 1
print("le plus petit nombre premier est", premiers[0]) 2
print("les trois premiers nombres premiers sont", premiers[0:3]) 3
Dans l’exemple ci-dessus, premier est un tuple car il est initialisé avec des pa-
renthèses à la place des crochets comme on le ferait pour une liste. Comme c’est
un tuple, il est immuable. L’instruction premier[2]=4 génèrerait une erreur
puisque l’on essaierait de modifier ce tuple. Par contre, il est possible d’accéder
(sans les modifier) aux éléments du tuple, comme pour les listes.
28
Exemple 49
def f1(a,b): 1
b = b+1 2
a[0] = b 3
return 4
5
x = 3 6
z = [2, 4] 7
y = ["b","o","n"] 8
u = {"k":"b"} 9
f1(z,x) 10
f1(y,z[1]) 11
f1(u,x) 12
print(x,y,z,u) 13
29
Remarque : Selon une syntaxe qui sera vue dans le chapitre 9, il est également
possible d’appeler les fonction ci-dessus de la manière suivante : dico.clear(),
dico.get(clef), dico.keys(), dico.values(), dico.items() où dico est le
nom de la variable de type dictionnaire.
Exemple 50
capitales = {"Suisse":"Berne", "France":"Paris", "USA":" 1
Washington", "Italie":"Rome"}
for (pays,cap) in dict.items(capitales): 2
print("La capitale de", pays, "est", cap) 3
Dans cet exemple, la boucle for se fait sur un tuple (pays,cap), c’est-à-dire
sur deux variables simultanément. A chaque itération de la boucle, pays prend
la valeur de la clef et cap prend la valeur correspondante.
Exemple 51
presidents = {"J. Carter":[1977,1980],"R. Reagan":[1981,1988],"G. 1
H.W. Bush":[1989,1992],"B. Clinton":[1993,2000],
"G.W. Bush":[2001,2007], "B. Obama":[2008,2016], "D. Trump" 2
:[2017,2018]}
while True: 3
pres = raw_input("Quel president vous interesse? ") 4
if pres=="": 5
break 6
if pres in dict.keys(presidents): 7
annees = presidents[pres] 8
print(pres, "etait president entre", annees[0], "et", 9
annees[1])
else: 10
print("Je ne connais pas ce president.") 11
30
Exercice 38 Que se passe-t-il si l’utilisateur entre uniquement le nom de
famille du président (par exemple "Clinton") ? Modifier le programme pour
qu’il puisse gérer ce cas de figure, par exemple en utilisant des fonctions vues
au chapitre précédent (chaînes de caractères).
Exercice 40 Ecrire trois fonctions qui vident un dictionnaire, une qui utilise
la fonction dict.clear, une qui utilise l’opérateur del et une qui utilise le
fonction popitem.
31
9 Les objets
Les programmes vus jusqu’à maintenant manipulent des variables et défi-
nissent des fonctions. Cette manière de programmer est appelée la programma-
tion procédurale puisque le code est structuré par des procédures (c’est-à-dire
des fonctions). Une manière alternative de structurer un programme consiste à
le modulariser par ce qu’on appelle des objets. Il s’agit de la programmation
orientée objet. Certains langages (comme C) ne permettent pas la programma-
tion orientée objet, d’autres (comme java) l’imposent, et d’autres encore (comme
Python) la permettent sans l’imposer.
Exemple 52
class Compte: 1
solde = 0 2
3
def imprimer_solde(self): 4
print("Le solde est",self.solde) 5
6
def ajouter(self,montant): 7
self.solde = self.solde + montant 8
9
def retirer(self,montant): 10
self.solde = self.solde - montant 11
Dans l’exemple ci-dessus, la première ligne indique qu’on va définir un nouveau
type d’objet qui s’appelle Compte, ou plus précisément une nouvelle classe d’ob-
jet appelée Compte. A la seconde ligne, on indique que ce type d’objet a un
attribut appelé solde qui vaut initialement zéro. On définit ensuite trois fonc-
tions (ou méthodes) : imprimer_solde afficher le solde du compte, ajouter
pour mettre de l’argent sur le compte et retirer pour retirer de l’argent du
compte. La première méthode imprimer_solde ne comporte qu’un argument
self, c’est-à-dire le compte en question. Les deux autres méthodes possèdent
un autre argument, montant qui est le montant à ajouter ou retirer. De ma-
nière générale, toutes les méthodes ont l’argument self qui représente l’objet
sur lequel s’applique la méthode. Une méthode peut accéder aux attributs de
son objet grâce à l’opérateur “.” (point). Ainsi self.solde représente l’attribut
solde de l’objet représenté par self.
Une fois une classe définie il est possible de l’utiliser, par exemple ainsi :
Exemple 53
32
compte1 = Compte() 1
compte1.ajouter(100) 2
compte1.imprimer() 3
compte1.retirer(50) 4
compte1.imprimer() 5
6
compte2 = Compte() 7
compte2.ajouter(60) 8
compte2.imprimer() 9
compte2.retirer(30) 10
compte2.imprimer() 11
Dans l’exemple ci-dessus deux objets de classe Compte ont été créés, l’un
appelé compte1 et l’autre appelé compte2. On parle alors de deux instances de
la classe Compte. La création d’un objet d’une classe donnée (on parle alors de
l’instanciation d’un objet) se fait par une fonction qui a le même nom que la
classe (cf. lignes 1 et 7 de l’exemple ci-dessus). Cette fonction, qui construit
un objet d’une classe donnée est appelée un constructeur. Elle peut être définie
implicitement comme dans l’exemple ci-dessus ou explicitement avec la fonction
__init__ comme dans l’exemple suivant :
Exemple 54
class Compte: 1
solde = 0 2
3
def __init__(self): 4
print("Le compte est en voie de creation") 5
6
def afficher_solde(self): 7
print("Le solde est",self.solde) 8
9
def ajouter(self,montant): 10
self.solde = self.solde + montant 11
12
def retirer(self,montant): 13
self.solde = self.solde - montant 14
Avec l’exemple ci-dessus, chaque fois qu’un Compte sera ouvert avec l’appel de
la fonction Compte(), c’est la méthode __init__ qui sera exécutée.
Exemple 55
33
class Compte: 1
solde = 0 2
3
def __init__(self, solde_initial): 4
self.solde = solde_initial 5
print("Le compte est en voie de creation") 6
print("Solde initial:", self.solde) 7
8
## definition des methodes de la classe (omis) ### 9
10
compte1 = Compte(100) 11
compte1.retirer(20) 12
compte1.afficher_solde() 13
Exemple 56
class Compte(object): 1
solde = 0 2
monnaie = "CHF" 3
4
def __init__(self, solde_initial): 5
self.solde = solde_initial 6
print("Le compte est en voie de creation") 7
print("Solde initial:", self.solde, Compte.monnaie) 8
9
34
def afficher_solde(self): 10
print("Le solde est",self.solde, Compte.monnaie) 11
12
## definition des methodes de la classe (omis) ### 13
14
compte1 = Compte(100) 15
compte2 = Compte(500) 16
compte1.afficher_solde() 17
compte2.afficher_solde() 18
Compte.monnaie = "EUR" 19
compte1.afficher_solde() 20
compte2.afficher_solde() 21
Dans cet exemple, la variable monnaie est la même pour tous les comptes instan-
ciés, c’est-à-dire pour compte1 et compte2, contrairement à la variable solde.
La variable monnaie n’est jamais associée à une instance spécifique (à un self),
mais à toute la classe donc on l’associe au nom de la classe (ici Compte.monnaie)
comme aux lignes 8, 11, et 19.
9.2 Héritage
Il est souvent utile de définir une nouvelle classe à partir d’une classe exis-
tante en y ajouter des attributs et des méthodes. Ici, nous allons définir un
compte spécial, qui a une limite de découvert, c’est-à-dire dont le solde ne peut
être inférieur à une valeur (négative) donnée. Il s’agit donc d’un Compte qui à
en plus un attribut limite_decouvert. Pour ne pas avoir à redéfinir toutes la
classe, on utilise le principe d’héritage en définissant une sous-classe de Compte
appelée CompteLimite.
Exemple 57
1
## definition de la classe Compte (omise) ### 2
3
class CompteLimite(Compte): 4
limite_decouvert = 0 5
6
def fixer_limite(self, limite): 7
self.limite_decouvert = limite 8
9
35
def retirer(self,montant): 10
if self.solde - montant >= self.limite_decouvert : 11
self.solde = self.solde - montant 12
else: 13
print("Il n'y a pas assez sur le compte.") 14
15
c1 = Compte(60) 16
c1.retirer(100) 17
c2 = CompteLimite(60) 18
c2.retirer(100) 19
c1.afficher_solde() 20
c2.afficher_solde() 21
La première ligne après le commentaire de l’exemple ci-dessus indique de la
classe CompteLimite est une classe qui hérite de tous les attributs et méthodes
de la classe Compte (indiquée entre parenthèse). La définition de cette sous-classe
ne comporte que les éléments qu’on y ajoute (l’attribut limite_decouvert et
la méthode fixer_limite) ainsi que les élément qu’on modifie (ici la méthode
retirer qui vérifie maintenant que la limite n’est pas dépassée). A l’exécution
de ce pogramme, l’objet c1 de classe Compte affichera un solde de -40 alors que
l’objet c2 de classe CompteLimite aura affichera un solde de 60, car cette classe
n’autorise pas le découvert.
36
10 L’importation de modules
Dans les section suivantes, nous allons voir différents modules (ou librairies)
souvent utilisée avec python. En python, les module sont des fichiers contenant
les définition de divers objets ou fonctions qui peuvent être réutilisées. On a
par exemple déjà vu le module math qui contient la définition de différentes
fonction mathématiques, par exemple pow(a,b) qui retourne a à la puissance
b. Pour utiliser ce module, on utilise le mot-clé import, et on préfixe l’appel
de la fonction par le nom du module pmdans lequel elle se trouve, comme dans
l’exemple suivant :
import math 1
2
a = math.pow(10,2) 3
L’expression math.pow indique qu’il s’agit de la fonction pow du module math.
On peut utiliser la même construction si on veut utiliser des variables ou des
objets d’un module donné, par exemple la variable math.pi.
37
11 Les interfaces graphiques avec tkinter
Jusqu’à maintenant, tous les programme que nous avons vu interagissent
avec l’utilisateur par le biais de la console (ou du shell de Python). Bien que
beaucoup de programmes utilisés par les professionnels sont de ce type, la plu-
part des programmes destinés au grand public proposent une interface gra-
phique, c’est-à-dire une fenêtre contenant des éléments graphiques avec les-
quels l’utilisateur peut interagir. Dans ce chapitre, nous allons voir comment
créer une interface graphique avec Python en utilisant la librairie la plus uti-
lisée pour ceci tkinter. Cette librairie (ou module, c’est-à-dire un ensemble
de fonctions et de classes déjà définies) permet de faire beaucoup de chose
différentes, mais nous n’en utiliserons qu’une petite partie. Pour entrer plus
dans les détails, il est conseillé de se référer à la documentation, disponible sur
https://docs.python.org/fr/3/library/tkinter.html.
Exemple 61
from tkinter import * 1
fenetre = Tk() 2
Il est possible de donner un titre et d’ajouter des éléments à cette fenêtre.
Par exemple du texte, un bouton ou un canevas, c’est-dire un espace dans lequel
on peut dessiner des formes.
Exemple 62
from tkinter import * 1
fenetre = Tk() 2
fenetre.title("Le titre de ma fenetre") 3
etiquette = Label(fenetre,text="Une etiquette") 4
bouton = Button(fenetre,text="Quitter",command=quit) 5
toile = Canvas(fenetre,width=500, height=500,bg="white") 6
etiquette.pack() 7
bouton.pack() 8
toile.pack() 9
mainloop() 10
Lorsqu’on crée un élément, on indique dans quelle fenêtre il se trouve (dans
cette exemple fenetre puis il est possible d’entrer divers arguments qui vont
influencer son apparence. L’argument command de Button permet d’indiquer
quelle fonction va être appelée lorsque l’utilisateur appuie sur le bouton. Cela
peut être une fonction du module (comme ici quit() qui ferme la fenêtre) ou
une fonction du écrite par le programmeur. Chaque élément créé est ensuite
disposé dans la fenêtre avec la fonction pack qui calcule où mettre quoi. Si l’on
veut soi-même décider de la disposition, on peut à la place utiliser la fonction
grid.
38
La fonction mainloop() se met en fin de programme et indique le programme
garde la fenêtre ouverte et se met à l’écoute des actions de l’utilisateur.
Exercice 47 Créer un programme qui ouvre deux fenêtres, une dont avec
fond rouge appelée "fenetre rouge" et l’autre avec fond bleu appelée "fenêtre
bleue". En utilisant des objet de classe Label, ajouter un texte dans chaque
fenêtre ainsi qu’un bouton permettant de quitter. Est-ce que le bouton ferme
toutes les deux fenêtre ou juste celle dans laquelle on a cliqué ?
Exemple 63
from tkinter import * 1
fenetre = Tk() 2
toile = Canvas(fenetre,width=500, height=500,bg="white") 3
toile.pack() 4
## rectangle allant du point (0,10) au point (30,40) 5
carre = toile.create_rectangle(0,10,30,40,fill="red") 6
## ligne allant du point (50,60) au point (100,110) d'epaisseur 3 7
ligne = toile.create_line(50,60,100,110,fill="blue",width=3) 8
## ovale inclu dans un rectancle allant de (50,60) a (100,110) 9
ovale = toile.create_oval(200,220,260,280,fill = "green",width=2) 10
## polygone defini par les points (40,200), (60,220), (80,300), 11
(60,340).
forme = toile.create_polygon(40,200,60,220,80,300,60,340,fill=" 12
yellow")
mainloop() 13
Dans l’exemple ci-dessus les nombres indiqués correspondent aux coordonnées
du Canvas. L’origine, c’est-à-dire le point (0,0) correspond au coin en haut à
gauche. La première coordonnée indique la position sur l’axe horizontal et le
seconde coordonnée la position sur l’axe vertical en descendant (C’est comme
en mathématique sauf que l’axe des y pointe en bas).
Exercice 48 Ecrire un programme qui ouvre une fenêtre sur laquelle est
dessinée une maison.
Il est également possible d’inclure des images au format gif dans un Canvas.
Dans l’exemple ci-dessus un fichier nommé arbre.gif doit être dans le même
répertoire que le fichier contenant le programme python.
Exemple 64
from tkinter import * 1
fenetre = Tk() 2
toile = Canvas(fenetre,width=500, height=500,bg="white") 3
toile.pack() 4
39
## l'image se trouve dans le fichier arbre.gif 5
monimage = PhotoImage(file="arbre.gif") 6
## on affiche l'image centree sur le point (250,250) 7
arbre = toile.create_image(250,250,image=monimage) 8
mainloop() 9
Dans l’example ci-dessus, l’image s’affichera dans sa taille d’origine. Si l’on
désire modifier cette taille, il faut modifier le fichier arbre.gif avec un pro-
gramme tel que Gimp ou Photoshop. L’autre solution, plus pratique, consiste à
utiliser le module PIL qui contient différentes fonction pour modifier des images
comme dans l’exemple ci-dessous.
Exemple 65
from tkinter import * 1
## on va utiliser le module PIL 2
from PIL import Image, ImageTk 3
fenetre = Tk() 4
toile = Canvas(fenetre,width=500, height=500,bg="white") 5
toile.pack() 6
## on ouvre un fichier image appele arbre.gif 7
monimagePIL = Image.open("arbre.gif") 8
## on change la taille de l'image 1 100 x 100 9
monimagePIL = monimagePIL.resize((100,100),Image.ANTIALIAS) 10
## on convertit en format affichable dans un Canvas 11
monimage = ImageTk.PhotoImage(monimagePIL) 12
## on affiche l'image centree sur le point (250,250) 13
arbre = toile.create_image(250,250,image=monimage) 14
mainloop() 15
Exercice 49 Chercher une image au format gif sur le web et écrire un pro-
gramme qui affiche cette image dans une fenêtre en trois position différentes.
Il est souvent utile d’obtenir les coordonnées d’un objet dessiné en utilisant
la méthode coords :
Exemple 66
from tkinter import * 1
fenetre = Tk() 2
toile = Canvas(fenetre,width=500, height=500,bg="white") 3
toile.pack() 4
rond = toile.create_oval(200,220,260,280,fill = "pink",width=2) 5
pos = toile.coord(rond) 6
print("la position du rond est ", pos) 7
40
from tkinter import * 1
def pressetouche(event): 2
print("Touche pressee", event.char) 3
return 4
5
def bougesouris(event): 6
print("souris bougee au point", event.x, event.x) 7
return 8
9
def cliquegauche(event): 10
print("souris cliquee au point", event.x, event.x) 11
return 12
13
fenetre = Tk() 14
fenetre.bind("<Key>",pressetouche) 15
fenetre.bind("<Motion>",bougesouris) 16
fenetre.bind("<Button-1>", cliquegauche) 17
Chaque fois que l’utilisateur exécute une de ces actions (appuie sur une
touche, bouge la souris ou appuie sur le bouton gauche de la souris) la fonction
correspondante est appelée. Ceci se fait de manière asynchrone, c’est ce qu’on
appelle des événements. Les principale actions détectables sont résumée dans le
tableau suivant :
Code Evénement
<Button> l’utilisateur clique sur un bouton de la souris
<Button-1> l’utilisateur clique sur le bouton gauche de la souris
<Button-2> l’utilisateur clique sur le bouton du milieu de la souris
<Button-3> l’utilisateur clique sur le bouton du droit de la souris
<ButtonRelease> l’utilisateur relâche un bouton de la souris
<Double-Button> l’utilisateur double-clique sur le bouton de la souris
<Key> l’utilisateur appuie sur une touche
a l’utilisateur appuie sur la touche a (cela fonctionne
aussi pour les autre caractères)
<space> <Return> l’utilisateur appuie sur la touche indiquée
<Left> <Up>
<Right> <Down>
<Enter> la souris arrive sur la fenêtre
<Leave> la souris quitte la fenêtre
Exercice 50 Créer un programme qui ouvre une fenêtre contenant une éti-
quette et qui met l’arrière-plan en vert si on passe dessus avec la souris et en
rouge sinon.
Indices : Utiliser les événements <Enter> et <Leave>. La couleur de l’arrière-
plan peut être mise en rouge de la manière suivante : etiquette.configure(background="red")
(où etiquette est le nom de votre étiquette).
Il est possible de modifier un dessin sur un Canvas en fonction de l’action de
l’utilisateur. Pour ceci on peut utiliser les méthodes (de la classe Canvas) move
(qui déplace un objet dessiné) delete, qui efface un objet dessiné.
41
Exemple 67
from tkinter import * 1
2
def gauche(event): 3
## bouge rond de -10 pixels horizontalement et 0 verticalement 4
toile.move(rond,-10,0) 5
return 6
7
def droite(event): 8
## bouge rond de 10 pixels horizontalement et 0 verticalement 9
toile.move(rond,10,0) 10
return 11
12
def efface(event): 13
toile.delete(rond) 14
return 15
16
fenetre = Tk() 17
toile = Canvas(fenetre,width=500, height=500,bg="white") 18
toile.pack() 19
rond = toile.create_oval(200,220,260,280,fill = "pink",width=2) 20
## appeler la fonction gauche lorsqu'on appuie sur <Left> 21
fenetre.bind("<Left>",gauche) 22
## appeler la fonction droite lorsqu'on appuie sur <Right> 23
fenetre.bind("<Right>",droite) 24
## appeler la fonction efface lorsqu'on appuie sur <Return> 25
fenetre.bind("<Return>",efface) 26
mainloop() 27
Dans l’exemple ci-dessus, le rond bouge à droite lorsque l’utilisateur appuie sur
la flèche droite, à gauche lorsque l’utilisateur appuie sur la flèche gauche et est
effacé lorsque l’utilisateur appuie sur la touche Return.
Exercice 51 Ecrire un programme qui affiche une fenêtre sur laquelle est
dessinée un rectangle qui bouge en haut et en bas lorsque l’utilisateur appuie
(sur le clavier) sur la flèche qui monte ou qui descend.
Exemple 68
from tkinter import * 1
2
def unpas(): 3
42
toile.move(carre,10,0) 4
toile.after(10,unpas) 5
return 6
7
fenetre = Tk() 8
toile = Canvas(fenetre,width=500, height=500,bg="white") 9
toile.pack() 10
carre = toile.create_rectangle(0,0,20,20,fill="red") 11
unpas() 12
mainloop() 13
Dans l’exemple ci-dessus, la fonction unpas fais bouger le carré rouge. Mais elle
ne le fait avancer que de 10 pixels vers la droite. Mais, elle est rappelée toute
les 10 millisecondes grâce à l’utilisation de la fonction after. Cette fonction
indique à l’ordonnanceur d’exécuter la fonction unpas dans 10 millisecondes.
Ainsi chaque fois que cette fonction est appelée, elle prévoit quelle sera réexécu-
tée dans 10 millisecondes. La fonction mainloop est une boucle infinie qui vérifie
s’il n’y a des actions de la part de l’utilisateur et exécute les actions prévues par
l’ordonnanceur. Elle ne s’arrête que lorsqu’on ferme la fenêtre.
43
direction. L’utilisateur peut maintenant diriger l’entier du serpent avec
le clavier.
8. Définir la variable globale fruits qui est aussi une liste de rectangles.
Il s’agit des fruits que le serpent doit attraper. Initialiser cette liste avec
deux rectangle dont la position est générée aléatoirement dans le cadre
de la fenêtre. Utiliser la fonction random.randint pour la génération des
nombres aléatoires.
9. Ecrire une fonction mange qui vérifie si la tête du serpent est sur un fruit.
10. Modifier votre code pour que le fruit mangé réapparaisse ailleurs dans la
fenêtre et pour que le serpent s’allonge lorsqu’il mange un fruit.
11. Ecrire une fonction qui vérifie que le serpent ne se mord pas la queue.
Arrêter le jeu si c’est le cas.
12. Ecrire une fonction qui vérifie que la tête du serpent ne sorte pas de la
fenêtre. Arrêter le jeu si c’est la cas.
13. Définir une variable globale score qui calcule le nombre de fruits mangés
et afficher le score dans la fenêtre au moyen d’un Label.
14. Ajouter un message de fin lorsque la partie est finie.
44
12 Programmer un jeu avec pygame
La librairie pygame est sans doute la librairie la plus populaire pour la pro-
grammation de jeux en python. Elle permet de gérer l’ouverture des fenêtre, la
manipulation d’éléments graphiques du jeu comme les personnages et les obs-
tacles et la gestion des événements tels que les clicks, le déplacement de la souris
ou les interactions avec le clavier.
45
Pour comprendre ce code, il faut savoir que pg.event.get() retourne la
liste des événements qui sont survenus. Pour chacun de ces événements, la pro-
gramme vérifie si cet événement est l’appui sur une touche du clavier. Si c’est la
cas, la boucle infinie est interrompue par l’instruction exit() et le programme
se termine.
Les événements suivants sont les plus courants :
46
15 Les graphiques avec matplotlib
La libraire matplotlib de python permet d’écrire des programmes qui réa-
lisent des graphiques et les sauvegardent dans différents formats. Ceci est par-
ticulièrement utilisé dans l’analyse de données. Le programme va par exemple
aller automatiquement lire un fichier ou une base de données contenant des in-
formations et générer des graphiques pour les représenter.
Exemple 69
import matplotlib.pyplot as plt 1
# mise en forme des donnees 2
mois = range(1,13) # les nombres de 1 a 12 3
temperature = [5,8,12,15,21,24,26,26,21,16,9,6] 4
# specification du graphique 5
plt.plot(mois,temperature,color='red',marker='o') # un point 6
rouge comme marqueur
plt.xlabel("mois") # l'etiquette de l'axe des x... 7
plt.ylabel("temperature de l'eau du lac") # ... et celle des y 8
# affichage du graphique 9
plt.show() 10
47
Si on veut tracer plusieurs courbes sur le même graphique, il faut appeler
plusieurs fois la fonction plot, comme dans l’exemple suivant :
Exemple 70
import matplotlib.pyplot as plt 1
# mise en forme des donnees 2
x = [-3,-2,-1,0,1,2,3] 3
xcarre = [9,4,1,0,1,4,9] 4
xcube = [-27,-8,-1,0,1,8,27] 5
# specification du graphique 6
plt.plot(x,xcarre,label="courbe 1") # une 1e courbe: "courbe 1" 7
plt.plot(x,xcube,label="courbe 2") # une 2e courbe: "courbe 2" 8
plt.legend() # On ajoute une legende indiquant le nom des courbes 9
# affichage du graphique 10
plt.show() 11
Pour enregistrer un graphique, on peut utiliser la fonction savefig() (à la
place de show).
Exemple 71
import matplotlib.pyplot as plt 1
plt.plot([0,0,2,2], [1,0,0,1],marker='o',linestyle='') 2
plt.savefig("rectangle.pdf") 3
Exemple 72
48
import matplotlib.pyplot as plt 1
x = [3,6,10,13] 2
y = [2,-3,4,6] 3
plt.plot(x,y,marker='o',linestyle= '-',color='cyan',ms=10) 4
plt.show() 5
Exemple 73
import matplotlib.pyplot as plt 1
# donnes (selon la dgep) 2
categorie = ["Ecole de maturite", "Ecole de culture generale"] 3
nombre = [9150,3650] 4
# specification du 1er graphique (barres) 5
plt.bar(categorie,nombre) 6
plt.ylabel("Effectif total, ete 2020") 7
# affichage du 1er graphique 8
plt.show() 9
# specification du 2e graphique (camembert) 10
plt.pie(nombre, labels=categorie) 11
# affichage du 2e graphique 12
plt.show() 13
49
données représenté par une liste.
Exemple 74
import matplotlib.pyplot as plt 1
# temperatures moyennes en juillet a Geneve de 2000 Ã 2021 ( 2
selon meteosuisse)
temperatures = [17.9,19.9,19.6,22.1,19.5,20.4, 3
23.7,18.9,20,20.5,22.1,17.8,19.8,21.5,18.4,24.2,20.8, 4
21.4,22.3,22.6,22.2,19.6] 5
plt.hist(temperatures,bins=8,range=(17,25),rwidth=0.9) 6
plt.xlabel("temperature moyenne de juillet") 7
plt.ylabel("nombre (entre 2000 et 2021)") 8
plt.show() 9
4
nombre (entre 2000 et 2021)
0
17 18 19 20 21 22 23 24 25
temperature moyenne de juillet
50
15.3.3 Images
51