Cours Python Partie1
Cours Python Partie1
2024/2025
Présentation de Python
Le langage Python
Python est un langage de programmation interprété, c‟est-à-dire que
les instructions des programmes seront exécutées au fur et à mesure.
Open-source
Fonctionne sur tous les systèmes d'exploitation:
Extensible
Il est possible de développer ses propres modules, ses propres
librairies.
Typage Dynamique
Le langage Python
▪ Python intègre la notion de module
3
Présentation de Python
Comment faire fonctionner mon code source ?
Interprétation
Compilation
Code Code
Compilateur Exécuteur Résultat
Source Objet
Le compilateur … et produit un On exécute … et le résultat
lit le code code objet le code apparaît sur
source …. (binaire). objet…. l’écran.
4
Présentation de Python
Et Python
Code Byte-
Compilateur Interpréteur Résultat
Source Code
Le compilateur … et produit un L’interpréteur … et le résultat
Python lit le pseudo-code Python lit le apparaît sur
code source …. intermédiaire pseudo code …. l’écran.
Avantages :
▪ interpréteur permettant de tester n'importe quel petit bout de
code,
▪ compilation transparentes,
Inconvénients :
❑ Jython (2.5.3)
▪ Écrit en Java pour une JVM
• Génère du byte code Java
❑ IronPython (2.7.3)
▪ Écrit en C#
• Code compilé puis de nouveau compilé sur la machine JIT
(Just In Time)
6
Présentation de Python
• ...
7
Notions de variables.
Variables.
▪ Un algorithme ou un programme manipulent des données. Certaines
sont connues dès le départ, d‟autres sont calculées lors de son
exécution.
Variable :
Variables.
9
Notions de variables.
Spécificités du Python.
Typage dynamique :
▪ Avant d‟utiliser une variable on n‟a pas besoin de déclarer
explicitement son type, c‟est l‟interpréteur qui s‟en charge.
▪ Cela sera fait dès que l‟on attribuera une valeur à notre variable.
Typage fort :
▪ Les opérations possibles sur une variable dépendent intégralement de
son type.
▪ Les conversions de types implicites afin de réaliser certaines
opérations sont donc interdites.
10
Notions de variables.
Affectation de variables.
maVariable = valeur
11
Notions de variables.
Affectation de variables.
Remarques :
type(maVariable)
12
Notions de variables.
Affectation de variables.
Exemple :
>>> i = 4
>>> type(i)
<class 'int'>
>>> x, z = -5.3, 1+1j
>>> z
(1+1j)
>>> type(z)
<class 'complex'>
>>> type(x)
<class 'float'>
13
Notions de variables.
Affectation de variables.
Exemple :
14
Notions de variables.
Conversions de types.
Opérations de conversions :
Opération Contrainte / Résultat
int(x) x est un décimal (qui sera tronqué) ou une chaîne
int(x,base) x est une chaîne et base un entier
float(x) x est un entier ou une chaîne
complex(x,y) x et y sont des nombres ou x est une chaîne
bool(x) x est un nombre ou un booléen
Vaut False uniquement si x vaut 0 ou ‘ ‘
str(x) x est un nombre ou un booléen
eval(x) x est une chaîne qui est évaluée comme une
expression Python
15
Notions de variables.
Conversions de types.
Exemple :
>>> x = 666.6
>>> y = int(x)
>>> y
666
>>> eval('y+111')
777
>>> int('10101',2)
21
>>> str(y)
'666'
16
Notions de variables.
Affichage et saisie.
▪ En mode “console” on peut afficher le contenu d‟une variable en
tapant juste son nom (voir exemples précédents).
▪ Pour réaliser un affichage sur la console à partir d‟un script, et/ou pour
réaliser des affichages plus sophistiqués on aura besoin de
l‟instruction “print”.
print(expr_1,expr_2,...,sep=‘ ‘,end=‘\n’)
17
Notions de variables.
Affichage et saisie.
Syntaxe de la fonction “print” : (suite)
▪ “sep” indique ce qui va séparer ces expressions, par défaut il s‟agit
d‟un espace.
▪ “end” indique ce qui sera affiché après toutes les expressions, par
défaut il s‟agit d‟un retour à ligne.
Exemple :
>>> age = 30
>>> print("J'ai",age,"ans et dans deux ans
j'aurais",age+2,"ans")
J'ai 30 ans et dans deux ans j'aurais 32 ans
18
Notions de variables.
Affichage et saisie.
Exemple : (suite)
print("des","traits","bas","pour","séparer",
sep='_')
print("et","des","plus","à","la","suite",
sep='_',end='+++ ')
print("et la fin")
19
Notions de variables.
Affichage et saisie.
Remarque
20
Notions de variables.
Affichage et saisie.
var = input(expression)
Affichage et saisie.
Exemple :
>>> a = input()
>? 12
>>> print(a,type(a))
12 <class 'str'>
>>> b = eval(input("saisir un nombre : "))
saisir un nombre : >? 12
>>> print(b,type(b))
12 <class 'int'>
22
Opérations sur les variables.
Opérations arithmétiques.
Liste des principales opérations arithmétiques :
Opération Résultat
x+y Addition de x et y
x-y Soustraction de y à x
x*y Multiplication de x et y
x ** y Élévation de x à la puissance y
23
Opérations sur les variables.
Opérations arithmétiques.
Précisions :
Opérations arithmétiques.
Exemple :
>>> -3 + 5
2
>>> 3 * 5
15
>>> 5 ** 2
25
>>> 13 / 4
3.25
>>> 13 // 4
3
>>> 13 % 4
1
>>> 13 // 4.6
2.0
>>> 13 % 4.6
3.8000000000000007
25
Opérations sur les variables.
Opérations arithmétiques.
Quelques raccourcis :
Opération Résultat
x += y x=x+y
x -= y x=x-y
x *= y x=x*y
x **= y x = x ** y
x /= y x=x/y
x //= y x = x // y
x %= y x=x%y
26
Opérations sur les variables.
Opérations arithmétiques.
Exemple :
>>> x = 25
>>> y = 0.5
>>> x **= y
>>> print(x)
5.0
>>> y += 1
>>> print(y)
1.5
27
Opérations sur les variables.
Opérations arithmétiques.
Module “math” :
28
Opérations sur les variables.
Opérations arithmétiques.
Exemple :
29
Les types et les opérations de base
Les identifiants
▪Les identifiants sont sensibles à la casse et ne doivent pas être un
mot clé.
▪ Un identifiant commence toujours par une lettre.
▪En Python 3, on peut utiliser des lettres du code Unicode mais pas
en Python 2, uniquement des lettres non accentuées du code ASCII.
▪ Convention de nommage
• Les constantes en majuscules ;
• Les classes de style : NomDeLaClasse ;
• Les fonctions (méthodes et interfaces graphiques) : nomDeLaFonction
;
• Les autres identifiants : nomidentifiant ou nom_identifiant.
30
Les types et les opérations de base
31
Les types et les opérations de base
Conversion de base
▪Conversion en base 10
>>> int('AB',16)
171
>>> int('0xAA',16)
170
>>> int('53',8)
43
>>> int('10101',2)
21
▪Conversion de la base 10
>>> hex(22)
'0x16'
>>> oct(22)
'0o26'
>>> bin(22)
'0b10110'
32
Les structures de contrôle
Indentation
Les blocs de code (fonctions, instructions if, boucles for ou while etc.)
sont définis par leur indentation. L'indentation démarre le bloc et la
désindendation le termine. Il n'y a pas d'accolades, de crochets ou de
mots clés spécifiques. Cela signifie que les espaces blancs sont
significatifs et qu'ils doivent être cohérents.
a = -150
if a<0:
print 'a est négatif'
Ligne d'en-tête:
première instruction du bloc
...
dernière instruction du bloc
33
Structures conditionnelles
Test simple
x = eval(input())
if x < 0:
x = -x
print(x)
35
Structures conditionnelles
Test avec alternative(s).
◼ Cette fois-ci, on pourra avoir une ou plusieurs alternatives à la
conditionnelle si cette dernière n‟est pas vérifiée.
◼ On va donc simuler des raisonnements de la forme
SI ... ALORS ...
SINON SI ... ALORS ...
SINON ...
if conditionnelle:
bloc d’instructions à exécuter si la
conditionnelle est vraie
else:
bloc d’instructions à exécuter si la
conditionnelle est fausse
36
Structures conditionnelles
Test avec alternative(s)
n = eval(input())
if n%2 == 0:
print("le nombre saisi est pair")
else:
print("le nombre saisi est impair")
37
Structures conditionnelles
Test avec alternative(s)
Syntaxe d’un test avec plusieurs alternatives :
if conditionnelle:
bloc d’instructions à exécuter si la
conditionnelle est vraie
elif autre_conditionnelle:
bloc d’instructions à exécuter si la seconde
conditionnelle est vraie
else:
bloc d’instructions à exécuter si les premières
conditionnelles sont fausses
a,b = eval(input()),eval(input())
if a == 0:
if b == 0:
print("infinité de solutions")
else:
print("pas de solution")
else:
print("unique solution :",-b/a)
39
Structures conditionnelles
Opérateur ternaire.
◼ Cet opérateur permet dans certains cas une syntaxe plus compacte
d‟un test avec une alternative.
◼ Néanmoins son usage est beaucoup plus limité puisque les blocs à
exécuter selon que la conditionnelle soit vraie ou fausse ne doivent
comporter qu‟une seule instruction.
◼ Plus exactement les deux alternatives doivent être le calcul d‟une
expression.
Solution :
note = eval(input())
if note < 8:
print("recalé")
elif note < 10:
print("rattrapage")
else:
print("admis")
42
Structures itératives
Notion d’itération
43
Structures itératives
Structure “for”
44
Structures itératives
Structure “for”
45
Structures itératives
Structure “for”
Explication du fonctionnement :
◼Au fil des itérations, la variable var prendra successivement toutes les
valeurs de la plage créée par la fonction range.
◼ Le nombre d’itérations sera donc le nombre d’éléments de la plage
créée par la fonction range.
◼En pratique on se servira également très souvent des valeurs de la
variable var.
46
Structures itératives
Structure “for”
n = eval(input())
for i in range(1,11):
print(i,'*',n,'=',n*i)
Déroulement du programme :
◼ Admettons que l‟utilisateur saisisse la valeur 9.
◼ À la première itération la variable i vaut 1,
il est donc affiché 1 * 9 = 9.
◼ À la seconde itération la variable i vaut 2,
il est donc affiché 2 * 9 = 18.
◼ Etc.
47
Structures itératives
Structure “for”
Autres exemples : affichage des nombres pairs entre 20 et 0
for i in range(20,-1,-2):
print(i)
sum = 0
for i in [1, 2, 3, 4]:
sum += i
prod = 1
for p in range(1, 10):
prod *= p
Remarques
Pour un grand nombre d'éléments, on préférera utiliser xrange
plutôt que range.
48
Structures itératives
Structure “while”
◼ La structure « while » réalise un nombre d‟itérations non
nécessairement connu à l‟écriture du programme.
◼ Ce nombre dépend d‟une conditionnelle qui sera évaluée avant
chaque itération.
◼On la qualifie parfois d‟itération conditionnelle.
Syntaxe de la structure “while” :
while conditionnelle:
bloc d’instructions à exécuter tant que la
conditionnelle est vraie
Explication du fonctionnement :
◼On exécute donc le bloc d‟instructions tant que la conditionnelle
est vraie.
◼Dans ce bloc, il est donc nécessaire de modifier la valeur de la
conditionnelle pour ne pas risquer d‟avoir une infinité d‟itérations. 49
Structures itératives
Structure “while”
Exemple : calcul de la partie entière d‟un réel positif
x = eval(input())
n = 0
while n+1 <= x:
n += 1
print("la partie entière de",x,"est",n)
Déroulement du programme :
◼ Admettons que l‟utilisateur saisisse la valeur 2.57
◼ Avant les itérations, la variable n est initialisée à 0.
◼ La conditionnelle est alors vraie donc on réalise la première itération, et
n vaut maintenant 1.
◼ La conditionnelle est encore vraie donc on réalise la seconde itération,
et n vaut maintenant 2.
◼ Cette fois-ci la conditionnelle est fausse et l‟on stoppe les itérations. 50
Structures itératives
Imbrication de structures itératives
51
Structures itératives
Sorties de boucles
Deux possibilités pour “sortir” d’une boucle :
◼“break” : cette commande permet la sortie de la structure itérative
“for” ou “while” qui la contient.
◼ “continue” : cette commande permet de passer directement à
l’itération suivante dans la structure “for” ou “while” qui la contient.
for i in range(9):
if input() == 'x':
print("quel talent")
break
52
Structures itératives
Sorties de boucles
for i in range(10,21):
if i == 13:
continue
print(i)
53
Structures itératives
Clause “else” dans une boucle
54
Structures itératives
Clause “else” dans une boucle
Syntaxe de la structure “while” avec clause “else” :
while conditionnelle:
bloc d’instructions à exécuter tant que la
conditionnelle est vraie
else:
bloc d’instruction à exécuter (une fois) si
la conditionnelle est fausse
Solution :
n = -1
while n < 0:
n = eval(input())
somme = 0
for i in range(n+1):
somme += i
print("la somme des",n,"premiers entiers
vaut",somme)
56
Structures itératives
Exercices
Solution :
somme,n = 0,1
while n != 0:
n = eval(input())
somme += n
print("la somme des entiers saisis vaut",somme)
57
Les structures de contrôle
Zip et map
L=[1,2,3,4,5,6,7,8,9]
map(double,L)
[2,4,6,8,10,12,14,16,18]
58
Sous-programmes
Principe
59
Sous-programmes
Principe
Programme
appel du sous-
instructions programme
Toto
...
Toto
Retour au bloc d’instructions du
... programme
sous-programme Toto
instructions
...
60
Sous-programmes
Trois grands avantages
appel/retour
appel/retour
2. Favoriser la réutilisation.
62
Sous-programmes
Trois grands avantages.
3. Améliorer la conception.
Sous-programme Sous-programme
complexe simple
63
Sous-programmes
Notion de paramètre
64
Sous-programmes
Notion de paramètre
para1 Toto
para2
bloc d’instructions du sous-
programme Toto, qui traite
paraN para1, para2, ....paraN
65
Sous-programmes
Notion de paramètre
Programme
Toto
instructions val1
...
val2 bloc d’instructions du sous-
Toto(val1,val2,...)
programme Toto qui traite
...
para1, para2, .... avec les
instructions valN
valeurs val1, val2, ...
...
66
Sous-programmes
Variables locales versus globales
Toto
para1
para2
bloc d’instructions du
sous-programme Toto, qui
traite para1, para2, ....
paraN
à l’aide de variables locales
var1, var2, ...
68
Sous-programmes
Variables locales versus globales
Programme
Toto
instructions
Définition de variables bloc d’instructions du sous-
globales glob1, glob2, ... programme Toto qui traite
... val1 para1, para2, .... avec les
Toto(val1,val2,...) val2 valeurs val1, val2, ...
... à l’aide de variables locales
instructions var1, var2, ...
... valN Toto accède aux variables
globales glob1, glob2, ...
70
Sous-programmes
Deux types de sous-programmes
71
Sous-programmes
Deux types de sous-programmes
Fonctions :
para1 Toto
para2 résultat
bloc d’instructions du
sous-programme Toto, qui
paraN traite para1, para2, ....
72
Sous-programmes
Deux types de sous-programmes
Remarque :
◼ Tous les langages de programmation ne distinguent pas
nommément ces deux types de sous–programmes.
73
Les sous-programmes en Python
Les Fonctions
Le langage Python permet de réaliser ce que l‟on nomme des
fonctions. Il s‟agit d‟un bloc d‟instructions qu‟on écrit une seule fois
en leur attribuant un nom et qui dépend ou non d‟un certain nombre de
paramètres.
La fonction, peut être utilisée en tout point d‟un programme en
utilisant juste un appel avec le nom du sous programme (ou de la
fonction) avec les paramètres voulus.
Syntaxe générale d’une fonction :
def maFonction(para1,para2,...,paraN):
bloc d’instructions de la fonction
return valeur
def cube(x):
return x*x*x
74
Les sous-programmes en Python
Les Fonctions
Remarques importantes :
◼Une fonction peut retourner plusieurs valeurs, il suffit de
séparer celles-ci par des virgules.
◼Une fonction peut contenir plusieurs fois la commande
“return”, mais elle cesse son fonctionnement dès qu‟elle en
rencontre une.
76
Les sous-programmes en Python
Les Fonctions
Duck Typing
Principe du “Duck Typing” :
◼En Python on ne précise pas les types attendus des
paramètres des sous-programmes.
◼Cela implique que l‟on peut utiliser un sous-programme
avec des paramètres de n’importe quel type, à la condition
que les opérations du sous-programme soient compatibles
avec les types des paramètres.
Exemple de “Duck Typing” :
def addition(x,y):
return x + y
print(addition(666,1))
print(addition("Brown ",'Sugar'))
77
Les sous-programmes en Python
Paramètres par défaut
◼ Les paramètres d‟un sous-programme peuvent comporter
des valeurs par défaut.
◼ Deux cas possibles :
◼ Lors de l‟appel on ne précise pas de valeurs pour les
paramètres en question et le sous-programme utilise
celles par défaut.
◼ Si on précise des valeurs ce sont celles-ci qui sont
utilisées.
Exemple :
def rectangle(x=3,y=1):
print("périmètre :",2*(x+y),"aire :",x*y)
rectangle()
rectangle(2)
rectangle(7,5)
78
Les sous-programmes en Python
Paramètres par défaut
Autre exemple :
def rectangle(x,y=1):
print("périmètre :",2*(x+y),"aire :",x*y)
rectangle(2)
rectangle(7,5)
79
Les sous-programmes en Python
Paramètres immuables
a = 3
print("valeur de a avant :",a)
doubler(a)
print("valeur de a après :",a)
80
Les sous-programmes en Python
Paramètres immuables
def doubler(x):
return 2*x
a = 3
print("valeur de a avant :",a)
a = doubler(a)
print("valeur de a après :",a)
81
Les sous-programmes en Python
Variables locales et globales
Variables locales :
◼Ce sont donc des variables définies à l‟intérieur d‟un sous
programme et qui ne sont accessibles qu‟au sein de celui-ci.
◼Elles servent essentiellement au bon fonctionnement du
sous-programme.
82
Les sous-programmes en Python
Variables locales et globales
def sommeEntiers(n):
somme = 0
for i in range(n+1):
somme += i
return somme
print(somme)
83
Les sous-programmes en Python
Variables locales et globales
Variables globales :
◼Ce sont des variables définies en dehors de tout sous-
programme. Elles sont “globales” au sens où elles sont
visibles et utilisables dans tous les sous-programmes du
module courant.
i = 666
exemple1()
Exemple 2 :
def exemple2():
i = 111
print(i)
i = 666
exemple2()
print(i)
85
Les sous-programmes en Python
Variables locales et globales
Exemple 3 :
def exemple3():
print(i)
i = 111
print(i)
i = 666
exemple3()
86
Les sous-programmes en Python
Variables locales et globales
global var
Syntaxe :
87
Les sous-programmes en Python
Variables locales et globales
Exemple 4 :
def exemple4():
global i
print(i)
i = 111
print(i)
i = 666
exemple4()
print(i)
88
Les sous-programmes en Python
Exercice
def conversion1(n):
h = n // 3600
m = (n - 3600*h) / 60
s = n % 60
print(h,"heures,",m,"minutes,",s,"secondes")
89
Les sous-programmes en Python
Récursivité
facto(1) = 1 facto(1) = 1
91
Les sous-programmes en Python
Récursivité
Remarque importante :
Il est indispensable de prévoir une condition d‟arrêt à la
récurions sinon le programme ne se termine jamais.
def factorielleRecursiveBadJob(n):
return n*factorielleRecursiveBadJob(n-1)
92
Les sous-programmes en Python
Récursivité versus itération
def factorielleIterative(n):
resultat = 1
for i in range(2,n+1):
resultat *= i
return resultat
93
Les sous-programmes en Python
Récursivité versus itération
Intérêts de la récursivité :
◼ Technique de programmation très élégante et lisible (elle
évite souvent le recours à de nombreuses structures
itératives).
◼ Elle est très utile pour concevoir des algorithmes sur des
structures complexes.
def impair(n):
if n == 0:
return False
else:
return pair(n-1)
95
Les sous-programmes en Python
Récursivité multiple
Récursivité multiple : sous-programme récursif réalisant
plusieurs appels à lui même.
Exemple : calcul des coefficients binomiaux.
1 si k = 0 o u si k = n
n
= n−1 n−1
k + s in o n
k − 1 k
def coeffs(n,k):
if k == 0 or k == n:
return 1
else:
return coeffs(n-1,k-1) + coeffs(n-1,k)
96
Les sous-programmes en Python
Récursivité imbriquée
def f91(n):
if n > 100:
return n-10
else:
return f91(f91(n+11))
97
Les sous-programmes en Python
Exercice
Ecrire de deux façons (itérative et récursive) une fonction
ayant pour paramètres un réel x et un entier n, et retournant
la valeur de x puissance n.
Solution : version itérative
def puissanceIterative(x,n):
resultat = 1
for i in range(1,n+1):
resultat *= x
return resultat
Exercice
Exemples :
f = lambda x, i : x**i
f(2, 5) = 32
if x>y: print(mx(10,7))
return x
else:
return y 10
print(mx(10,7))
101
Structures de données et leurs utilisations
Notion de séquence
▪ Motivation :
• Réunir au sein d‟une même variable plusieurs valeurs différentes.
•L‟objectif étant d‟optimiser certaines opérations comme la
recherche d‟un élément, le tri de ces valeurs, le calcul de leur
maximum, etc.
▪ Définition :
• Suite d‟éléments accessibles par leur position.
•Chaque élément, à part le premier, a un prédécesseur et, à part le
dernier, a un successeur.
▪ Une séquence de n éléments :
Indexation des éléments
à partir du début
0 1 2 n-2 n-1
Indexation des
-n -(n – 1) -(n – 2) -2 -1 éléments à
partir de la fin
102
Structures de données et leurs utilisations
Notion de séquence
Accès a un élément :
◼L‟accès à un élément d‟une séquence se fait en utilisant la position de
cet élément et des crochets [ ].
maSéquence[maPositionVoulue]
103
Structures de données et leurs utilisations
Les listes
Une liste est une structure de données qui contient une série de
valeurs. Python autorise la construction de liste contenant des valeurs
de type différent.
Exemples
>>> animaux = ['girafe','tigre','singe','souris']
>>> mixte = ['girafe', 5, 'souris', 0.15]
>>> animaux
['girafe', 'tigre', 'singe', 'souris']
>>> mixte
['girafe', 5, 'souris', 0.15]
104
Structures de données et leurs utilisations
Les listes
Création:
x = [ ] # crée une liste vide
x = list() # crée une liste vide
x = [4,5] # création d’une liste composée de
deux entiers
x = ["un",1,"deux",2] # création d’une liste composée de
2 chaînes de caractères et de
deux entiers, l’ordre d’écriture
est important
Exemple:
>>> maListe = [2, -3, ['xox', 69], 11]
>>> print(maListe) → [2, -3, ['xox', 69], 11]
>>> print(maListe[-1]) → 11
>>> maListe[1] = 666
>>> print(maListe[1]) → 666
>>> print(maListe[2][0][1]) → o
105
Structures de données et leurs utilisations
Les listes
0 1 2 3
2 -3 [‘xox’, 69] 11
-4 -3 -2 -1
0 1
‘xox’ 69
-2 0 1 2
-1
x o x
-3 -2 -1
106
Structures de données et leurs utilisations
Les listes
y = [ i for i in x if i % 2 == 0]
Print(y)
[0,2,4]
Exemple 2:
>>> t = [7, -3, 2]
>>> 11 not in t
True
>>> tt = 2*t
>>> print(tt)
[7, -3, 2, 7, -3, 2]
>>> tt.count(-3)
2 109
Structures de données et leurs utilisations
Les listes
Méthodes permettant de modifier une liste :
Opération Résultat
s[i] = x Remplacement de l‟élément s[i] par x
s[i:j] = t Remplacement des éléments de s[i:j] par ceux de la séquence t
del(s[i:j]) Suppression des éléments de s[i:j]
s[i:j:k] = t Remplacement des éléments de s[i:j:k] par ceux de la séquence
t
del(s[i:j:k]) Suppression des éléments de s[i:j:k]
Exemple:
>>> maListe = [1, 2, 3, 4, 5]
>>> maListe[2:4] = (6,'x',7)
>>> print(maListe)
[1, 2, 6, 'x', 7, 5]
>>> maListe[1:6:2] = 'sup'
>>> print(maListe)
[1, 's', 6, 'u', 7, 'p']
110
Structures de données et leurs utilisations
Les listes
Méthodes permettant de modifier une liste :
Opération Résultat
111
Structures de données et leurs utilisations
Les listes
Exemple 1:
>>> maListe = [1, 3, 5]
>>> maListe.append(7)
>>> print(maListe)
[1, 3, 5, 7]
>>> maListe.extend((8, 11))
>>> print(maListe)
[1, 3, 5, 7, 8, 11]
>>> maListe.remove(8)
>>> print(maListe)
[1, 3, 5, 7, 11]
>>> maListe.insert(4,9)
>>> print(maListe)
[1, 3, 5, 7, 9, 11]
Exemple 2:
>>> maListe = list(range(1,10,2))
>>> maListe
[1, 3, 5, 7, 9]
>>> taListe = list('The Strypes')
>>> taListe
['T', 'h', 'e', ' ', 'S', 't', 'r', 'y', 'p', 'e', 's']
112
Structures de données et leurs utilisations
Les listes
Méthodes permettant de modifier une liste :
maListe = (-4, 5, 2, 4, 1)
print(nbPairs(maListe))
114
Structures de données et leurs utilisations
Le délicat problèmes des copies
Phénomène d’alias :
◼ La tentative de copie une liste avec la syntaxe naturelle
ne crée qu‟un alias. maListe2 = maListe1
116
Structures de données et leurs utilisations
Le délicat problèmes des copies
117
Structures de données et leurs utilisations
Le délicat problèmes des copies
Solution pour réaliser une copie superficielle
▪ Elle est utilisée lorsqu‟on a besoin de manipuler le
premier niveau ou que l'on veux que les niveaux inférieurs
restent synchrones.
▪ Il existe plusieurs méthodes pour réaliser une copie
superficielle.
maListe2 = maListe1.copy()
import copy
maListe2 = copy.copy(maListe1)
maListe2 = list(maListe1)
maListe2 = []
maListe2.extend(maListe1)
maListe2 = maListe1[:]
118
Structures de données et leurs utilisations
Le délicat problèmes des copies
119
Structures de données et leurs utilisations
Le délicat problèmes des copies
Exemple d’une copie “qui marche” :
120
Structures de données et leurs utilisations
Le délicat problèmes des copies
Exemple d’une copie “qui marche” :
>>> lst1 = ['a','b',['ab','ba']]
>>> lst2 = lst1[:]
>>> lst2[0] = 'c‘
>>> lst2[2][1] = 'd'
>>> print(lst1)
['a', 'b', ['ab', 'd']]
121
Structures de données et leurs utilisations
Le délicat problèmes des copies
Solution pour réaliser une copie profonde :
Tout est copié récursivement, il n'y a pas de référence vers des
objets commun entre la source et la destination.
import copy
maListe2 = copy.deepcopy(maListe1)
123
Structures de données et leurs utilisations
Les listes multidimensionnelles
maListe[i1][i2]...[iN]
124
Structures de données et leurs utilisations
Les listes multidimensionnelles
plateau = [[0]*3]*4
print(plateau)
plateau[3][2] = 666
print(plateau)
125
Structures de données et leurs utilisations
Les listes multidimensionnelles
126
Structures de données et leurs utilisations
Les listes multidimensionnelles
127
Structures de données et leurs utilisations
Diviser pour régner
Principe
Trois étapes :
①Diviser : on divise les données initiales en plusieurs sous-parties.
128
Structures de données et leurs utilisations
Diviser pour régner
Ex. 1 : calcul du maximum d’une liste.
◼ Problème : calculer le maximum d‟une liste de nombres
◼ Résolution :
① Diviser la liste en deux sous-listes en la “coupant” par la moitié.
② Rechercher le maximum de chacune de ces sous-listes.
③ Comparer les résultats obtenus.
def maximum(l,d,f):
if d == f:
return l[d]
m = (d+f) // 2
x = maximum(l,d,m)
y = maximum(l,m+1,f)
return x if x > y else y
maListe = [38,-3, 2, 1, 7]
print(maximum(maListe,0,4))
129
Structures de données et leurs utilisations
Diviser pour régner
Ex. 2 : recherche d’un élément.
◼ Problème : rechercher la présence d‟un élement dans une liste.
◼ Résolution :
① Diviser la liste en deux sous-listes en la “coupant” par la moitié.
② Rechercher la présence de l‟élément dans chacune de ces sous-
listes.
③ Combiner les résultats obtenus.
def recherche(l,x,d,f):
if d == f:
return l[d] == x
m = (d+f) // 2
return recherche(l,x,d,m) or
recherche(l,x,m+1,f)
maListe = [38,-3, 2, 1, 7]
print(recherche(maListe,7,0,4))
130
Structures de données et leurs utilisations
Diviser pour régner
Ex. 2 : recherche d’un élément.
◼ Problème : rechercher la présence d‟un élement dans une liste triée.
◼ Idée : adopter une méthode dichotomique.
◼ La liste étant triée, il est facile de voir dans quelle moitié peut
éventuellement se trouver l‟élément cherché.
◼ Idée (suite) : quand on cherche un élément dans une liste triée, après
comparaison avec l‟élément du mileu il est facile de voir dans quelle
moitié continuer la recherche.
-5 -1 0 3 4 10 666
132
Structures de données et leurs utilisations
Diviser pour régner
Ex. 2 : recherche d’un élément.
Solution :
def dicho(l,x,d,f):
if d > f:
return False
else:
m = (d+f) // 2
if l[m] == x:
return True
else:
if x < l[m]:
return dicho(l,x,d,m-1)
else:
return dicho(l,x,m+1,f)
133
Structures de données et leurs utilisations
Diviser pour régner
Ex. 2 : recherche d’un élément.
def dicho2(l,x):
if len(l) == 0:
return False
else:
m = (len(l)-1) // 2
if l[m] == x:
return True
else:
if x < l[m]:
return dicho2(l[:m],x)
else:
return dicho2(l[m+1:],x)
134
Structures de données et leurs utilisations
Algorithmes de tri
Tri par sélection
Principe : Cette méthode peut se traduire par l‟algorithme formel suivant :
1 Comparer tous les nombres afin de sélectionner le plus petit (ordre
croissant),
2 Échanger le plus petit élément trouvé avec le premier élément,
3 Refaire les étapes 1 et 2 et rechercher le plus petit du tableau sauf le
premier puis l‟échanger avec le second.
def tri_selection(l):
n = len(l)
for i in range(n-1):
k=i
for j in range(i+1,n):
if l[j] < l[k]:
k = j
if i!=k:
tmp = L[i]
L[i] = L[k]
L[k] = tmp
>> L=[1,2,8,4,6,3,-5,-7,18]
>> tri_selection(L)
>> print(L) [-7, -5, 1, 2, 3, 4, 6, 8, 18]
135
Structures de données et leurs utilisations
Algorithmes de tri
Tri par insertion
Principe : C‟est une méthode de tri qui consiste à prendre les éléments du
tableau un par un puis d’insérer chacun à sa bonne palace façon que les
éléments traités forment une liste triée.
Cette méthode peut se traduire par l‟algorithme formel suivant :
1- On commence par le deuxième élément,
2 Comparer l‟élément choisis avec tous ses précédents dans le tableau et
l’insérer dans sa bonne place,
3 Répéter l‟étape 2 pour l’élément suivant jusqu‟à arriver au dernier.
def tri_Inserson(l) :
n = len(l)
for i in range(1,n) :
j=i
T=l[i]
while(j>0 and l[j-1]>T):
l[j]=l[j-1]
j=j-1
l[j]=T
136
Structures de données et leurs utilisations
Algorithmes de tri
Tri bulle
Principe : Le tri bulle, consistant à comparer, en commençant par la fin de la
liste, les couples d‟éléments successifs : Lorsque deux éléments successifs ne
sont pas dans l‟ordre croissant, ils sont échangés. On fait ainsi remonter le
terme le plus petit (de même que les bulles les plus légères remontent le plus
vite à la surface ...). D‟où le nom donné à ce tri. Puis on itère le procédé sur le
sous-tableau restant :
def triBulle(l) :
n=len(l)
for i in range(n-1) :
for j in range(n-1,i,-1) :
if l[j-1]>l[j]:
T=l[j]
l[j] = l[j-1]
l[j-1] = T
137
Structures de données et leurs utilisations
Les tableaux multi dimensionnels
Pour travailler avec les tableaux de données multidimensionnels on
utilise le module numpy. C‟est un module utilisé dans presque tous les
projets de calcul numérique sous Python. Il fournit des structures de
données performantes pour la manipulation de vecteurs et matrices.
import numpy as np
On pourrait aussi faire :
from numpy import *
Dans la terminologie numpy, les vecteurs et les matrices sont appelés
arrays.
Avec la première importation, on peut utiliser les fonctions du module
numpy de la manière suivante :
np.nom_fonction(…)
138
Structures de données et leurs utilisations
Les tableaux multi dimensionnels
▪ Création des tableaux
• Au moyen de la fonction numpy.array
V = np.array([1,2,3,4])
Matrice M 4×3
M = np.array([[16,2,3],[0,8,3],[1,72,83],[1,3,3]])
Remarques
• Dans ce cas, Les tableaux V et M sont tous deux du type ndarray
(fourni par numpy)
• On peut définir le type de manière explicite en utilisant le mot clé
dtype en argument:
M = np.array([[1, 2], [3, 4]], dtype=complex)
• Autres types possibles avec dtype : int, float, complex, bool, etc.
139
Structures de données et leurs utilisations
Les tableaux multi dimensionnels
▪ Création des tableaux
• Au moyen de la fonction numpy.arange
On peut créer un vecteur à l‟aide de la fonction arange, c‟est une
fonction similaire à la fonction range de Python :
np.arange(M,N,P) : tableau contenant les éléments de M à N avec
pas P (M et P sont optionnels. Dans ce cas les valeurs par défaut
sont M=0 et P=1)
a = np.arange(10) a = np.array([0, 1, 2, 3, 4, 5, 6,
7, 8, 9])
dtype est optionnel dans toutes les créations de tableaux et fixé par
défaut à float
140
Structures de données et leurs utilisations
Les tableaux multi dimensionnels
▪ La méthode reshape
C‟est une méthode qui permet de redimensionner un tableau selon
les paramètres communiqués à cette méthode :
Exemple
A=np.empty(8,dtype='float') #A est à présent un vecteur
de 8 réels
A=A.reshape(4,2) #A devient maintenant une
matrice 4×2 de réels
for i in range(4):
for j in range(2):
A[i][j]=i*j
141
Structures de données et leurs utilisations
Les tableaux multi dimensionnels
▪ La méthode reshape
Autres possibilités:
np.zeros(N) : tableau de N zéros.
np.ones((N,M)) : tableau de dimension (N,M) de uns (matrice).
np.zeros_like(a) : tableau de zéros de même dimension et type que le
tableau a.
np.ones_like(a) : tableau de uns de même dimension et type que le
tableau a.
np. empty _like(a) : tableau vide de même dimension et type que le
tableau a.
np.linspace(a,b,N) : tableau contenant N éléments uniformément répartis
de a à b. (a et b sont compris)
b=a.copy() : copie d'un tableau a dans un tableau b
Rem : b=a ne copie pas les éléments, mais crée juste une référence, i.e.
si a est modifié b l'est aussi.
142
Structures de données et leurs utilisations
Les t-uples
Les t-uples correspondent aux listes à la différence qu‟ils sont non
modifiables. Pratiquement, ils utilisent les parenthèses au lieu des
crochets :
▪ Syntaxes de la déclaration de t-uples :
monTupleVide = ()
monTupleAvecUnSeulElement = (élément,)
monTuple = (élément1,élément2,...,élémentN)
▪ Exemple de création/manipulation de t-uples :
>>> monTuple = (2.718, 3.14, 1.414)
>>> print(monTuple)
(2.718, 3.14, 1.414)
>>> print(monTuple[2])
1.414
>>> monTuple[2] = 1.732
Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: 'tuple' object does not support item
assignment 143
Structures de données et leurs utilisations
Les t-uples
L‟affectation et l‟indixage fonctionne comme avec les listes, mais si l‟on essaie
de modifier un des éléments du t-uple, Python renvoie un message d‟erreur. Si
nous voulons ajouter un élément (ou le modifier), nous devons créer un autre
t-uple : >>> x = (1,2,3)
>>>print( x + (2,)) #concaténation
(1, 2, 3, 2)
Remarque : Pour utiliser un t-uple d‟un seul élément, nous devons utiliser une
syntaxe avec une virgule (element,), ceci pour éviter une ambiguïté avec une
simple expression.
Autre particularité des t-uples, il est possible d‟en créer de nouveaux sans les
parenthèses.
Une fonction peut retournée plusieurs valeurs sous forme de t-uple.
>>> x = (1,2,3) >>> def f(x):
>>> print(x) return x,x**2
(1, 2, 3) >>> f(3)
>>> x = 1,2,3 (3,9)
>>> print(x)
(1, 2, 3) 144
Structures de données et leurs utilisations
Parcours d’une séquence avec “for”.
Itération sur les éléments :
for x in maSéquence:
traitement de l’élemént x
Exemple:
l = [-2, 3, 11] 4
for x in l: 9
121
print(x**2)
Exemple:
l = (-2, 3, 11) élément n° 1 : 4
for i, x in enumerate(l): élément n° 2: 9
élément n° 3: 121
print("élément n°",i+1,":",x**2)
145
Structures de données et leurs utilisations
Parcours d’une séquence avec “for”.
Itération sur les indices :
for i in range(len(maSéquence)):
traitement de l’élément maSéquence[i]
et/ou de l’indice i
Exemple: élément n° 1 : 4
l = (-2, 3, 11) élément n° 2: 9
for i in range(len(l)): élément n° 3: 121
print("élément n°",i+1,":",l[i]**2)
Itération sur deux séquences :
for x,y in zip(maSéquence1,maSéquence2):
traitement des éléments x et y
147
Structures de données et leurs utilisations
▪ Exemples
▪ Concaténation
>>> s = 'i vaut'
>>> i = 1
>>> print s + i
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int'
objects
>>> print s + " %d %s"%(i, "m.")
i vaut 1 m.
>>> print s + ' ' + str(i)
i vaut 1
▪ Répétition
>>> print '*-'*5
*-*-*-*-*-
148
Structures de données et leurs utilisations
• Les fonctions
Exemple :
>>> ch1 = "abc"
>>> long =
len(ch1)
3
149
Structures de données et leurs utilisations
Exemple 1
Dans le cas des sous-chaînes, la valeur fournie est une copie et non un
accès à une partie de la chaîne d‟origine.
>>> x = ’hello enlever le deuxième remplacer le Enfin, un index
world!’ ’l’ deuxième ’l’ par négatif précise que
>>> x[4] >>> x= "hello!" P le calcul s’effectue
’o’ >>> x[:3]+x[4:] >>> x= depuis la fin de la
>>> x[2:4] ’helo!’ "hello!" chaîne.
’ll’ insérer un Z entre >>> >>> x[-3:]
>>> x[3:] les deux l ’l’ x[:3]+"P"+x[4:] ’lo!’
’lo world!’ >>> x= "hello!" ’helPo!’ >>> x[1:-1]
>>> x[:] >>> x[:3]+"Z"+x[3:] ’ello’
’hello world!’ ’helZlo!’
153
Structures de données et leurs utilisations
Les ensembles
154
Structures de données et leurs utilisations
Les ensembles
Syntaxe de la déclaration d’un ensemble “set” :
monSetVide = set()
monSet = {élément1,élément2,...,élémentN}
monSet = set(séquence)
monFrozenSetVide = frozenset()
monFrozenSet = frozenset(séquence)
Exemple :
>>> s = frozenset('barbara')
>>> s
frozenset({'r', 'b', 'a'})
>>> s = frozenset([1, 5, 666])
>>> s
frozenset({1, 666, 5})
>>> s.add(3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'frozenset' object has no attribute 'add'
>>> s = frozenset({5, 12, 777})
>>> s
frozenset({777, 12, 5})
156
Structures de données et leurs utilisations
Les ensembles
Opérations communes:
157
Structures de données et leurs utilisations
Les ensembles
Opérations d’appartenance :
Opération Résultat
x in s Teste si x appartient à s
x not in s Teste si x n‟appartient pas à s
len(s) Nombre d‟éléments de s
s.isdisjoint(t) True si l‟intersection de s et t est vide
s.issubset(t) True si s est inclus dans t
s <= t
s.issuperset(t) True si t est inclus dans s
s >= t
Exemple:
>>> s = {1, 3, 5, 7, 9}
>>> s.isdisjoint([2, 4, 6, 9]) → False
>>> s.isdisjoint({2, 4, 6, 8}) → True
>>> s.issubset(range(10)) → True
>>> s.issuperset(range(1, 6, 2))→ True
158
Structures de données et leurs utilisations
Les ensembles
Opérations classiques sur les ensembles :
Opération Résultat
s.union(t) Union de s et t
s|t
s.intersection(t) Intersection de s et t
s&t
s.difference(t) Difference de s par t
s-t
s.symmetric_difference(t) Différence symétrique de s et t
s^t
>>> s = {1, 3, 5, 7, 9}
>>> t = frozenset({2, 4, 6, 8})
Exemple: >>> u = s | t
>>> u
{1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> u.symmetric_difference(range(6,16))
{1, 2, 3, 4, 5, 10, 11, 12, 13, 14, 15}
>>> u.difference(range(3),[5, 6],'e')
{3, 4, 7, 8, 9} 159
Structures de données et leurs utilisations
Les ensembles
Itération sur les éléments.
▪ Il est tout à fait possible d‟itérer sur les éléments d‟un “set” ou d‟un
“frozenset”.
▪ Leurs éléments n‟étant pas mémorisés de façon séquentielle, l‟ordre
de parcours sera par contre indéfini et imprévisible.
Exemple:
>>> s = {1, 3, 5, 7, 9}
>>> for x in s:
... print(x**2)
...
81
9
1
25
49
160
Structures de données et leurs utilisations
Les ensembles
Opérations de mise à jour d’un ensemble :
Opération Résultat
s.update(t) s mis à jour vers
s |= t l‟union de s et t
s.intersection_update(t) s mis à jour vers
s &= t l‟intersection de s et t
s.difference_update(t) s mis à jour vers
s -= t la difference de s par t
s.symmetric_difference_update (t) s mis à jour vers
s ^= t la différence symétrique de s et t
>>> s = set('barbara')
>>> s >>> s=set({1,5,8,9})
{'r', 'b', 'a'} >>> t=set({8,7,1,6,3})
>>> s.update('boris') >>> s.difference_update(t)
>>> s >>> s
{'o', 'i', 'b', 'a', 'r', 's'} {5, 9}
>>> s.intersection_update('brio')
>>> s
{'o', 'r', 'b', 'i'}
161
Structures de données et leurs utilisations
Les ensembles
Opérations d’ajouts et de suppressions d’éléments :
Opération Résultat
s.add(x) Ajoute l‟élément x à s
s.remove(x) Supprime l‟élément x de s, retourne une erreur s‟il est
absent
s.discard(x) Supprime l‟élément x de s s‟il est présent, ne retourne
rien s‟il est absent
s.pop() Supprime et retourne un élément de s quelconque
s.clear() Supprime tous les éléments de s
>>> s = set()
>>> s.add(666)
>>> s.add('VL')
>>> s.remove(777)
Exemple: Traceback (most recent call last):
File "<console>", line 1, in <module>
KeyError: 777
>>> s.discard(777)
>>> s.pop()
666
>>> s
{'VL'} 162
Structures de données et leurs utilisations
Les dictionnaires
Présentation
▪Un autre type de donnée très utile, natif dans Python, est le
dictionnaire.
▪À la différence des séquences, qui sont indexées par des nombres, les
dictionnaires sont indexés par des clés, qui peuvent être de n'importe
quel type immuable ; les chaînes de caractères et les nombres peuvent
toujours être des clés.
163
Structures de données et leurs utilisations
Les dictionnaires
Principe
▪Un dictionnaire est une structure de données non séquentielle,
muable, permettant de mémoriser des couples clé : valeur.
▪Les clés doivent nécessairement être d‟un type immuable (int, str, t-
uple,etc.) et sont toutes différentes.
▪Les données ne sont pas stockées en mémoire les unes à la suite des
autres. Cette structure de données n‟est donc pas séquentielle.
164
Structures de données et leurs utilisations
Les dictionnaires
Principe
0 1 2 n-2 n-1
-n -(n – 1) -(n – 2) -2 -1
165
Structures de données et leurs utilisations
Les dictionnaires
Syntaxe de la déclaration d’undictionnaire :
monDicoVide = dict()
monDicoVide = {}
monDico = {clé1:val,clé2:val,...,cléN,val}
monDico = dict([(clé1,val),...,(cléN,val)])
monDico = dict(((clé1,val),...,(cléN,val)))
monDico = dict(zip([clé1,...,cléN],[val,...,val]))
Ali Ahmed
73 Mohamed 71
71
167
Structures de données et leurs utilisations
Les dictionnaires
Exemple 2 :
>>> rs =
dict([('Mick',71),('Keith',71),('Charlie',73)])
>>> rs
{'Mick': 71, 'Keith': 71, 'Charlie': 73}
>>> b =
dict(zip(['John','Paul','Ringo'],[40,72,74]))
>>> b
{'Paul': 72, 'Ringo': 74, 'John': 40}
168
Structures de données et leurs utilisations
Les dictionnaires
Opérations sur les dictionnaires (1):
Opération Résultat
x in d Teste si la clé x appartient à d
x not in d Teste si la clé x n‟appartient pas à d
len(d) Nombre d‟éléments de d
d[x] Si x est une clé, retourne d[x] sinon renvoie
une erreur
del d[x] Si x est une clé, supprime d[x] sinon renvoie
une erreur
d.clear() Supprime tous les éléments de d
d.update(e) Met à jour d avec e
169
Structures de données et leurs utilisations
Les dictionnaires
Exemples :
>>> rs = dict([('Mick',71),('Keith',71)])
>>> rs.update({'Charlie':73,'Ron':67})
>>> rs
{'Ron': 67, 'Mick': 71, 'Keith': 71, 'Charlie': 73}
>>> rs['Keith']
71
>>> del rs['Ron']
>>> rs
{'Mick': 71, 'Keith': 71, 'Charlie': 73}
170
Structures de données et leurs utilisations
Les dictionnaires
Opérations sur les dictionnaires (2):
Opération Résultat
d.get(x) si x est une clé retourne d[x] sinon None
d.get(x,y) si x est une clé retourne d[x] sinon y
Exemples :
>>> rs = {'Mick': 71, 'Keith': 71, 'Charlie': 73}
>>> rs.get('Mick')
71
>>> rs.get('Ron',"Pas là")
'Pas là'
>>> rs.pop('Keith')
71
>>> rs.setdefault('Ron',67)
67
>>> rs
{'Ron': 67, 'Mick': 71, 'Charlie': 73}
172
Structures de données et leurs utilisations
Les dictionnaires
Itération sur les éléments.
173
Structures de données et leurs utilisations
Les dictionnaires
rs = {'mick':71,'Keith':71,'Charlie’:73,'Ron':67}
for nom in rs:
print(nom,end=' ')
rs = {'mick':71,'Keith':71,'Charlie’:73,'Ron':67}
for nom in rs.keys():
print(nom,end=' ')
174
Structures de données et leurs utilisations
Les dictionnaires
Exemple : itération sur les valeurs
rs = {'mick':71,'Keith':71,'Charlie':
73,'Ron':67}
total = 0
for age in rs.values():
total += age
print("âge cumulé :",total,'ans')
175
Structures de données et leurs utilisations
Les dictionnaires
Les méthodes keys() , values() et items()
•Les méthodes keys() et values() renvoient respectivement la liste
des clés et la liste des valeurs d‟un dictionnaire
>>> print(a.keys())
dict_keys(['nom', 'poids', 'taille'])
>>> print(a.values())
dict_values(['girafe', 1100, 5.0])
Exemple:
>>> rs =
{'mick':71,'Keith':71,'Charlie’:73,'Ron':67}
>>> c = rs.keys()
>>> list(c)
['mick', 'Charlie', 'Keith', 'Ron']
>>> del rs['Ron']
>>> list(c)
['mick', 'Charlie', 'Keith']
>>> tuple(rs.items())
(('mick', 71), ('Charlie', 73), ('Keith', 71))
177
Structures de données et leurs utilisations
Les Fichiers
Généralités
178
Structures de données et leurs utilisations
Les Fichiers
Ouverture d’un fichier
▪ Syntaxe de l’ouverture d’un fichier :
monFichier = open(‘NomDuFichier’,’mode’)
▪ Remarque :
•Par défaut on considère que le fichier est situé dans le même
répertoire que notre script.
• Dans le cas contraire, on devra préciser son emplacement, par
exemple avec un chemin absolu (du style C:\ … sous windows).
179
Structures de données et leurs utilisations
Les Fichiers
Ouverture d’un fichier
▪Trois modes d’ouverture possibles :
180
Structures de données et leurs utilisations
Les Fichiers
Fermeture d’un fichier
▪Syntaxe de la fermeture d’un fichier :
monFichier.close()
181
Structures de données et leurs utilisations
Les Fichiers
Lecture dans un fichier
▪Syntaxe pour lire l’intégralité d’un fichier :
monFichier.read()
▪Remarque :
•Si l‟on passe un paramètre entier à la fonction „read‟, on ne lira
alors que ce nombre précis de caractère.
•On sera alors positionné à cet endroit pour une lecture
ultérieure.
182
Structures de données et leurs utilisations
Les Fichiers
Lecture dans un fichier
▪Exemple: imaginons que nous ayons un fichier
texte nommé fich.txt dans notre répertoire courant.
183
Structures de données et leurs utilisations
Les Fichiers
Lecture dans un fichier
▪ Remarque :
•Si le fichier est volumineux lire l‟intégralité de celui-ci d‟un “seul
coup” peut provoquer des débordements de mémoire.
•Il sera préférable alors de passer un paramètre à la fonction “read”.
monFichier.readline()
monFichier.readlines()
184
Structures de données et leurs utilisations
Les Fichiers
Lecture dans un fichier
▪ Exemples:
>>> monFichier = open(‘fich.txt','r')
>>> ligne1 = monFichier.readline()
>>> print(ligne1)
les départements suivants:
>>> ligne2 = monFichier.readline()
>>> print(ligne2)
MI
185
Structures de données et leurs utilisations
Les Fichiers
Lecture dans un fichier
▪ Itération sur les lignes d’un fichier :
for maLigne in monFichier:
traitement de la ligne maLigne
186
Structures de données et leurs utilisations
Les Fichiers
Écriture dans un fichier.
▪Syntaxe pour écrire dans un fichier :
monFichier.write(‘le texte à écrire’)
187
Structures de données et leurs utilisations
Les Fichiers
Écriture dans un fichier.
monFichier = open(‘fich.txt','w')
monFichier.write(' Python est un langage de
programmation interprété’)
monFichier.close()
188
Les exceptions
Définition
▪ Les erreurs détectées durant l‟exécution sont appelées des
exceptions. Même si une instruction ou une expression est
syntaxiquement correcte, elle peut générer une erreur lors de son
exécution.
▪ Python lève donc des exceptions quand il trouve une erreur, soit
dans le code (une erreur de syntaxe, par exemple), soit dans
l'opération que vous lui demandez de faire.
190
Les exceptions
Forme minimale du bloc try
Exemple:
Dans cet exemple, on demande à l'utilisateur de saisir l'année et on
essaye de convertir l'année en un entier
annee = input()
try: # On essaye de convertir l'année en entier
annee = int(annee)
except:
print("Erreur lors de la conversion de l'année.")
191
Les exceptions
Forme plus complète
▪ la forme minimale est à éviter pour plusieurs raisons.
• D'abord, elle ne différencie pas les exceptions qui pourront être
levées dans le bloc try.
• Dans l'exemple précédent, on ne pense qu'à un type d'exceptions
susceptible d'être levé : le type ValueError.
▪ Autre exemple:
try:
resultat = numerateur / denominateur
except:
print("Une erreur est survenue... laquelle ?")
try:
# Bloc de test
except type_de_l_exception as exception_retournee:
print("Voici l'erreur :", exception_retournee)
194
Les exceptions
Les mots-clés else et finally
Ce sont deux mots-clés qui vont nous permettre de construire un
bloc try plus complet.
▪ Le mot-clé else
Dans un bloc try, else va permettre d'exécuter une action si aucune
erreur ne survient dans le bloc (c-à-d aucune exception n'a été lancée
dans le try).
try:
resultat = numerateur / denominateur
except NameError:
print("La variable numerateur ou denominateur n'a pas été
définie.")
except TypeError:
print("La variable numerateur ou denominateur possède un
type incompatible avec la division.")
except ZeroDivisionError:
print("La variable denominateur est égale à 0.")
else:
print("Le résultat obtenu est", resultat)
195
Les exceptions
Les mots-clés else et finally
▪ Le mot-clé finally
finally permet d'exécuter du code après un bloc try, quelle que soit le
résultat de l'exécution dudit bloc.
try:
# Test d'instruction(s)
except TypeDInstruction:
# Traitement en cas d'erreur
finally:
# Instruction(s) exécutée(s) qu'il y ait eu des erreurs ou non
Le bloc finally est exécuté dans tous les cas de figures. Quand bien
même Python trouverait une instruction return dans votre
bloc except par exemple, il exécutera le bloc finally.
196
Les exceptions
Les mots-clés else et finally
▪ Exemple:
def divide(x,y):
try:
result = x / y
except ZeroDivisionError:
print("division by zero!")
else:
print("result is", result)
finally:
print ("executing finally clause")
>>> divide(1,3)
result is 0.3333333333333333
executing finally clause
>>> divide(1,0)
division by zero!
executing finally clause
197
Les modules
Introduction
Définition :
▪ Un module est un fichier contenant des sous-programmes
regroupés de façon cohérente
▪ Le nom du fichier aura comme suffixe .py
Structure d’un projet:
Plusieurs modules de fonctions et un module particulier, dit “main”,
où l‟on définit les variables du projet et où l‟on utilise les fonctions
des différents modules.
198
Les modules
import …
import nomModule
▪ Importe tout le contenu du fichier nomModule.py
▪Pour faire référence à quelque chose dans le fichier il faut
ajouter le nom du module avant le nom de l'entité utilisée.
Exemple :
import fib
fib.fib(n)
fib.fib_rec(n)
print(fib.iter(n))
199
Les modules
from … import *
from nomModule import *
▪Tout le contenu du fichier nomModule.py est importé et chargé
en mémoire
▪Tout le module est dans le namespace courant, il est donc inutile
de faire préfixé toutes les entités présentes dans le fichier par le
nom du module
Exemple:
from fib import *
fib(n)
fib_rec(n)
200
Les modules
from … import …
from nomModule import item
▪ Seul l'élément item est importé du fichier nomModule.py.
▪Comme dans le cas précédent il n'est pas nécessaire de faire
préfixer le nom de cet item par le nom du module
▪ Attention à l'écrasement d'une entité de même nom déjà
▪présente dans le namespace courant.
Exemple :
from fib import fib
fib(n)
201
Les modules
Exemple
# le module exemple
def doubler(x):
return 2*x
def tripler(x):
return 3*x
import exemple
print(exemple.tripler(12))
202
Les modules
Liste non exhaustive de modules (librairies) Python
Exemple
d‟utilisation de
matplotlib.pyplot
207
Les modules
Le module matplotlib.pyplot pour tracer des courbes
x=np.linspace(-5,5,100)
y1=np.sin(x)
y2=np.cos(x)
plt.grid(True) #Affichage de la grille
plt.plot(x,y1,'b',x,y2,'g+') #tracer les courbes
plt.legend(("Sinus", "Cosinus"))#afficher la légende
plt.xlabel('axe dex x') #étiquette sue l'axe des x
plt.ylabel('axe dex y') #étiquette sue l'axe des y
plt.axis('equal') #choix d'échelle
plt.title("Fonctions trigonométriques") #titre
plt.savefig('Premier exemple') #on sauvegarde l'image
plt.show() #on montre le résultat
208
Les modules
Le module matplotlib.pyplot pour tracer des courbes
209
Les modules
Le module matplotlib.pyplot pour tracer des courbes
❖ Tables des Styles de traçage
❖ Table des couleurs
Caractère de Description
traçage Caractère Couleur
'1' Tri_Down marker ‘b’ blue
'2' Tri_up marker ‘g’ green
'3' Tri_left marker ‘r’ red
'4' Tri_right marker ‘c’ cyan
'H' Hexagon2 marker ‘m’ magenta
'+' Plus marker ‘y’ yellow
'x' X marker ‘k’ black
'D' Diamond marker ‘w’ white
'd' Thin_diamond marker
'|' Vline marker
'_' Hline marker
'*' Star marker
'h' Hexagon1 marker
210
Bases de données SQLITE en Python
Introduction
▪ Parmi les SGBD, nous pouvons trouver SQLite qui utilise un sous-
ensemble de SQL. Sa légèreté et le fait que les données se trouvent
sur le terminal du client et non sur un serveur distant.
❖ Connexion
▪ Cela fait, nous pouvons nous connecter à une BDD en utilisant la
méthode connect et en lui passant l‟emplacement du fichier de
stockage en paramètre. Si ce dernier n‟existe pas, il est alors crée:
conn = sqlite3.connect("ma_base.sqlite")
❖ Déconnexion
▪ Que nous soyons connectés avec la RAM ou non, il ne faut pas
oublier de nous déconnecter. Pour cela, il nous suffit de faire appel à
la méthode close de notre objet Connection
conn.close()
SQLite Python
NULL None
INTEGER int
REAL float
TEXT str par défaut
BLOB bytes
213
Bases de données SQLITE en Python
Exécution des requêtes
▪ Pour exécuter nos requêtes, nous allons nous servir d‟un objet
Cursor, récupéré en faisant appel à la méthode cursor de notre objet
de type Connection.
curseur = conn.cursor() #Récupération d'un curseur
218
Quelques librairies Python utilisées pour l’IA et le ML