Académique Documents
Professionnel Documents
Culture Documents
Algorithmique et Programmation en
Python II
Dr Sibiri TIEMOUNOU
1
Plan du cours
2. Modularité en Python
5. Récursivité
2
09/06/2021
Sommaire
Objectifs de ce cours
Evaluation
Rapport de TP
Mini projet (en Python)
3
1. Retour sur les structures de données et fonctions
4
09/06/2021
1.1 Retour sur les structures de données
Rappel
Un objet est une variable, pouvant elle-même contenir d’autres variables et fonctions
Les tuples sont comme des liste, sauf qu'on utilise comme délimiteur des parenthèses au
lieu des crochets
Ce sont des listes immuables, i.e. qu’on ne peut modifier
Ils sont très utiles lorsqu’une fonction doit renvoyer plusieurs variables
Exemple:
tuple_vide = ()
tuple_non_vide = (1,)
tuple_non_vide = (1, 3, 5) 5
1.1 Retour sur les structures de données
Rappel
Les dictionnaires
6
1.2 Les chaines de caractères (Python)
En python, les chaines de caractères sont gérés par un objet (ou classe) appelé « str »
Prenons un exemple:
Ecrire une fonction prenant en paramètre un chaine de caractère et renvoyant cette
chaîne en minuscule
On s’attendrait à un code de la sorte :
C’est tout là, l’importance des objets : l’objet « str » contient des méthodes prédéfinies
permettant de manipuler les chaines de caractères.
8
1.2 Les chaines de caractères (Python)
Méthode « format(…) »
>>> prenom = "Paul"
>>> nom = "Dupont"
>>> age = 21
>>> print( "Je m'appelle {0} {1} et j'ai {2} ans.".format(prenom, nom, age) )
Je m'appelle Paul Dupont et j'ai 21 ans.
La méthode « format » prend en paramètres les variables à afficher, dans un ordre bien précis ;
quand Python exécute cette méthode, il remplace dans notre chaîne {0} par la première variable
passée à la méthode format (soit le prénom), {1} par la deuxième variable… et ainsi de suite.
10
1.2 Les chaines de caractères (Python)
Exemple
11
1.2 Les chaines de caractères (Python)
Exemple
>>> age = 21
>>> message = "J'ai " + age + " ans."
>>> age = 21
>>> message = "J'ai " + str(age) + " ans."
>>> print(message)
J'ai 21 ans.
>>> 12
1.2 Les chaines de caractères (Python)
ma_chaine[indice_debut : indice_fin]
Exemple
>>> presentation = "salut"
>>> presentation[0:2] # On sélectionne les deux premières lettres
'sa'
>>> presentation[2:len(presentation)] # On sélectionne la chaîne sauf les deux premières lettres
'lut‘
13
1.2 Les chaines de caractères (Python)
Exemple
14
1.3 Les dictionnaires
Chaque élément d’une liste est rangé dans un ordre bien précis
Pour accéder à un élément, on passe toujours par son indice (entier naturel)
Il existe une autre structure de données plus élaborée n’utilisant pas la notion d’indice mais
plutôt de clé
Les dictionnaires est l’une des structures de données les plus utilisées en Python
15
1.3 Les dictionnaires
Définition
Un dictionnaire est un objet pouvant en contenir d'autres, à l'instar des listes
Ces clés peuvent être des chaines de caractères (c’est le cas la plupart du temps) ou des objets
Dans les listes, la clé est l’indice de l’élément
Les données d’un dictionnaire ne sont pas ordonnées contrairement aux listes
16
1.3 Les dictionnaires
17
1.3 Les dictionnaires
>>> mon_dictionnaire = {}
>>> mon_dictionnaire["pseudo"] = "Prolixe"
>>> mon_dictionnaire["mot de passe"] = "*"
>>> mon_dictionnaire
{'mot de passe': '*', 'pseudo': 'Prolixe'}
>>>
Procédure
On spécifie la clé entre crochets
Si la clé n'existe pas dans le dictionnaire, elle y est ajoutée avec la valeur spécifiée
après le signe =
18
1.3 Les dictionnaires
Remarques
Un dictionnaire ne peut naturellement pas contenir deux clés identiques
La seconde valeur écrase la première
Les clés peuvent être de tout type (cependant le type doit être unique)
19
1.3 Les dictionnaires
echiquier = {}
echiquier['a', 1] = "tour blanche" # En bas à gauche de l'échiquier
echiquier['b', 1] = "cavalier blanc" # À droite de la tour
echiquier['c', 1] = "fou blanc" # À droite du cavalier
echiquier['d', 1] = "reine blanche" # À droite du fou
# ... Première ligne des blancs
echiquier['a', 2] = "pion blanc" # Devant la tour
echiquier['b', 2] = "pion blanc" # Devant le cavalier, à droite du
pion
# ... Seconde ligne des blancs
21
1.3 Les dictionnaires
Cette méthode supprime non seulement la clé mais aussi la valeur associée. Elle
retourne cette valeur.
22
1.3 Les dictionnaires
2 méthodes de parcours:
Parcours des clés
23
1.3 Les dictionnaires
Remarque :
L’ordre d’apparition des clés ne suit pas l’ordre de l’initialisation
24
1.3 Les dictionnaires
25
1.3 Les dictionnaires
Exemple
26
1.3 Les dictionnaires
Exemple
27
1.4 Retour sur les fonctions et procédures
Rappel
Les procédures et fonctions permettent de décomposer un programme complexe en
plusieurs parties plus simple et relativement indépendantes (aussi appelées sous-
programmes)
28
1.4 Retour sur les fonctions et procédures
Rappel
Déclaration d’une fonction (ou procédure) en Python
Exemple : Ecrire la fonction de Minac et Willans définit dans le TP2 sur les fonctions et
procédures du semestre I.
29
1.4 Retour sur les fonctions et procédures
Rappel
La définition d’une procédure et d’une fonction en Python est la même. Toutefois les
fonctions doivent obligatoirement retourner une ou plusieurs valeurs (avec l’instruction
« return »)
L’appel d’une fonction (ou d’une procédure) se fait en lui passant des expressions
correspondant aux paramètres dont elle a besoin.
Exemple :
Procédure Age (Donnees annee_naissance : entier)
Appel de la fonction
Variables :
entier age
Début : Age( 1901)
age 2020 – annee_naissance
afficher (‘vous avez ’, age, ‘ ans’)
FinProcedure
30
1.4 Retour sur les fonctions et procédures
En réalité, en Python (en particulier), il est possible de définir une fonction retournant
plusieurs valeurs (séparées par une virgule)
Définir une seule variable : dans ce cas, il s’agit d’un tuple. L’accès aux valeurs se fait
comme s’il s’agissait d’un tableau.
31
1.4 Retour sur les fonctions et procédures
32
1.4 Retour sur les fonctions et procédures
C’est le cas pour la majeure partie des fonctions et procédures de la librairie Python
Exemple
>>> afficherMax(45)
Le maximum de 45 et 10 est 45
>>> 33
1.4 Retour sur les fonctions et procédures
def table_par_7():
nb = 7 # variable locale
i = 0 # variable locale
while i < 10: # Tant que i est strictement inférieure à 10,
print(i + 1, "*", nb, "=", (i + 1) * nb)
i += 1 # On incrémente i de 1 à chaque tour de boucle.
Les variables formels : Il s’agit des variables d’entrées servant d’échanges entre les
programmes appelant et appelé
34
1.4 Retour sur les fonctions et procédures
a = 42
def change(valeur):
a = valeur
print(a) # Affiche `42`
change(10)
print(a) # Affiche ... `42` encore ? C'est universel ?
pour modifier la valeur d’une variable globale à l’intérieur d’une fonction, il suffit
d’utiliser le mot clé « global »
a = 42
def change(valeur):
global a
a = valeur
print(a) # Affiche `42`
change(10)
print(a) # Affiche `10` 35
2. Modularité en Python
09/06/2021
36
2.1 Généralités
On peut regrouper dans un module les fonctions traitant des problèmes de même nature ou
manipulant le même type d’objet
Dans ce chapitre, nous allons apprendre à utiliser les modules déjà existant en Python et d’en créer
2.2 Les modules standards de Python
Pour importer un module, il suffit d’utiliser le mot clé « import » suivi du nom du module
Exemple :
38
2.2 Les modules standards de Python
>>> help("math")
Help on built-in module math:
NAME
math
FILE
(built-in)
DESCRIPTION
This module is always available. It provides access to the
mathematical functions defined by the C standard.
FUNCTIONS
acos(...)
acos(x)
Return the arc cosine (measured in radians) of x.
acosh(...)
acosh(x)
Return the hyperbolic arc cosine (measured in radians) of x.
asin(...)
-- Suite --
39
2.2 Les modules standards de Python
#définition d'alias
import math as m, random as r
L’alias permet d’utiliser des noms
#utilisation de l'alias plus courts dans le programme.
r.seed(None) value
= r.random()
logv = m.log(value)
abslog = m.pow(logv,2.0)
41
3. Gestion des erreurs
09/06/2021
42
3.1 Introduction
43
3.1 Introduction
Erreurs d’implémentation
Le programme est syntaxiquement correct mais exécute une action interdite
Accès à la 10ème case d’un tableau de 8 éléments
Accès aux données d’un pointeur NULL
Racine carré d’un nombre négatif
44
3.2 Erreurs et exceptions
45
3.2 Erreurs et exceptions
46
3.2 Erreurs et exceptions
Try :
#code d’instructions
Except :
#code permettant de gérer
l’exception
Le bloc d’instructions qui suit directement une instruction « try » est exécuté par Python
sous réserve.
Si une erreur survient pendant l’exécution de l’une de ces instructions, alors Python annule
cette instruction fautive et exécute à sa place le code inclus dans le bloc qui suit
l’instruction « except »
Si aucune erreur ne s’est produite dans les instructions qui suivent try, alors tout va bien!
47
3.2 Erreurs et exceptions
49
3.2 Erreurs et exceptions
Exercices
Ecrire une fonction « sinc » qui prend en entrée un nombre x et renvoie la valeur sin(x)/x
si x # 0 et 1 sinon. Le programme doit gérer une exception. La fonction « sin » est
disponible dans le module math de Python.
50
4. Algorithmes de tri
09/06/2021
51
4.1 Introduction
Définition:
Un tableau T est dit « trié en ordre croissant » si tous les éléments consécutifs du tableau
vérifient :
D’où la définition:
52
4.2 Tri d’un tableau
Principe:
Soit un vecteur (tableau à une dimension) T[1..n] à valeurs dans un ensemble E de valeurs
muni d’une relation d’ordre notée <
T‘ soit trié,
Le plus souvent T et T‘ sont le même vecteur ; T‘ est construit en permutant entre eux les
éléments de T
Le tri à bulles 53
4.2 Tri d’un tableau
Principe :
54
4.2 Tri d’un tableau
55
4.2 Tri d’un tableau
Pour chaque élément rangé dans le tableau Ttrié, il faut parcourir tout le tableau T et
non une partie du tableau T
56
4.2 Tri d’un tableau
Après l'étape i, tous les éléments entre la première et la ième position sont triés.
Il existe plusieurs méthode de tri par insertion selon le principe qui est utilisé pour
rechercher le rang de l’élément à insérer parmi les éléments du début de la liste déjà triés
57
4.2 Tri d’un tableau
58
4.2 Tri d’un tableau
Au ième passage, on sélectionne l’élément ayant la plus petite valeur parmi les positions i..n
et on l'échange avec T[i].
59
4.2 Tri d’un tableau
60
4.2 Tri d’un tableau
Tri à bulles
Le principe du tri à bulles (bubble sort) est de :
61
4.2 Tri d’un tableau
Tri à bulles
62
5. Récursivité
09/06/2021
63
5.1 Généralités
Définition
La récursivité est très souvent oubliée lors de l'apprentissage d'un langage de
programmation, non pas parce qu'elle est difficile à comprendre et à apprendre, mais parce
qu'elle est peu connue. Pourtant, celle-ci peut se révéler d'une extrême importance
• n! = 1 * 2 * 3 * 4 * … * n
o 2ème définition:
64
5.2 Cas pratique
Exemple
calcul du factoriel d’un nombre entier
65
5.2 Cas pratique
Définition
Dérouler cet algorithme pour factoriel(5)
66
5.3 Avantages et Inconvénients
Avantages
Elle permet de résoudre des problèmes, d'habitude irrésolvables avec l'utilisation de
simples boucles pour ou tant que.
elle permet, dans certains cas, un gain colossal de temps (cas des algorithmes de tri)
67
5.3 Avantages et Inconvénients
Avantages
Principe de l’algorithme de tri rapide:
On choisir un nombre de la liste au hasard, que l'on appelle nombre pivot, et auquel on compare
les autres valeurs de la liste.
Si la valeur comparée est inférieure au nombre pivot, on la place dans une liste que l'on nomme
"inferieure" sinon on la place dans une liste "superieur".
Une fois toutes les valeurs comparées, on obtient normalement 2 listes : la liste "inferieur"
contenant toutes les valeurs inférieurs au pivot et la liste "supérieur" contenant toutes celles
supérieures.
Il ne reste plus qu'à répéter cette méthode pour les 2 listes, jusqu'à ce que celles-ci ne
contiennent plus qu'une seule valeur
68
5.3 Avantages et Inconvénients
Avantages
Principe de l’algorithme de tri rapide:
Comparaison de performance
69
5.3 Avantages et Inconvénients
Inconvénients
Si les fonctions récursives sont très pratiques pour trier des données, ce n'est pas toujours
le cas dans d'autres programmes
70
6. Gestion de fichiers
09/06/2021
71
6.1. Introduction
Inconvénients
L’information n’y est conservée que sous réserve d’une alimentation électrique
permanente
Sinon perte totale des résultats obtenus
La mémoire n’est accessible que par l’ordinateur auquel elle appartient
La communication entre 2 machines suppose qu’à un moment donné, les données
soient représentées ailleurs qu’en mémoire
72
6.1. Introduction
Notion d’entrée/sortie
Mécanisme de sauvegarde (Machine Fichiers) et d’importation de données (Fichiers
Machine)
73
6.1. Introduction
Type de fichiers
Fichier texte
fichier contenant des caractères imprimables (et lisible) et des espaces organisés en
lignes successives, ces lignes étant séparées les unes des autres par un caractère spécial
non-imprimable appelé « marqueur de fin de ligne » (ou retour chariot « \n »)
74
6.1. Introduction
Type de fichiers
Fichier binaire
le contenu est – au moins en partie – inintelligible pour un lecteur humain, et qui ne
prend son sens que lorsqu’il est décodé par un logiciel spécifique
Par exemple, les fichiers contenant des images, des sons, des vidéos, etc. sont presque
toujours des fichiers binaires
75
6.1. Introduction
Type de fichiers
Fichier tabulé (Excel, CSV)
Ces fichiers sont similaires au fichier texte. A la différence que chaque élément d’une
ligne est soit
Tabulé : utilisation d’un caractère spécial « \t » (non visible)
Séparé par une virgule « , » ou un point virgule « ; » : il s’agit des fichier de
type CSV (Comma Separated Values)
L’extension de ces fichiers peut être « .xls », « .csv » et « .txt »
76
6.1. Introduction
le chemin relatif
Chemin à partir de là où l’on se trouve actuellement
Exemple : si on se trouve dans le dossier « C:\TP_Python » et que l'on souhaite
accéder au fichier « TP1.py », le chemin relatif menant à ce fichier sera tout
simplement fic.txt.
77
6.2. Lecture et écriture dans un fichier
Ouverture de fichier
Avant d’écrire ou de lire dans un fichier, il est nécessaire de l’ouvrir
Syntaxe:
Ouverture de fichier
Exemple
# coding: utf-8
fichier = open("data.txt", "r")
print fichier.read()
fichier.close()
Attention : pour ouvrir un fichier en mode lecture, ledit fichier doit exister. Sinon on
obtiendra le message d’erreur suivant :
fichier = open(‘data.txt','r')
IOError: [Errno 2] No such file or directory: ‘data.txt'
Remarque : il est tout à fait possible de combiner certains mode.
Exemple : Ouverture d’un fichier en lecture en mode binaire
# coding: utf-8
fichier = open("data.txt", "wb")
print fichier.read()
fichier.close()
79
6.2. Lecture et écriture dans un fichier
Fermeture de fichier
On utilise la fonction « close » de l’objet « fichier »
Exemple:
# coding: utf-8
fichier.close()
80
6.2. Lecture et écriture dans un fichier
Exemple :
>>> mon_fichier = open("fichier.txt", "r")
>>> contenu = mon_fichier.read()
>>> print(contenu)
C'est le contenu du fichier. Spectaculaire non ?
>>> mon_fichier.close()
>>>
Etant donné que le contenu est une chaine de caractères, on peut naturellement tout faire :
Conversion d’une partie ou l’intégralité du texte
Possibilité de parcourir le texte ligne par ligne et de les traiter
Le symbole « \n » traduit les sauts de lignes
…
81
6.2. Lecture et écriture dans un fichier
La méthode « readlines() » permet de lire toutes les lignes et les retourne sous forme de
liste
82
6.2. Lecture et écriture dans un fichier
Exemple:
83
6.2. Lecture et écriture dans un fichier
Remarque :
Pour manipuler le contenu d’un fichier, il doit être ouvert
Cependant il était déjà ouvert, ce qui peut engendrer des bugs
Une fois des opérations sont terminées sur un fichier, il faut TOUJOURS LE FERMER !!!
84
6.3. Enregistrement et restitution de variables diverses
>>> x = 52
>>> f.write(str(x))
>>> x = f.read()
>>> x = int(x)
85
6.3. Exercices d’application
Exercice 1 :
On souhaiterait enregistrer les notes des étudiants dans un fichier texte. Chaque ligne
correspond à une note. Ecrire un programme demandant à l’utilisateur de spécifier le
nombre d’étudiants puis de saisir leur note que l’on enregistrera dans une liste notée
« notes ». Ensuite créer un fichier portant le nom de « notes.txt » dans lequel vous devez
enregistrer les notes.
Exercice 2 :
On considère les notes qui ont été enregistrer dans l’exercice précédent. Ecrire un
programme qui lit le contenu du fichier puis les transfert dans une liste. Enfin on affichera
la meilleure et la pire note.
86
6.3. Exercices d’application
Exercice 3 :
Cette fois ci il s’agira d’enregistres les informations sur les étudiants. Pour chaque étudiant,
on aura les informations suivantes:
Le nom et prénom
L’age
Sa moyenne générale
87
Fin
2019/2020 L1/ESI 88