SlideShare une entreprise Scribd logo
[PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 1
Chapitre 3 : Programmation modulaire en Python
• Savoir écrire un programme modulaire
• Connaître l’effet de différentes variables (locales, globales), les fonctions
lambda etc
• Gérer les erreurs
Python offre un ensemble de fonctions prédéfinies. Au moment du démarrage de
l’interpréteur, ces fonctions se chargent comme la fonction abs() ou la fonction
len(). On distingue aussi d’autres fonctions qui se chargent au moment de
l’importation de modules (c’est le cas de sqrt du module math ou de polar du
module cmath). Dans ce chapitre, nous s’initions à la notion de fonctions en python.
1. Les fonctions en Python
a. Déclaration et appel de la fonction
Pourquoi développer une fonction ? Imaginons le cas suivant, où nous voudrions
calculer le factorielle 10 !
Dans le même programme, on veut aussi calculer 100 !
Dans l’exemple précédent, nous avons recopié le code, ce qui rend cette
procédure lourde et source de propagation d’erreurs. Donc la solution est de
factoriser le code -> Notion de fonction !
Une fonction est un bloc d’instructions qui possède un nom et qui reçoit un certain
nombre de paramètres et renvoie un résultat. En utilisant les fonctions, on évite la
répétition, on sépare les données des résultats, on rend le code réutilisable à travers
[PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 2
l’importation des fichiers de fonctions et on décompose les tâches complexes en
des tâches simples plus abordables
Pour déclarer la fonction, en Python, il suffit d’utiliser le mot-clé def :
• Le mot clé def sert à déclarer la fonction
• Il est suivi du nom de la fonction ainsi que de parenthèses contenant les
paramètres formels de cette dernière. Dans le cas où on a plusieurs
paramètres dans une fonction, on utilise les virgules pour les séparer. En cas
où il n’y a pas de paramètres, on laisse les parenthèses vides (on ouvre et on
ferme les parenthèses). On ne précise jamais le type des paramètres. Une
même fonction peut recevoir des paramètres de natures différentes entre
deux jeux d’appels grâce à la notion de typage dynamique= le type d’une
variable dépend de son contenu. La représentation de la fonction en
algorithme est la suivante :
• La chaîne de documentation est optionnelle mais fortement recommandée
• Le bloc d’instruction est obligatoire. L’instruction pass permet d’avoir un bloc
d’instruction vide (si on n’a pas encore désigné que fait notre fonction)
b. Le NoneType et les fonctions avec retour
On peut développer une fonction en Python qui retourne un résultat récupérable
par la fonction appelante. Le mot cle return permet d’arrêter l’exécution d’une
fonction et de renvoyer un résultat. Tous les types qu’on a vus en Python, peuvent
être utilisés comme retour. Quand la fonction ne contient pas le mot clé return,
Python retourne un objet vide ayant comme type NoneType. C’est un type réservé
pour exprimer le vide.
Prenons l’exemple suivant où la fonction ne retourne pas de résultat et testons le
type de retour obtenu :
[PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 3
Testons le cas où la fonction retourne un résultat :
Le mot clé return peut figurer dans plusieurs endroits au sein d’une fonction.
Exemple :
En Python, on peut retourner plus qu’un résultat. Ici, on recourt au tuple pour stocker
les valeurs retournées.
Au moment de l’appel, il faut prendre en considération la nature du résultat. Ainsi,
soit on utilise un objet qui stocke le tuple puis pour accéder aux résultats, on utilise les
indices respectifs, soit on effectue un appel basé sur le nombre de variables
retournées. Exemple :
c. Mode de passage des paramètres
Que se passe-t-il en mémoire au cours de l’appel d’une fonction ?
Au moment de l’appel de la fonction :
[PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 4
• des variables correspondant aux arguments sont créés en mémoire,
• les valeurs des arguments sont copiées dans les variables,
• à la fin de l’appel de la fonction, les variables sont détruites.
• à la fin de l’appel de la fonction, les arguments n’ont pas été modifiés.
• On appelle ce mode de passage : passage d’argument par valeur. Seule la
valeur de l’argument est transmise à la fonction, pas l’argument lui-même
Testons ce code !
Constatation ? C’est un passage différent que celui de valeur!
L’appel de fonction permet de substituer les paramètres formels par des paramètres
effectifs. Les modes de passages dépendent du type des données passés en
paramètres :
• Les types non mutables (int, float, str, complex, bool, tuple…) sont passés par
valeur
• Les types mutables (listes, ensembles, dictionnaires..) imitent le mode de
passage par variable (S ou ES en algorithmique)
Pour bien assimiler la notion de mode de passage, on se base sur l’évolution de la
valeur des identifiants. Testons les codes suivants et notez le résultat obtenu :
Manipulation 1 :
Le résultat :
[PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 5
Manipulation 2 :
Le résultat :
Revenons à notre exemple de factorielle. Fact et c sont deux variables locales. Une
variable locale est une variable déclarée dans le corps d’une fonction. Elle ne peut
pas être modifiée que dans le corps de la fonction dans laquelle elle a été déclarée.
Les variables locales sont créées au moment de l’appel de la fonction,
utilisées/modifiées pendant l’exécution de la fonction et détruite à la fin de l’appel.
Alors maintenant, c’est quoi une variable globale ? Dans le programme suivant, N a
été déclarée à l’extérieur de toute fonction, directement dans le programme
principal : c’est une variable globale.
Une variable globale peut-être lue et modifiée depuis n’importe quel endroit du
programme. Que se passe-t-il si une variable locale et une variable globale ont le
même nom ? Pour répondre à cette question, testez ce code :
[PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 6
La variable ________________________ est prioritaire !
d. Les fonctions Lambda
En Python, une fonction lambda est une fonction anonyme à laquelle on n’a pas
donné de nom et qu’on appliqué quand on veut. La syntaxe est : lambda
paramètres :expression.
Prenons un exemple. Ecrivons un script renvoyant la norme d’un vecteur du plan de
coordonnés (x,y).
Traduisons cette fonction en fonction lambda et ça devient : lambda
x,y :math .sqrt(x**2+y**2).
On peut affecter cette fonction lambda à une variable : f= lambda
x,y :math .sqrt(x**2+y**2). Ainsi, f peut être appelé même en tant que argument à
passer dans une autre fonction !
Prenons un exemple. Considérons f=lambda x :x**2+x+1. On peut appeler f dans une
fonction.
[PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 7
e. Paramètres avec valeurs par défaut-Paramètres positionnels
Une fonction peut être déclarée avec des paramètres ayant des valeurs de départ.
Si l’utilisateur omet l’un des paramètres au moment de l’appel, la valeur par défaut
sera prise en considération tel est le cas de la fonction construire_point qui affiche le
point (0,0) si l’utilisateur ne communique aucun paramètre.
En plus de donner des valeurs de départ aux paramètres, Python autorise d’appeler
la fonction sans trop respecter l’ordre des arguments au moment de la déclaration. Il
suffit d’utiliser le nom du paramètre au moment de l’appel et de préciser la valeur
qu’il prend :
f. Nombre de paramètres variable
Python permet de définir une fonction avec un nombre arbitraire de paramètres. Ce
paramètre est précédé par ‘*’ et est appelé généralement args ou params. Avec
ce genre de paramètres, on ne sait pas vraiment le nombre de paramètres au
moment de l’appel. L’appel de fonction est basé sur un tuple de valeurs :
[PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 8
g. La gestion des exceptions
Quand une erreur se produit dans un script, elle provoque l’arrêt du programme et
affiche un message d’erreur. Pour éviter cette interruption brutale, on peut appliquer
un traitement spécifique. Plus généralement, on peut traiter une situation
exceptionnelle dont on ne sait pas forcément où et quand elle va survenir à
l’intérieur d’un bloc donné. On emploie le terme exception pour désigner une erreur
et rattrape une exception levée en précisant le traitement à faire lorsqu’elle est
levée.
Pour traiter une erreur, Python propose, comme dans d’autres langages, l’emploi de
la clause « try…except » sous la forme suivante :
Cette forme est la plus simple. Le bloc 1 contient le code qui peut lever l’exception,
tandis que le bloc 2 contient le code à exécuter lorsqu’on a une exception levée
dans le bloc 1. Si tout va bien dans le bloc 1, le bloc 2 ne sera pas exécuté. Une
forme plus élaborée est donnée comme suit :
On peut spécifier un traitement particulier à plusieurs exceptions. C’est pour cela
qu’on utilise except NomException1. L’instruction except peut être complétée par
une clause else. Elle sera exécutée si aucune des exceptions dans except n’est
exécutée.
Python possède beaucoup d’exceptions prédéfinies, en voici quelques-unes :
[PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 9
Type de l’exception Explication
IndexError Accès à un élément non existant d’une
liste
NameError Utilisation d’un objet non existant
SyntaxError Erreur de syntaxe dans une instruction
TypeError Erreur de type
ValueError Erreur de valeur
ZeroDivisionError Division par 0
Exemple :
Re-tapez le code suivant :
Exécutez-le en entrant la valeur «p » :
Ajoutez-le bloc d’exception convenable dans le code de la fonction saisie() :
[PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 10
h. Les fonctions imbriquées
Il est possible de déclarer une fonction g à l’intérieur d’une fonction f. Seule la
fonction f est capable d’appeler g. Cette dernière a un comportement local au sein
de f. Pour déterminer les noms des objets considérés comme locaux à une fonction
et leurs équivalent globaux, python offre deux commandes : locals et globals()
Suite à l’appel de min1, on obtient la liste des objets locaux et globaux pour
chacune des fonctions min1 et min2. La fonction min2 figure comme un objet local à
la fonction min3.
i. Les variables globales
Pour forcer une fonction à considérer une variable comme globale, on utilise le mot
clé global suivi du nom de la variable en question. La fonction inc1 utilise la variable
x sans la déclarer ni comme paramètre ni comme variable globale. L’interpréteur ne
reconnait pas x et déclenche une exception :
[PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 11
La deuxième version, inc2(), la variable x est déclarée globale d’une manière
explicite. La variable est initialisée à l’extérieur de la fonction et son contenu est
modifiable par les fonctions qui la déclarent comme le mot clé « global ».
2. Les modules personnels
Python permet de créer des modules personnels qui regroupent un ensemble de
fonctions et de variables ( Il nous donne la possibilité de développer une classe,
notion que nous introduisons cette année et vous la verrez en deuxième année) à
l’intérieur d’un même fichier .py et de les utiliser en cas de besoin. Le fichier possède
un nom défini par le programmeur. Avant de penser à développer un module,
vérifier que Python n’offre pas déjà une alternative !
• L’instruction import nom_module permet de charger la totalité du module en
mémoire. Les fonctions et les variables du module sont accessibles de la
façon suivante : nom_module.nom_element_du_module
• Pour choisir l’élément à charger d’un module et gagner en mémoire, la
syntaxe suivante est sollicitée : from nom_module import
fonction1,fonction2,var1… Dans ces cas, les éléments importés sont
accessible sans le préfixe nom_module
• Le contenu d’un module est affiché par la commande dir(nom_module)
• L’aide est fournie par la commande help(nom_module)
• Pour choisir les instructions qui seront exécutées comme programme principal
dans un script on utilise une variable spéciale __name__. Cette variable est
crée par Python partout et renseigne comme son nom l’indique sur le nom de
tout objet utilisé (script, fonction, variable). Le Shell est une fonction python qui
porte le nom ‘__main__’. Ainsi, pour forcer des fonctions à s’exécuter comme
programme principal, on teste si la variable __name__contient la valeur
‘__main__’. (Voir l’exemple traité au TD)
3. Application
Application 1 : Palindrome
def palindrome(s):
n=len(s)-1
for i in range(n+1):
[PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 12
if s[i]!=s[n-i]:
return False
return True
mot="kayak"
print(palindrome(mot))
Application 2 : Nombre de armstrong
Un nombre est dit de Armstrong s’il est égal à la somme des cubes de ses chiffres
(par exemple, 371 = 33 + 73 + 13 ). Générez la liste des nombres de Armstrong
inférieurs à 1000
Application 3 : Evaluation d’un polynôme
Ecrire une fonction qui permet de prendre en paramètres deux arguments P et x tel
que P représente un polynôme et x la valeur à passer à ce polynôme.
Exemple : P=[-1,0,1]#x²-1
def polynome(P,x):
P_x=P[0]
for i in range(1,len(P)):
P_x=P_x+P[i]*x**i
return P_x
P=[-1,0,1]#x^2-1
x=1
print(polynome(P,x))
(module personnel, fonction imbriquée, forcer les variables pour devenir une var
globale)
4. Du modulaire à l’orienté objet
1. Notion de la programmation orientée objet
La programmation orientée objet consiste à représenter les éléments du monde réel
par des entités informatiques appelés "objets" en adoptant un haut niveau
d'abstraction. Comparons les approches de programmation à savoir procédurale et
orientée objet :
[PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’
Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 13
Approche procédurale :
"Que doit faire mon programme ? "
Approche orientée-objet :
"De quoi doit être composé mon programme ?"
Exemple : Si vous êtes appelés à coder un traitement afin de gérer une bibliothèque,
vous serez appelé à comprendre son écosystème tout d’abord pour en déduire le
traitement à faire par votre application.
En adoptant l’approche procédurale, nous pouvons développer de maintes
méthodes, comme « chercher livre », « demander le prêt d’un livre ». L’inconvénient
de cette approche est que nous ne pouvons pas spécifier qui fait quoi ?
Une solution : La programmation orientée objet !
La future application de gestion de la bibliothèque sera composée d’un ensemble
d’objets similaires qui peuvent être informatiquement décrits par :
• une même abstraction : une classe
o même structure de données et méthodes de traitement
o valeurs différentes pour chaque objet
[PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’
Mariem ZAOUALI | 14
2. La classe et son contenu
On appelle classe la structure d'un objet, c'est-à-dire la déclaration de l'ensemble
des entités qui composeront un objet. Un objet est donc « issu » d'une classe, c'est le
produit qui sort d'un moule.
En réalité, on dit qu'un objet est une instanciation d'une classe : objet = instance
Une classe est composée de deux parties :
• Les attributs (parfois appelés données membres) : il s'agit des données
représentant l'état de l'objet
• Les méthodes (parfois appelées fonctions membres): il s'agit des
opérations applicables aux objets
Notre classe Voiture est une sorte d'usine à créer des voitures. La méthode __init__() (en
appuyant deux fois sur le underscore de la touche 8) est appelée lors de la création
d'un objet de type Voiture.
self.nom est une manière de stocker une information dans la classe. On parle d'attribut
d’instance. Dans notre cas, on stock le nom dans l'attribut nom.
Créons maintenant notre voiture:
Les méthodes sont des fonctions définies dans une classe. Créons une nouvelle
méthode dans notre classe voiture:
Utilisons cette méthode:

Contenu connexe

Tendances

Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
Abdoulaye Dieng
 
Programmation en C
Programmation en CProgrammation en C
Programmation en C
Youness Boukouchi
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
Abdoulaye Dieng
 
02 correction-td smi-s3-algo2
02 correction-td smi-s3-algo202 correction-td smi-s3-algo2
02 correction-td smi-s3-algo2
L’Université Hassan 1er Settat
 
Chap7 simulation numérique
Chap7 simulation numériqueChap7 simulation numérique
Chap7 simulation numérique
Mariem ZAOUALI
 
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniAtelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Shellmates
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
pierrepo
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
Haytam EL YOUSSFI
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulation
ECAM Brussels Engineering School
 
Python
PythonPython
POO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et PolymorphismePOO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et Polymorphisme
Mouna Torjmen
 
Cours algorithme: structures répétitives
Cours algorithme: structures répétitivesCours algorithme: structures répétitives
Cours algorithme: structures répétitives
InforMatica34
 
Algorithmique et Structures de Données II
Algorithmique et Structures de Données IIAlgorithmique et Structures de Données II
Algorithmique et Structures de Données II
Riadh Bouslimi
 
Chapitre 3 structures séquentielles
Chapitre 3 structures séquentiellesChapitre 3 structures séquentielles
Chapitre 3 structures séquentielles
Sana Aroussi
 
Android-Tp3: fragments et menus
Android-Tp3: fragments et menusAndroid-Tp3: fragments et menus
Android-Tp3: fragments et menus
Lilia Sfaxi
 
Devoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 siDevoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 si
Narûtö Bàl'Sèm
 
Exercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdfExercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdf
salah fenni
 
Cours python
Cours pythonCours python
Cours python
salmazen
 
Cours php -partie 1.pdf
Cours php -partie 1.pdfCours php -partie 1.pdf
Cours php -partie 1.pdf
ssuserc46a93
 
Tp1 compte rendu en langage c
Tp1 compte rendu en langage cTp1 compte rendu en langage c
Tp1 compte rendu en langage c
Ebrima NJIE
 

Tendances (20)

Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Programmation en C
Programmation en CProgrammation en C
Programmation en C
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
02 correction-td smi-s3-algo2
02 correction-td smi-s3-algo202 correction-td smi-s3-algo2
02 correction-td smi-s3-algo2
 
Chap7 simulation numérique
Chap7 simulation numériqueChap7 simulation numérique
Chap7 simulation numérique
 
Atelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El HassaniAtelier Python 2eme partie par Achraf Kacimi El Hassani
Atelier Python 2eme partie par Achraf Kacimi El Hassani
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
Programmation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulationProgrammation orientée objet : Object, classe et encapsulation
Programmation orientée objet : Object, classe et encapsulation
 
Python
PythonPython
Python
 
POO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et PolymorphismePOO Java Chapitre 4 Heritage et Polymorphisme
POO Java Chapitre 4 Heritage et Polymorphisme
 
Cours algorithme: structures répétitives
Cours algorithme: structures répétitivesCours algorithme: structures répétitives
Cours algorithme: structures répétitives
 
Algorithmique et Structures de Données II
Algorithmique et Structures de Données IIAlgorithmique et Structures de Données II
Algorithmique et Structures de Données II
 
Chapitre 3 structures séquentielles
Chapitre 3 structures séquentiellesChapitre 3 structures séquentielles
Chapitre 3 structures séquentielles
 
Android-Tp3: fragments et menus
Android-Tp3: fragments et menusAndroid-Tp3: fragments et menus
Android-Tp3: fragments et menus
 
Devoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 siDevoirs Algorithme + correction pour 4 si
Devoirs Algorithme + correction pour 4 si
 
Exercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdfExercices_Python_Fenni_2023 -corrigé.pdf
Exercices_Python_Fenni_2023 -corrigé.pdf
 
Cours python
Cours pythonCours python
Cours python
 
Cours php -partie 1.pdf
Cours php -partie 1.pdfCours php -partie 1.pdf
Cours php -partie 1.pdf
 
Tp1 compte rendu en langage c
Tp1 compte rendu en langage cTp1 compte rendu en langage c
Tp1 compte rendu en langage c
 

Similaire à Chap3 programmation modulaire en python

POO en C++: Les fonctions
POO en C++: Les fonctionsPOO en C++: Les fonctions
POO en C++: Les fonctions
Amina HAMEURLAINE
 
03_Prog_C_Fonctions.pdf
03_Prog_C_Fonctions.pdf03_Prog_C_Fonctions.pdf
03_Prog_C_Fonctions.pdf
Ahmed12314
 
ALGORITHMIQUE fonction et procedure.pptx
ALGORITHMIQUE fonction et procedure.pptxALGORITHMIQUE fonction et procedure.pptx
ALGORITHMIQUE fonction et procedure.pptx
Hathat10
 
01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf
MARYAM510573
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSS
AyoubElmrabet6
 
Chap1 Introduction à python
Chap1 Introduction à pythonChap1 Introduction à python
Chap1 Introduction à python
Mariem ZAOUALI
 
ch3_les variables_dynamiques.pdf
ch3_les variables_dynamiques.pdfch3_les variables_dynamiques.pdf
ch3_les variables_dynamiques.pdf
FadouaBouafifSamoud
 
Introduction java
Introduction javaIntroduction java
Introduction java
Fouad Root
 
Algo inf102 2007
Algo inf102 2007Algo inf102 2007
Algo inf102 2007
SergeCowouvi1
 
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
Tunisie collège
 
Chapitre 04 : les fonctions
Chapitre 04 : les fonctionsChapitre 04 : les fonctions
Chapitre 04 : les fonctions
L’Université Hassan 1er Settat
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
HamdiBaklouti
 
Chapitre 4 Fonctions et procédures.pdf
Chapitre 4 Fonctions et procédures.pdfChapitre 4 Fonctions et procédures.pdf
Chapitre 4 Fonctions et procédures.pdf
C00LiMoUn
 
3 - programmation modulaire avec python.pdf
3 - programmation modulaire avec python.pdf3 - programmation modulaire avec python.pdf
3 - programmation modulaire avec python.pdf
LaodouKY
 
Les bases de la programmation en JAVA
Les bases de la programmation  en JAVA   Les bases de la programmation  en JAVA
Les bases de la programmation en JAVA
Asmaa BENGUEDDACH
 
Formation en Python_Niveau1_2023.pptx
Formation en Python_Niveau1_2023.pptxFormation en Python_Niveau1_2023.pptx
Formation en Python_Niveau1_2023.pptx
betalab
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
neuros
 
Asd
AsdAsd

Similaire à Chap3 programmation modulaire en python (20)

POO en C++: Les fonctions
POO en C++: Les fonctionsPOO en C++: Les fonctions
POO en C++: Les fonctions
 
03_Prog_C_Fonctions.pdf
03_Prog_C_Fonctions.pdf03_Prog_C_Fonctions.pdf
03_Prog_C_Fonctions.pdf
 
ALGORITHMIQUE fonction et procedure.pptx
ALGORITHMIQUE fonction et procedure.pptxALGORITHMIQUE fonction et procedure.pptx
ALGORITHMIQUE fonction et procedure.pptx
 
Python chapitre 4.pdf
Python chapitre 4.pdfPython chapitre 4.pdf
Python chapitre 4.pdf
 
01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSS
 
Chap1 Introduction à python
Chap1 Introduction à pythonChap1 Introduction à python
Chap1 Introduction à python
 
ch3_les variables_dynamiques.pdf
ch3_les variables_dynamiques.pdfch3_les variables_dynamiques.pdf
ch3_les variables_dynamiques.pdf
 
Introduction java
Introduction javaIntroduction java
Introduction java
 
Algo inf102 2007
Algo inf102 2007Algo inf102 2007
Algo inf102 2007
 
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
 
Chapitre 04 : les fonctions
Chapitre 04 : les fonctionsChapitre 04 : les fonctions
Chapitre 04 : les fonctions
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
 
Chapitre 4 Fonctions et procédures.pdf
Chapitre 4 Fonctions et procédures.pdfChapitre 4 Fonctions et procédures.pdf
Chapitre 4 Fonctions et procédures.pdf
 
3 - programmation modulaire avec python.pdf
3 - programmation modulaire avec python.pdf3 - programmation modulaire avec python.pdf
3 - programmation modulaire avec python.pdf
 
Generalites
GeneralitesGeneralites
Generalites
 
Les bases de la programmation en JAVA
Les bases de la programmation  en JAVA   Les bases de la programmation  en JAVA
Les bases de la programmation en JAVA
 
Formation en Python_Niveau1_2023.pptx
Formation en Python_Niveau1_2023.pptxFormation en Python_Niveau1_2023.pptx
Formation en Python_Niveau1_2023.pptx
 
Javascript ne se limite pas à jquery
Javascript ne se limite pas à jqueryJavascript ne se limite pas à jquery
Javascript ne se limite pas à jquery
 
Asd
AsdAsd
Asd
 

Plus de Mariem ZAOUALI

Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers
Mariem ZAOUALI
 
Chap2 Les conteneurs en python
Chap2 Les conteneurs en pythonChap2 Les conteneurs en python
Chap2 Les conteneurs en python
Mariem ZAOUALI
 
Tp1 design patternappliques
Tp1 design patternappliquesTp1 design patternappliques
Tp1 design patternappliques
Mariem ZAOUALI
 
TP2 RMI
TP2 RMITP2 RMI
Cours 4 intergiciels orientes messages jms
Cours 4 intergiciels orientes messages  jmsCours 4 intergiciels orientes messages  jms
Cours 4 intergiciels orientes messages jms
Mariem ZAOUALI
 
Cours 2 les architectures reparties
Cours 2 les architectures repartiesCours 2 les architectures reparties
Cours 2 les architectures reparties
Mariem ZAOUALI
 
Cours 3 les objets distants rmi corba
Cours 3 les objets distants rmi corbaCours 3 les objets distants rmi corba
Cours 3 les objets distants rmi corba
Mariem ZAOUALI
 
Cours 1 les principes de base
Cours 1 les principes de baseCours 1 les principes de base
Cours 1 les principes de base
Mariem ZAOUALI
 
TP1 Traitement d'images Génie Logiciel avec Matlab
TP1 Traitement d'images Génie Logiciel avec MatlabTP1 Traitement d'images Génie Logiciel avec Matlab
TP1 Traitement d'images Génie Logiciel avec Matlab
Mariem ZAOUALI
 
Comment retrouver la forme récursive
Comment retrouver la forme récursiveComment retrouver la forme récursive
Comment retrouver la forme récursive
Mariem ZAOUALI
 
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / TunisieCorrection TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
Mariem ZAOUALI
 
TP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / TunisieTP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / Tunisie
Mariem ZAOUALI
 
TP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / TunisieTP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / Tunisie
Mariem ZAOUALI
 
TP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / TunisieTP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / Tunisie
Mariem ZAOUALI
 
TP1 Atelier C++/ GL2 INSAT / Tunisie
TP1 Atelier C++/ GL2 INSAT / TunisieTP1 Atelier C++/ GL2 INSAT / Tunisie
TP1 Atelier C++/ GL2 INSAT / Tunisie
Mariem ZAOUALI
 
Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia
Mariem ZAOUALI
 

Plus de Mariem ZAOUALI (16)

Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers Chap6 Manipulation des fichiers
Chap6 Manipulation des fichiers
 
Chap2 Les conteneurs en python
Chap2 Les conteneurs en pythonChap2 Les conteneurs en python
Chap2 Les conteneurs en python
 
Tp1 design patternappliques
Tp1 design patternappliquesTp1 design patternappliques
Tp1 design patternappliques
 
TP2 RMI
TP2 RMITP2 RMI
TP2 RMI
 
Cours 4 intergiciels orientes messages jms
Cours 4 intergiciels orientes messages  jmsCours 4 intergiciels orientes messages  jms
Cours 4 intergiciels orientes messages jms
 
Cours 2 les architectures reparties
Cours 2 les architectures repartiesCours 2 les architectures reparties
Cours 2 les architectures reparties
 
Cours 3 les objets distants rmi corba
Cours 3 les objets distants rmi corbaCours 3 les objets distants rmi corba
Cours 3 les objets distants rmi corba
 
Cours 1 les principes de base
Cours 1 les principes de baseCours 1 les principes de base
Cours 1 les principes de base
 
TP1 Traitement d'images Génie Logiciel avec Matlab
TP1 Traitement d'images Génie Logiciel avec MatlabTP1 Traitement d'images Génie Logiciel avec Matlab
TP1 Traitement d'images Génie Logiciel avec Matlab
 
Comment retrouver la forme récursive
Comment retrouver la forme récursiveComment retrouver la forme récursive
Comment retrouver la forme récursive
 
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / TunisieCorrection TP4 Atelier C++ /GL2 INSAT / Tunisie
Correction TP4 Atelier C++ /GL2 INSAT / Tunisie
 
TP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / TunisieTP4 Atelier C++ /GL2 INSAT / Tunisie
TP4 Atelier C++ /GL2 INSAT / Tunisie
 
TP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / TunisieTP3 Atelier C++/ GL2 INSAT / Tunisie
TP3 Atelier C++/ GL2 INSAT / Tunisie
 
TP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / TunisieTP2 Atelier C++/ GL2 INSAT / Tunisie
TP2 Atelier C++/ GL2 INSAT / Tunisie
 
TP1 Atelier C++/ GL2 INSAT / Tunisie
TP1 Atelier C++/ GL2 INSAT / TunisieTP1 Atelier C++/ GL2 INSAT / Tunisie
TP1 Atelier C++/ GL2 INSAT / Tunisie
 
Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia Graduation Project Presentation _ INSAT Tunisia
Graduation Project Presentation _ INSAT Tunisia
 

Dernier

Webinaire BL 28_06_01_robots de traite.pdf
Webinaire BL 28_06_01_robots de traite.pdfWebinaire BL 28_06_01_robots de traite.pdf
Webinaire BL 28_06_01_robots de traite.pdf
Institut de l'Elevage - Idele
 
Note agro-climatique et prairies n°5 - Juillet 2024
Note agro-climatique et prairies n°5 - Juillet 2024Note agro-climatique et prairies n°5 - Juillet 2024
Note agro-climatique et prairies n°5 - Juillet 2024
idelewebmestre
 
Webinaire BL 28_06_03_Transmissibilité.pdf
Webinaire BL 28_06_03_Transmissibilité.pdfWebinaire BL 28_06_03_Transmissibilité.pdf
Webinaire BL 28_06_03_Transmissibilité.pdf
Institut de l'Elevage - Idele
 
Theorie du trafic on telecommunication network
Theorie du trafic on telecommunication networkTheorie du trafic on telecommunication network
Theorie du trafic on telecommunication network
MahamaneAliSalatou
 
cours-sur-les-stations-de-pompageen génie civil.pdf
cours-sur-les-stations-de-pompageen génie civil.pdfcours-sur-les-stations-de-pompageen génie civil.pdf
cours-sur-les-stations-de-pompageen génie civil.pdf
afigloria194
 
Webinaire BL 28_06_02_Consommation Energie.pdf
Webinaire BL 28_06_02_Consommation Energie.pdfWebinaire BL 28_06_02_Consommation Energie.pdf
Webinaire BL 28_06_02_Consommation Energie.pdf
Institut de l'Elevage - Idele
 
Etude de la faisabilité de la climatisation solaire pour l’habitat individuel...
Etude de la faisabilité de la climatisation solaire pour l’habitat individuel...Etude de la faisabilité de la climatisation solaire pour l’habitat individuel...
Etude de la faisabilité de la climatisation solaire pour l’habitat individuel...
iheberry
 

Dernier (7)

Webinaire BL 28_06_01_robots de traite.pdf
Webinaire BL 28_06_01_robots de traite.pdfWebinaire BL 28_06_01_robots de traite.pdf
Webinaire BL 28_06_01_robots de traite.pdf
 
Note agro-climatique et prairies n°5 - Juillet 2024
Note agro-climatique et prairies n°5 - Juillet 2024Note agro-climatique et prairies n°5 - Juillet 2024
Note agro-climatique et prairies n°5 - Juillet 2024
 
Webinaire BL 28_06_03_Transmissibilité.pdf
Webinaire BL 28_06_03_Transmissibilité.pdfWebinaire BL 28_06_03_Transmissibilité.pdf
Webinaire BL 28_06_03_Transmissibilité.pdf
 
Theorie du trafic on telecommunication network
Theorie du trafic on telecommunication networkTheorie du trafic on telecommunication network
Theorie du trafic on telecommunication network
 
cours-sur-les-stations-de-pompageen génie civil.pdf
cours-sur-les-stations-de-pompageen génie civil.pdfcours-sur-les-stations-de-pompageen génie civil.pdf
cours-sur-les-stations-de-pompageen génie civil.pdf
 
Webinaire BL 28_06_02_Consommation Energie.pdf
Webinaire BL 28_06_02_Consommation Energie.pdfWebinaire BL 28_06_02_Consommation Energie.pdf
Webinaire BL 28_06_02_Consommation Energie.pdf
 
Etude de la faisabilité de la climatisation solaire pour l’habitat individuel...
Etude de la faisabilité de la climatisation solaire pour l’habitat individuel...Etude de la faisabilité de la climatisation solaire pour l’habitat individuel...
Etude de la faisabilité de la climatisation solaire pour l’habitat individuel...
 

Chap3 programmation modulaire en python

  • 1. [PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 1 Chapitre 3 : Programmation modulaire en Python • Savoir écrire un programme modulaire • Connaître l’effet de différentes variables (locales, globales), les fonctions lambda etc • Gérer les erreurs Python offre un ensemble de fonctions prédéfinies. Au moment du démarrage de l’interpréteur, ces fonctions se chargent comme la fonction abs() ou la fonction len(). On distingue aussi d’autres fonctions qui se chargent au moment de l’importation de modules (c’est le cas de sqrt du module math ou de polar du module cmath). Dans ce chapitre, nous s’initions à la notion de fonctions en python. 1. Les fonctions en Python a. Déclaration et appel de la fonction Pourquoi développer une fonction ? Imaginons le cas suivant, où nous voudrions calculer le factorielle 10 ! Dans le même programme, on veut aussi calculer 100 ! Dans l’exemple précédent, nous avons recopié le code, ce qui rend cette procédure lourde et source de propagation d’erreurs. Donc la solution est de factoriser le code -> Notion de fonction ! Une fonction est un bloc d’instructions qui possède un nom et qui reçoit un certain nombre de paramètres et renvoie un résultat. En utilisant les fonctions, on évite la répétition, on sépare les données des résultats, on rend le code réutilisable à travers
  • 2. [PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 2 l’importation des fichiers de fonctions et on décompose les tâches complexes en des tâches simples plus abordables Pour déclarer la fonction, en Python, il suffit d’utiliser le mot-clé def : • Le mot clé def sert à déclarer la fonction • Il est suivi du nom de la fonction ainsi que de parenthèses contenant les paramètres formels de cette dernière. Dans le cas où on a plusieurs paramètres dans une fonction, on utilise les virgules pour les séparer. En cas où il n’y a pas de paramètres, on laisse les parenthèses vides (on ouvre et on ferme les parenthèses). On ne précise jamais le type des paramètres. Une même fonction peut recevoir des paramètres de natures différentes entre deux jeux d’appels grâce à la notion de typage dynamique= le type d’une variable dépend de son contenu. La représentation de la fonction en algorithme est la suivante : • La chaîne de documentation est optionnelle mais fortement recommandée • Le bloc d’instruction est obligatoire. L’instruction pass permet d’avoir un bloc d’instruction vide (si on n’a pas encore désigné que fait notre fonction) b. Le NoneType et les fonctions avec retour On peut développer une fonction en Python qui retourne un résultat récupérable par la fonction appelante. Le mot cle return permet d’arrêter l’exécution d’une fonction et de renvoyer un résultat. Tous les types qu’on a vus en Python, peuvent être utilisés comme retour. Quand la fonction ne contient pas le mot clé return, Python retourne un objet vide ayant comme type NoneType. C’est un type réservé pour exprimer le vide. Prenons l’exemple suivant où la fonction ne retourne pas de résultat et testons le type de retour obtenu :
  • 3. [PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 3 Testons le cas où la fonction retourne un résultat : Le mot clé return peut figurer dans plusieurs endroits au sein d’une fonction. Exemple : En Python, on peut retourner plus qu’un résultat. Ici, on recourt au tuple pour stocker les valeurs retournées. Au moment de l’appel, il faut prendre en considération la nature du résultat. Ainsi, soit on utilise un objet qui stocke le tuple puis pour accéder aux résultats, on utilise les indices respectifs, soit on effectue un appel basé sur le nombre de variables retournées. Exemple : c. Mode de passage des paramètres Que se passe-t-il en mémoire au cours de l’appel d’une fonction ? Au moment de l’appel de la fonction :
  • 4. [PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 4 • des variables correspondant aux arguments sont créés en mémoire, • les valeurs des arguments sont copiées dans les variables, • à la fin de l’appel de la fonction, les variables sont détruites. • à la fin de l’appel de la fonction, les arguments n’ont pas été modifiés. • On appelle ce mode de passage : passage d’argument par valeur. Seule la valeur de l’argument est transmise à la fonction, pas l’argument lui-même Testons ce code ! Constatation ? C’est un passage différent que celui de valeur! L’appel de fonction permet de substituer les paramètres formels par des paramètres effectifs. Les modes de passages dépendent du type des données passés en paramètres : • Les types non mutables (int, float, str, complex, bool, tuple…) sont passés par valeur • Les types mutables (listes, ensembles, dictionnaires..) imitent le mode de passage par variable (S ou ES en algorithmique) Pour bien assimiler la notion de mode de passage, on se base sur l’évolution de la valeur des identifiants. Testons les codes suivants et notez le résultat obtenu : Manipulation 1 : Le résultat :
  • 5. [PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 5 Manipulation 2 : Le résultat : Revenons à notre exemple de factorielle. Fact et c sont deux variables locales. Une variable locale est une variable déclarée dans le corps d’une fonction. Elle ne peut pas être modifiée que dans le corps de la fonction dans laquelle elle a été déclarée. Les variables locales sont créées au moment de l’appel de la fonction, utilisées/modifiées pendant l’exécution de la fonction et détruite à la fin de l’appel. Alors maintenant, c’est quoi une variable globale ? Dans le programme suivant, N a été déclarée à l’extérieur de toute fonction, directement dans le programme principal : c’est une variable globale. Une variable globale peut-être lue et modifiée depuis n’importe quel endroit du programme. Que se passe-t-il si une variable locale et une variable globale ont le même nom ? Pour répondre à cette question, testez ce code :
  • 6. [PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 6 La variable ________________________ est prioritaire ! d. Les fonctions Lambda En Python, une fonction lambda est une fonction anonyme à laquelle on n’a pas donné de nom et qu’on appliqué quand on veut. La syntaxe est : lambda paramètres :expression. Prenons un exemple. Ecrivons un script renvoyant la norme d’un vecteur du plan de coordonnés (x,y). Traduisons cette fonction en fonction lambda et ça devient : lambda x,y :math .sqrt(x**2+y**2). On peut affecter cette fonction lambda à une variable : f= lambda x,y :math .sqrt(x**2+y**2). Ainsi, f peut être appelé même en tant que argument à passer dans une autre fonction ! Prenons un exemple. Considérons f=lambda x :x**2+x+1. On peut appeler f dans une fonction.
  • 7. [PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 7 e. Paramètres avec valeurs par défaut-Paramètres positionnels Une fonction peut être déclarée avec des paramètres ayant des valeurs de départ. Si l’utilisateur omet l’un des paramètres au moment de l’appel, la valeur par défaut sera prise en considération tel est le cas de la fonction construire_point qui affiche le point (0,0) si l’utilisateur ne communique aucun paramètre. En plus de donner des valeurs de départ aux paramètres, Python autorise d’appeler la fonction sans trop respecter l’ordre des arguments au moment de la déclaration. Il suffit d’utiliser le nom du paramètre au moment de l’appel et de préciser la valeur qu’il prend : f. Nombre de paramètres variable Python permet de définir une fonction avec un nombre arbitraire de paramètres. Ce paramètre est précédé par ‘*’ et est appelé généralement args ou params. Avec ce genre de paramètres, on ne sait pas vraiment le nombre de paramètres au moment de l’appel. L’appel de fonction est basé sur un tuple de valeurs :
  • 8. [PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 8 g. La gestion des exceptions Quand une erreur se produit dans un script, elle provoque l’arrêt du programme et affiche un message d’erreur. Pour éviter cette interruption brutale, on peut appliquer un traitement spécifique. Plus généralement, on peut traiter une situation exceptionnelle dont on ne sait pas forcément où et quand elle va survenir à l’intérieur d’un bloc donné. On emploie le terme exception pour désigner une erreur et rattrape une exception levée en précisant le traitement à faire lorsqu’elle est levée. Pour traiter une erreur, Python propose, comme dans d’autres langages, l’emploi de la clause « try…except » sous la forme suivante : Cette forme est la plus simple. Le bloc 1 contient le code qui peut lever l’exception, tandis que le bloc 2 contient le code à exécuter lorsqu’on a une exception levée dans le bloc 1. Si tout va bien dans le bloc 1, le bloc 2 ne sera pas exécuté. Une forme plus élaborée est donnée comme suit : On peut spécifier un traitement particulier à plusieurs exceptions. C’est pour cela qu’on utilise except NomException1. L’instruction except peut être complétée par une clause else. Elle sera exécutée si aucune des exceptions dans except n’est exécutée. Python possède beaucoup d’exceptions prédéfinies, en voici quelques-unes :
  • 9. [PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 9 Type de l’exception Explication IndexError Accès à un élément non existant d’une liste NameError Utilisation d’un objet non existant SyntaxError Erreur de syntaxe dans une instruction TypeError Erreur de type ValueError Erreur de valeur ZeroDivisionError Division par 0 Exemple : Re-tapez le code suivant : Exécutez-le en entrant la valeur «p » : Ajoutez-le bloc d’exception convenable dans le code de la fonction saisie() :
  • 10. [PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 10 h. Les fonctions imbriquées Il est possible de déclarer une fonction g à l’intérieur d’une fonction f. Seule la fonction f est capable d’appeler g. Cette dernière a un comportement local au sein de f. Pour déterminer les noms des objets considérés comme locaux à une fonction et leurs équivalent globaux, python offre deux commandes : locals et globals() Suite à l’appel de min1, on obtient la liste des objets locaux et globaux pour chacune des fonctions min1 et min2. La fonction min2 figure comme un objet local à la fonction min3. i. Les variables globales Pour forcer une fonction à considérer une variable comme globale, on utilise le mot clé global suivi du nom de la variable en question. La fonction inc1 utilise la variable x sans la déclarer ni comme paramètre ni comme variable globale. L’interpréteur ne reconnait pas x et déclenche une exception :
  • 11. [PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 11 La deuxième version, inc2(), la variable x est déclarée globale d’une manière explicite. La variable est initialisée à l’extérieur de la fonction et son contenu est modifiable par les fonctions qui la déclarent comme le mot clé « global ». 2. Les modules personnels Python permet de créer des modules personnels qui regroupent un ensemble de fonctions et de variables ( Il nous donne la possibilité de développer une classe, notion que nous introduisons cette année et vous la verrez en deuxième année) à l’intérieur d’un même fichier .py et de les utiliser en cas de besoin. Le fichier possède un nom défini par le programmeur. Avant de penser à développer un module, vérifier que Python n’offre pas déjà une alternative ! • L’instruction import nom_module permet de charger la totalité du module en mémoire. Les fonctions et les variables du module sont accessibles de la façon suivante : nom_module.nom_element_du_module • Pour choisir l’élément à charger d’un module et gagner en mémoire, la syntaxe suivante est sollicitée : from nom_module import fonction1,fonction2,var1… Dans ces cas, les éléments importés sont accessible sans le préfixe nom_module • Le contenu d’un module est affiché par la commande dir(nom_module) • L’aide est fournie par la commande help(nom_module) • Pour choisir les instructions qui seront exécutées comme programme principal dans un script on utilise une variable spéciale __name__. Cette variable est crée par Python partout et renseigne comme son nom l’indique sur le nom de tout objet utilisé (script, fonction, variable). Le Shell est une fonction python qui porte le nom ‘__main__’. Ainsi, pour forcer des fonctions à s’exécuter comme programme principal, on teste si la variable __name__contient la valeur ‘__main__’. (Voir l’exemple traité au TD) 3. Application Application 1 : Palindrome def palindrome(s): n=len(s)-1 for i in range(n+1):
  • 12. [PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 12 if s[i]!=s[n-i]: return False return True mot="kayak" print(palindrome(mot)) Application 2 : Nombre de armstrong Un nombre est dit de Armstrong s’il est égal à la somme des cubes de ses chiffres (par exemple, 371 = 33 + 73 + 13 ). Générez la liste des nombres de Armstrong inférieurs à 1000 Application 3 : Evaluation d’un polynôme Ecrire une fonction qui permet de prendre en paramètres deux arguments P et x tel que P représente un polynôme et x la valeur à passer à ce polynôme. Exemple : P=[-1,0,1]#x²-1 def polynome(P,x): P_x=P[0] for i in range(1,len(P)): P_x=P_x+P[i]*x**i return P_x P=[-1,0,1]#x^2-1 x=1 print(polynome(P,x)) (module personnel, fonction imbriquée, forcer les variables pour devenir une var globale) 4. Du modulaire à l’orienté objet 1. Notion de la programmation orientée objet La programmation orientée objet consiste à représenter les éléments du monde réel par des entités informatiques appelés "objets" en adoptant un haut niveau d'abstraction. Comparons les approches de programmation à savoir procédurale et orientée objet :
  • 13. [PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’ Mariem ZAOUALI | Chapitre 3 : Programmation modulaire en Python 13 Approche procédurale : "Que doit faire mon programme ? " Approche orientée-objet : "De quoi doit être composé mon programme ?" Exemple : Si vous êtes appelés à coder un traitement afin de gérer une bibliothèque, vous serez appelé à comprendre son écosystème tout d’abord pour en déduire le traitement à faire par votre application. En adoptant l’approche procédurale, nous pouvons développer de maintes méthodes, comme « chercher livre », « demander le prêt d’un livre ». L’inconvénient de cette approche est que nous ne pouvons pas spécifier qui fait quoi ? Une solution : La programmation orientée objet ! La future application de gestion de la bibliothèque sera composée d’un ensemble d’objets similaires qui peuvent être informatiquement décrits par : • une même abstraction : une classe o même structure de données et méthodes de traitement o valeurs différentes pour chaque objet
  • 14. [PROGRAMMATION MODULAIRE EN PYTHON] ESPRIMS’ Mariem ZAOUALI | 14 2. La classe et son contenu On appelle classe la structure d'un objet, c'est-à-dire la déclaration de l'ensemble des entités qui composeront un objet. Un objet est donc « issu » d'une classe, c'est le produit qui sort d'un moule. En réalité, on dit qu'un objet est une instanciation d'une classe : objet = instance Une classe est composée de deux parties : • Les attributs (parfois appelés données membres) : il s'agit des données représentant l'état de l'objet • Les méthodes (parfois appelées fonctions membres): il s'agit des opérations applicables aux objets Notre classe Voiture est une sorte d'usine à créer des voitures. La méthode __init__() (en appuyant deux fois sur le underscore de la touche 8) est appelée lors de la création d'un objet de type Voiture. self.nom est une manière de stocker une information dans la classe. On parle d'attribut d’instance. Dans notre cas, on stock le nom dans l'attribut nom. Créons maintenant notre voiture: Les méthodes sont des fonctions définies dans une classe. Créons une nouvelle méthode dans notre classe voiture: Utilisons cette méthode: