Python pour Étudiants en Informatique
Python pour Étudiants en Informatique
destiné aux étudiants de Licence 2 Informatique LMD (Faculté des Sciences et Technologie)
1 Objectifs du cours
• comprendre la programmation comme un outil informatique incontournable
• maîtriser des concepts fondamentaux de la POO
• développer des compétences d’implémentation des programmes informatiques
• maîtriser des concepts de la POO en Python
2 Documentation
• Apprendre à programmer avec Python 3 par Gérard Swinnen
3 Outils
• Anaconda: [Link]
– Spyder
– Jupyter Notebook
5 Evaluation
• plusieurs travaux dirigés (généralement à la fin de chaque séance)
• une interrogation orale sous forme d’exposé
• deux travaux pratiques (un en groupe et un autre individuel)
• examen
1
2. création d’un backend en Python (comme librairie) pour la gestion de la charge horaire des
cours
3. création d’un frontend en Python pour la gestion de la deliberation des étudiants
4. création d’un frontkend en Python pour la gestion de la charge horaire des cours
5. programmation Google Pub/Sub en Python
6. gestion de collaboration de développeurs via Github
7. gestion de projets de programmation informatique
8. test and deploiement des applications web
9. environnements de test et de production des applications web
10. slack et espace de travail
11. comparaison des fournisseurs cloud
12. interaction entre BigQuery et Python
13. recherche et analyse de grande masse de données:Elastic search
14. recherche et analyse de grande masse de données: Solr
15. la technologie Splunk
16. la technologie Jenkins
17. la technologie Jira
18. XML pour interactions des systèmes
19. la technologie Kafka
20. solutions d’expérience produit et d’adoption numérique: Pendo
21. sestion de la relation client: Salesforce
22. service client: Freshdesk
23. APIs et programmation
24. chat
25. programmation mobile
26. programmation web
27. programmation desktop
28. Kubernetes
29. JSON pour interactions des systèmes
30. Technologie Docker
31. SymPy et algèbre
32. Python et C++: PyQt
33. sémantique de Python
34. SMS et Python
35. mailing et Python
36. logiciel de messagerie client: Freshchat
37. Python et html: transformer le html d’une page web en JSON
38. Python et html: transformer le html d’une page web en XML
39. visualisation 3D
40. 3FA en Python
6.1 Directives
• au plus 10 étudiants par groupe
• un rapport (d’au moins 10 pages) à rédiger structurée selon:
– introduction
∗ problématique
∗ objectifs
2
∗ etc.
– concepts de base
– experimentation
– conclusion
• participation de tous membres du groupe
• exposé par groupe
7 Introduction
7.1 C’est quoi Python ?
• Le langage de programmation Python a été créé en 1989 par Guido van Rossum, Pays-Bas.
• Le nom Python vient d’un hommage à la série télévisée Monty Python’s Flying Circus
dont G. van Rossum est fan.
• Sa première version officielle (version 2) a été publiée en 1991.
• La dernière version de Python est la version 3 (version 3.7 qui a été publiée en Juin 2018).
• La version 2 de Python est désormais obsolète et a cessé d’être maintenue depuis le 1er janvier
2020.
• La Python Software Foundation est l’association qui organise le développement de Python et
anime la communauté de développeurs et d’utilisateurs.
7.2 Caractéristiques
• Python est multiplateforme, c’est-à-dire qu’il fonctionne sur de nombreux systèmes
d’exploitation : Windows, Mac OS X, Linux, Android, iOS, depuis les mini-ordinateurs Rasp-
berry Pi jusqu’aux supercalculateurs.
• Il est gratuit. Il peut être installé sur autant d’ordinateurs que possible (même sur un télé-
phone!).
• C’est un langage de haut niveau. Il demande relativement peu de connaissance sur le fonc-
tionnement d’un ordinateur pour être utilisé.
• C’est un langage interprété (contrairement à des langages comme le C ou le C++).
• Il est orienté objet, c’est-à-dire qu’il est possible de concevoir en Python des entités qui miment
celles du monde réel (une cellule, une protéine, un atome, etc.) avec un certain nombre de
règles de fonctionnement et d’interactions.
• Il est relativement simple.
• Il est très utilisé en analyse de données. Toutes ces caractéristiques font que Python est
désormais enseigné dans de nombreuses formations, depuis l’enseignement secondaire jusqu’à
l’enseignement supérieur.
3
• Pour cela, il va falloir que l’ordinateur puisse comprendre le langage humain. Le souci, ici,
est que les ordinateurs ne comprennent qu’un seul langage : le binaire ou “langage machine”
qui est très opaque pour les humains et très long à écrire.
• Pour pallier à ce problème, certaines personnes ont créé ce qu’on appelle des langages de
programmation.
• Le but premier de tout langage de programmation est de passer des instructions à l’ordinateur.
• Schématiquement, on utilise des langages de programmation car il est plus facile qu’un humain
puisse exprimer et expliciter des séries d’instructions en suivant des conventions d’écriture
humaines plutôt que de passer des instructions directement en binaire à l’ordinateur.
• Le langage de programmation se charge de la conversion : il reçoit des instructions et les
transforme en binaire pour les passer à l’ordinateur afin que celui-ci les exécute.
• Tous les langages de programmation ne sont pourtant pas égaux : certains sont plus facilement
compréhensibles que d’autres et certains permettent de transmettre uniquement certaines
instructions à l’ordinateur.
• Python est un langage de programmation dit de “très haut niveau”. Cela signifie qu’il possède
un haut niveau d’abstraction par rapport au langage machine.
• Pour le dire très simplement : plus un langage de programmation est de “haut niveau”, plus
sa syntaxe se rapproche du langage humain plutôt que du langage machine.
• Un langage de haut niveau est donc plus facile à comprendre et à utiliser qu’un langage de
plus bas niveau.
4
l’autre côté, va produire un programme écrit en langage assembleur et ce langage assem-
bleur va être différent pour chaque OS. Par conséquent, les programmes compilés ne peuvent
s’exécuter que sur des ordinateurs dotés de la même architecture que l’ordinateur sur lequel
ils ont été compilés.
5
• Le souci ici est que Python 2.x était déjà très populaire à l’époque et que cela allait mettre de
nombreuses personnes dans l’embarras. L’équipe de Python a donc fait le choix de conserver
deux versions du langage : Python 2.x et Python 3.x et de les faire évoluer de front. Pour
être tout à fait précis, la version 3 est la version dont les fonctionnalités allaient continuer
d’évoluer tandis que la version 2 n’allait recevoir que des mises à jour liées à la sécurité.
8 Plan du cours
1. Eléments de base en python
2. Concepts de la programmation orientée objet en python (P.O.O)
3. Création et déploiement des librairies
4. Création et déploiement des APIs
5. Programmation Réseaux
6. Programmation Cloud
7. Simulation et Jeux
8. Industrie logicielle
9. Applications
6
9.1.2 L’indentation Python
• L’indentation correspond au fait de créer des retraits au niveau de certaines lignes de code.
Dans la grande majorité des langages, l’indentation n’a qu’une visée esthétique : elle permet
à un script d’être plus lisible pour un développeur.
• Généralement, une bonne indentation est censée représenter les dépendances au sein d’un
code : on ajoutera un retrait à chaque fois qu’une instruction est incluse / dépend d’une
autre.
• En Python, l’indentation a un tout autre rôle : elle est utilisée par Python pour définir des
blocs de code, c’est-à-dire pour indiquer à l’interpréteur quelle instruction appartient à quelle
autre.
• Si on indente mal le code Python, celui-ci ne s’exécutera tout simplement pas et Python
renverra une erreur. Cela est cependant relativement évident et ne devrait pas vous poser
de problème : dès qu’il y a une relation de dépendance, il faudra ajouter un retrait (une
tabulation).
9.2 Variables
• Une variable, dans le domaine de la programmation informatique, est un conteneur qui sert
à stocker une valeur. Les variables possèdent deux caractéristiques fondamentales :
– Les variables ont une durée de vie limitée (une variable ne vit généralement que le temps
de l’exécution d’un script ou de la fonction qui l’a définie). Ce qui signifie qu’on ne va
pas pouvoir utiliser les variables pour stocker des données de manière pérenne.
7
– La valeur d’une variable peut varier : les variables peuvent peuvent stocker différentes
valeurs au cours de leur vie (la nouvelle valeur remplaçant l’ancienne).
– Les variables sont donc au coeur des scripts puisqu’elles vont permettre de conserver des
valeurs le temps d’un script et d’effectuer toutes sortes de manipulations sur ces valeurs
en toute simplicité.
[ ]: age
Notez déjà qu’on va également pouvoir effectuer des affectations multiples en Python, c’est-à-dire af-
fecter plusieurs valeurs à plusieurs variables très facilement en utilisant la syntaxe nom_variable_1,
nom_variable_2, nom_variable_3 = valeur1, valeur2, valeur3.
[ ]: age, poids, taille = 22, 65.7, 1.81
[ ]: age
[ ]: poids
[ ]: taille
8
9.2.2 Type de données
• En programmation, les données qu’on va pouvoir manipuler avec un langage sont générale-
ment classées par “type”.
• Un “type” de données est défini par les manipulations qu’on va pouvoir faire sur ces données
: on va pouvoir effectuer les mêmes opérations sur chaque donnée d’un même type et des
opérations différentes sur différents types de données.
• Pour un nombre entier par exemple, il semble tout à fait logique de pouvoir effectuer des
opérations mathématiques de base avec ce nombre : addition, soustraction, multiplication,
etc. En revanche, on ne peut pas effectuer les mêmes opérations / manipulations sur un texte,
puisque multiplier un texte par quelque chose par exemple n’a pas de sens.
• Python définit de nombreux types de données qui sont : nombres entiers, décimaux, com-
plexes, chaines de caractères, booléens, listes, tuples, dictionnaires, etc.
• Dans ce cours, on va passer en revue les types de données les plus simples (nombres et
booléens). Les autres types de données feront l’objet de leçons séparées.
Les types primitifs: int, float et complex Python définit trois types de valeurs numériques
supportées : - Le type int qui représente tout entier positif ou négatif. - Le type float qui représente
les nombres décimaux et certaines expressions scientifiques comme le e pour désigner une exponen-
tielle par exemple. - Le type complex qui représente les nombres complexes ou nombres imaginaires
et qui se sert de la lettre j pour représenter la partie imaginaire d’un nombre.
• Le type de données “nombre entier” ou int (“int” = “integer” = entier) couvre tous les nombres
entiers positifs ou négatifs.
• On va pouvoir effectuer toutes sortes d’opérations arithmétiques avec ce premier type de
données : addition, soustraction, multiplication, division, élévation à la puissance, etc.
• Pour effectuer des opérations arithmétiques entre différentes valeurs numériques, ces opéra-
teurs arithmétiques sont utilisés: + pour l’addition, - pour la soustraction, etc.
• On va pouvoir effectuer ces opérations directement entre nombres et se servir de Python
comme une calculatrice ou affecter ces nombres à des variables.
• Le type de données “nombre décimal” ou float couvre tous les nombres décimaux (c’est-à-dire
les nombres à virgule) ainsi que certaines expressions scientifiques comme le e qui désigne une
exponentielle.
• Attention : dans le monde de la programmation, les notations anglo-saxonnes sont la norme.
Il faudra donc bien faire attention à utiliser un . et non une , pour les décimaux.
• Il y a différentes choses à noter par rapport au type float en Python :
– Toute opération arithmétique entre nombres de type float donne un résultat de type
float;
– Toute opération arithmétique entre nombres de types int et float donne un résultat de
type float;
– La division classique donne toujours un résultat de type float.
• None est vue comme une valeur Null dans d’autres langages de programmation.
[ ]: test = None
Le type booléen
9
• Le type booléen est un type qui ne contient que deux valeurs qui servent à représenter deux
états. Les deux valeurs sont True (vrai) et False (faux).
• Pour stocker un booléen dans une variable, il ne faut pas utiliser de guillemets : si on les
utilise, ce seront les chaines de caractères “True” et “False” qui seront stockés et on ne va pas
pouvoir effectuer les mêmes opérations.
• Les valeurs booléennes sont très utilisées en informatique. Elles sont notamment très utiles
pour valider ou invalider un test et sont au coeur des différentes structures de contrôle en
général.
• Les premiers caractères des valeurs booléennes sont toujours en majuscules (True et False).
[ ]: b = True
[ ]: b
Nombre complexe
x + yj ∈ C où a, b ∈ R .
[ ]: a = 3 + 4j
b = 4 + 1.5j
[ ]: a + b
[ ]: a - b
[ ]: a * b
[ ]: a / b
[ ]: type(age)
[ ]: poids = 67.5
[ ]: type(poids)
10
9.4 Les opérateurs Python
• Un opérateur est un signe ou un symbole qui va nous permettre de réaliser une opération. Le
signe = par exemple est en Python l’opérateur d’affectation simple : il permet d’affecter une
valeur à une variable.
• Python dispose de nombreux opérateurs qui peuvent être catégorisés comme suit :
– Les opérateurs arithmétiques ;
– Les opérateurs d’affectation ou d’assignation ;
– Les opérateurs de chaines ;
– Les opérateurs de comparaison ;
– Les opérateurs logiques ;
– Les opérateurs d’identité ;
– Les opérateurs d’appartenance ;
– Les opérateurs binaires.
• soustraction
[ ]: 34 - 12
• division
[ ]: 12 / 2
• division entière
[ ]: 12//2
• exposant
[ ]: 12**2
• multiplication
[ ]: 12*2
• modulo
11
[ ]: 12 % 3
[ ]: if "jeannot" in prenoms:
print("oui")
12
• Ces deux symboles remplissent donc un rôle relativement similaire que lorsqu’ils sont utilisés
avec des données de type numériques mais attention tout de même de ne pas confondre le
+ utilisé pour additionner deux nombres et le + utilisé pour concaténer deux chaînes de
caractères : on distingue ici bien deux opérateurs différents même si le même symbole est
utilisé.
[ ]: nom = "Denise"
[ ]: prenom = "Ntumba"
[ ]: fullname
[ ]: nom[2]
• Cependant, Python n’a pas de type de données chaînes de caractères, un seul caractère est
simplement une chaîne d’une longueur de 1.
• Quelques fonctions
[ ]: [Link]()
[ ]: [Link]()
[ ]: [Link]()
• Les chaines de caractères sont ce qu’on appelle communément du texte. Pour définir une
chaine de caractères ou pour stocker une chaine de caractères dans une variable, il faudra
l’entourer de guillemets simples ou doubles droits.
[ ]: nom = "Ntumba"
[ ]: nom
13
• Le caractère d’échappement en Python est l’antislash .
[ ]: concept = "je m\'appelle Denise"
[ ]: concept
9.5.2 Liste
• Une liste est en effet, par définition, composée d’une suite de valeur ou d’éléments.
• Pour définir une nouvelle liste en Python, on va devoir utiliser une paire de crochets [ ]. Les
différents éléments de la liste sont placés dans ces crochets en les séparant par des virgules.
On peut par exemple créer une liste de 5 éléments et la placer dans une variable liste comme
ceci :
[ ]: liste1 = [2,10,12,18,20]
[ ]: liste1
• De plus, vous devez savoir que tous les éléments d’une liste ne sont pas forcément du même
type, on va très bien pouvoir créer des listes composées de nombres, chaînes et booléens par
exemple :
[ ]: listes = [2,"Denise",True,4.5,20,2,3,5,4]
[ ]: listes
[ ]: listes = [2,"Denise",True,4.5,20,2,3,5,4]
[ ]: listes
[ ]: listes[1]
• On va également pouvoir récupérer une tranche de valeurs dans une liste, c’est-à-dire un
ensemble de valeurs qui se suivent. Pour cela, on utilisera le symbole : entre les crochets avec
0, 1 ou 2 indices autour.
• Si on utilise : sans indice, alors une copie superficielle de la liste sera renvoyée. Si on mentionne
un indice avant : mais pas d’indice après, alors une copie superficielle partielle de la liste de
14
départ sera renvoyée, en commençant à copier à partir de l’indice donné. Si au contraire on
mentionne un indice après : mais pas d’indice avant, une copie superficielle partielle de la liste
de départ sera renvoyée qui commence au début de la liste et jusqu’à l’indice donné. Enfin,
si deux indice sont mentionnés de part et d’autre de :, la tranche de valeurs correspondant à
ces indices sera renvoyée.
[ ]: listes = [2,"Denise",True,4.5,20,2,3,5,4]
[ ]: listes[1:4]
[ ]: prenoms = ["mol","francois","antho","laureine","denise"]
[ ]: prenoms[0]
[ ]: prenoms[0]="john"
[ ]: prenoms
[ ]: prenoms[:]=[]
[ ]: prenoms
9.5.3 Tuples
• Les chaînes de caractères et les listes sont deux types séquentiels de données : ce sont des
données qui sont organisées sous la forme de séquences de caractères ou de valeurs. Les tuples
sont un autre type séquentiel de données.
• Les tuples ressemblent aux listes : un tuple consiste en différentes valeurs entourées par
des virgules. Notez qu’on encadre généralement les valeurs d’un tuple avec un couple de
parenthèses même si cela n’est pas obligatoire.
• Les tuples peuvent contenir différents types de valeurs comme des nombres, des chaînes, des
listes etc. et même d’autres tuples imbriqués. Illustrons immédiatement cela :
[ ]: t1=(12,13,15)
15
[ ]: t2=(12,13,["mol","francois","antho","laureine","denise"])
[ ]: t2
• La grande différence entre un tuple et une liste est qu’un tuple est une donnée immuable à
la différence d’une liste qui est altérable. Cela signifie qu’on ne va pas pouvoir modifier les
valeurs d’un tuple après sa création.
• Il va donc être intéressant d’utiliser des tuples plutôt que des listes dans les cas où on veut
s’assurer que les données ne soient pas modifiées dans un programme.
9.5.4 Dictionnaires
• Les dictionnaires sont un type natif de données Python. Ce type de données peut, de la
même façon que les données séquentielles, contenir plusieurs valeurs et chaque valeur va être
indexée ce qui signifie qu’un indice unique va être attribué à chaque valeur.
• La grande différence entre les données séquentielles et les dictionnaires se situe dans la façon
d’indexer les valeurs et dans la nature de l’index. Dans le cas des séquences, les différentes
valeurs sont associées à des index numériques commençant à 0.
• Les dictionnaires laissent une liberté dans le choix d’index. La conséquence de cela est que
les valeurs d’un dictionnaire ne sont pas ordonnées à la différence des valeurs d’une séquence.
[ ]: d
[ ]: d["sport"]
• On utilise une nouvelle fois le syntaxe avec des crochets pour lire les différentes valeurs du
dictionnaire. Pour être tout à fait précis, on passe ici une clef entre crochets pour récupérer
la valeur qui lui est associée.
[ ]: d["telephone"]="0810568649"
16
[ ]: d
• Pour supprimer une paire clef : valeur d’un dictionnaire, nous allons utiliser l’instruction
del(abréviation de “delete” = supprimer en anglais) suivi du nom du dictionnaire avec la clef
de l’élément à supprimer entre crochets comme ceci :
[ ]: d
[ ]: del d["mail"]
[ ]: d
9.5.5 Ensemble
• Les ensembles sont utilisés pour stocker plusieurs éléments dans une seule variable.
• C’est l’un des 4 types de données intégrés à Python utilisés pour stocker des collections de
données, les 3 autres sont List, Tuple et Dictionary, tous avec des qualités et une utilisation
différentes.
• Dans un ensemble, les doublons non autorisés.
• Un ensemble est une collection non ordonnée, non modifiable et non indexée.
– Remarque : les éléments de l’ensemble ne sont pas modifiables, mais vous pouvez
supprimer des éléments et en ajouter de nouveaux.
[ ]: promotions = {"L1", "L2", "L3", "M"}
print(promotions)
[ ]: len(promotions)
[ ]: exemples
[ ]: exemples
Operations
[ ]: not [Link](promotions)
17
[ ]: [Link](exemples)
[ ]: [Link](promotions)
9.5.6 Pile
• Une pile est une structure de données linéaire qui stocke les éléments de manière Last-In/First-
Out (LIFO). - Dans la pile, un nouvel élément est ajouté à une extrémité et un élément est
supprimé à cette extrémité uniquement.
• Les opérations d’insertion et de suppression sont souvent appelées push et pop.
• Les opérations associées à la pile sont :
– empty(): retourne si la pile est vide.
– size(): renvoie la taille de la pile .
– top() / peek(): renvoie une référence à l’élément le plus haut de la pile .
– push(a): insère l’élément ‘a’ en haut de la pile.
– pop(): supprime l’élément le plus haut de la pile.
[ ]: [Link]('a')
[Link]('b')
[Link]('c')
pile
[ ]: print([Link]())
print([Link]())
print([Link]())
[ ]: print(pile)
pile_q.append('a')
pile_q.append('b')
pile_q.append('c')
print(pile_q)
[ ]: print(pile_q.pop())
print(pile_q.pop())
print(pile_q.pop())
18
[ ]: print(pile_q)
[ ]: [Link]('a')
[Link]('b')
[Link](1)
[ ]: print(file)
[ ]: print([Link](0))
print([Link](0))
print([Link](0))
[ ]: file
[ ]: file_q.append('a')
file_q.append('b')
file_q.append('c')
[ ]: file_q
[ ]: print(file_q.popleft())
print(file_q.popleft())
19
print(file_q.popleft())
[ ]: file_q
9.6.1 L’argument if
• La structure conditionnelle if est une structure de base qu’on retourne dans de nombreux
langages de script. Cette condition permet d’exécuter un code si (et seulement si) une certaine
condition est vérifiée.
• On va en fait passer une expression à cette condition qui va être évaluée par Python. Cette
expression sera souvent une comparaison explicite (une comparaison utilisant les opérateurs
de comparaison) mais pas nécessairement.
• Si Python évalue l’expression passée à True, le code dans la condition if sera exécuté. Dans
le cas contraire, le code dans if sera ignoré.
• Par exemple,
[ ]: age=18
if (age>18):
print("tu es majeur")
• Pensez bien à indiquer le : et à bien indenter le code qui doit être exécuté si la condition est
vérifiée.
20
[ ]: age =18
if(age>18):
print("tu es majeur")
else:
print("tu es minuer")
• L’argument else prend en charge tous les cas non pris en charge par le if.
9.7 Boucles
• Les boucles permettent d’exécuter plusieurs fois un bloc de code, c’est-à-dire d’exécuter un
code « en boucle » tant qu’une condition donnée est vérifiée.
• Python a deux types de boucles:
– La boucle while (“tant que…”);
– La boucle for (“pour…”).
• Le fonctionnement général des boucles sera toujours le même : on pose une condition qui sera
généralement liée à la valeur d’une variable et on exécute le code de la boucle « en boucle »
tant que la condition est vérifiée.
• Pour éviter de rester bloqué à l’infini dans une boucle, il est crucial que la condition donnée
soit fausse à un moment donné (pour pouvoir sortir de la boucle). Selon le type de condition,
on va avoir différents moyens de faire cela.
• La boucle while généralise la boucle for
21
– avec la boucle for, le nombre maximum d’iterations est connu en amont. Ceci n’est pas
le cas pour la boucle while.
• Littéralement, cette boucle signifie “tant que x stocke une valeur strictement inférieure à 10,
affiche la valeur de x puis ajoute 1 à cette valeur”.
• Note : Lorsqu’on ajoute 1 à une variable, on dit qu’on l’incrémente. À l’inverse, lorsqu’on en-
lève 1 à la valeur d’une variable, on dit qu’on la décrémente. Les opérations d’incrémentation
et de décrémentation sont très fréquentes au sein des boucles. On s’en sert généralement pour
que la condition d’exécution de la boucle soit fausse à un moment donnée.
[ ]: for i in prenoms:
print(i)
La fonction range()
• La fonction range() est utilisée pour itérer sur une suite de nombres avec une boucle for.
• Cette fonction permet de générer une suite de valeurs à partir d’un certain nombre et jusqu’à
un autre suivant un certain pas.
• Dans son utilisation la plus simple, quand un nombre est passé en argument (entre les paren-
thèses) de range(), la fonction génèrera une suite de valeurs de 0 jusqu’à ce nombre – 1 avec
un pas de 1. range(5) par exemple génère les valeurs 0, 1, 2, 3 et 4.
[ ]: for i in range(5):
print(i)
22
• Si on précise deux nombres en arguments de cette fonction, le premier nombre servira de
point de départ pour la génération de nombres tandis que le second servira de point d’arrivée
(en étant exclus). range(5, 10) par exemple permet de générer les nombres 5, 6, 7, 8 et 9.
[ ]: for i in range(5,10):
print(i)
• Finalement, on peut préciser un troisième argument de range() qui permet de préciser son pas,
c’est-à-dire l’écart entre deux nombres générés. Ecrire range(0, 10, 2) par exemple permet de
générer les nombres 0, 2, 4, 6 et 8.
[ ]: for i in range(0,10,3):
print(i)
9.8 Fonction
• Une fonction est un bloc de code nommé. Une fonction correspond à un ensemble
d’instructions créées pour effectuer une tâche précise, regroupées ensemble et qui va être
exécuté autant de fois souhaité en “l’appelant” par son nom. Notez “qu’appeler” une fonc-
tion signifie exécuter les instructions qu’elle contient.
• Une fonction encapsule la complexité de code.
• Les fonctions Python peuvent être prédéfinies ou créées par l’utilisateur.
23
9.8.2 Les fonctions définies par l’utilisateur
• En plus des fonction prédéfinies, Python laisse au programmeur la possibilité de définir des
fonctions. Ces fonctions ne seront bien évidemment disponibles et utilisables que dans l’espace
où elles ont été définies.
• Les fonctions vont aussi être de très bons outils d’abstraction lorsqu’on voudra distribuer le
code : on préférera souvent fournir des fonctions à utiliser aux autres développeurs plutôt
que de les laisser se débrouiller avec des séries d’instructions “sauvages”.
• Pour définir une nouvelle fonction en Python, le mot clef def est utilisé, qui sert à introduire
une définition de fonction. Ce mot clef doit être suivi du nom de la fonction, d’une paire de
parenthèses au sein desquelles on pourra fournir une liste de paramètres et de : pour terminer
la ligne comme ceci def ma_fonction():.
• Le nom d’une fonction Python doit respecter les normes usuelles des noms : un nom de
fonction doit commencer par une lettre ou un underscore et ne contenir que des caractères
alphanumériques classiques (pas d’accent ni de cédille ni aucun caractère spécial).
• Notez que les noms de fonctions sont sensibles à la casse en Python. Par exemple les fonctions
ma_fonction(), Ma_fonction(), ma_FONCtion() et MA_FONCTION() sont différentes.
• Exemple d’une fonction sans paramètres
[ ]: def bonjour():
print("Bonjour")
[ ]: bonjour()
[ ]: somme(10, 5)
[ ]: produit(2, 1, 4)
[ ]: produit(3, 2)
[ ]: produit(z=2, x= 4, y=1)
• Il est à noter que les paramètres par défaut occupent toujours les dernières places
dans la liste des paramètres.
• On peut changer l’ordre de paramètres d’une fonction lors de l’utilisation. Dans ce cas, les
noms de paramètres doivent être specifiés
24
9.8.3 Fonction anonyme
• Les fonctions anonymes sont utilisées lorsqu’il n’est pas nécessaire de nommer une fonction.
• Les lambda montrent leur utilité lorsque des fonctions qui prennent une autre fonction comme
argument sont utilisées. Un exemple d’une telle fonction en python pourrait être : filter(),
map() ou reduce().
• Exemple de la fonction lambda
[ ]: sum_lambda = lambda x,y : x+y
[ ]: sum_lambda(1, 2)
[ ]: def mon_filtre(x):
return x >5
25
• Par exemple, les fonctions round(), sum(), min() et max().
• La fonction round() permet d’arrondir un nombre spécifié en argument t à l’entier le plus
proche avec un degré de précision (un nombre de décimales) éventuellement spécifié en deux-
ième argument.
• Le nombre de décimales par défaut est 0, ce qui signifie que la fonction retournera l’entier le
plus proche.
• La fonction sum() permet de calculer une somme. On peut lui passer une liste de nombres en
arguments par exemple. On peut également lui passer une valeur “de départ” en deuxième
argument qui sera ajoutée à la somme calculée.
• La fonction max() retourne la plus grande valeur d’une donnée itérable, c’est-à-dire d’une
donnée dont on peut parcourir les différentes valeurs.
– On peut lui passer autant d’arguments qu’on souhaite comparer de valeurs. Notez qu’on
peut également comparer des chaines même si max() est peu souvent utilisée pour faire
cela.
• La fonction min(),
La librairie Math
[ ]: import math as m
[ ]: [Link](10.4)
[ ]: [Link](10.4)
[ ]: [Link](0)
[ ]: [Link](1)
La librairie Numpy
[ ]: import numpy as np
A = [Link]([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
[ ]: [Link]
[ ]: [Link](axis=1)
[ ]: [Link](axis=0)
[ ]: [Link](axis=0)
[ ]: [Link](A)
26
Ax = b
Solution
x = A−1 b
−1 1 1
A = 2 −1 3
−1 2 6
1
b = 2
4
27
Pourquoi les codes suivants sont-ils incorrects ?
[ ]: elif b==10: print("This is true")
[ ]: a=10.
if a>5: print("greater than 5") else: print("less than 5")
Les erreurs de syntaxe sont dues à l’immaturité des programmeurs. Mais plus vous
faites d’erreurs, plus vous devenez mature. Une erreur de syntaxe ne peut pas être
gérée.
La seule façon de gérer l’erreur de logique est de vérifier votre cerveau… Sinon,
humiliez-vous et posez des questions à vos collègues.
9.9.2 Exceptions
[ ]: in_value=10.0
out_value=in_value/0
print (out_value)
28
#traitement d'erreur
except typeofError:
#traitement d'erreur
except:
#traitement d'erreur
finally:
#codes sans erreurs
29
print (err_name)
[ ]: try:
a=input("Lire une chaine de caractere comme valeur: ")
b=int(a)
print("L'entier est: ", b)
except ValueError as err_name:
print (err_name)
[ ]: x=[2,4,7]
sumof(x)
[ ]: x=3
y=1
powerof(x, y)
9.10 Visualisation
La visualisation des données améliore la communication des informations que vous souhaitez
partager de manière claire et compréhensible. La visualisation peut être textuelle, tabulaire ou
graphique. Bien qu’il y ait des gens qui l’ont dans leurs gènes, mais cette compétence (visualisa-
tion) peut être apprise, et dans la plupart du temps en pratiquant. Objectifs d’apprentissage
30
Qu’est-ce que la visualisation des données ?
Modes de visualisation des données.
Principes de choix du type de visualisation à utiliser.
Utilisation de divers types de visualisation de données.
Utilisation de Matplotlib pour les types courants de visualisation de données.
Utilisation de Pandas pour l’analyse des données.
Utilisation de Networkx pour Graph.
9.10.1 Principes
Dans quel cas la visualisation graphique peut être plus appropriée que la visualisation
textuelle ou tabulaire ?
Choisissez une visualisation textuelle, tabulaire ou graphique :
• On veut connaître la moyenne des étudiants en L2 LMD sur les dix dernières années. Quel
type de visualisation est le plus approprié ? Pourquoi? Donnez la structure de votre sortie.
• Un autre souhaite connaître le nombre total d’étudiants en Informatique par université. Quel
type de sortie est le plus approprié ? Pourquoi?
• La visualisation n’est pas unique.
[ ]: # vos réponses
Ne faites pas ce que vous voulez, mais ce que les données exigent.
31
L’utilisation de %style peut être utile. Le style peut être une chaîne (%s), un flottant (%f), un
entier (%d). L’utilisation de % ou format aide à référencer les données à imprimer.
ou
[ ]: for item in etudiants:
print('{} {} {}'.format (item[0],item[1],item[2]))
Padding: le rend meilleur. On peut définir la longueur des différentes chaînes avec %length s.
[ ]: for item in etudiants:
print('%15s %15s %15s' % (item[0],item[1],item[2]))
32
Black
40
Red
31
Bold
1
Cyan
46
Blue
34
Underline
2
Whyte
47
…
…
…
…
…
…
[ ]: print('\033[1;34;47m {:>15} {:>15} {:>15}'.format␣
,→("Name","Country","Background"))
• Répétition d’un caractère spécifique soit au début soit à la fin de la chaîne en faisant :
[ ]: '{:*>10}'.format('student')
33
• Combine padding and truncating
[ ]: '%-15.10s' % ('I am in South Africa')
• Nombres formatés
[ ]: info=[[10, 10, 12.45], [5, 11, 12.45421]]
for item in info:
print('%d %4d %.3f' % (item[0],item[1],item[2]))
[ ]: n = [n for n in range(1,5)]
df = [Link](etudiants, columns=["Nom", "Pays", "Background"], index=n)
[ ]: df
• Nous pouvons enregistrer le résultat dans un fichier externe tel que csv.
[ ]: df.to_csv("[Link]", sep=',', header=True)
34
[ ]: data.T
[ ]: [Link]()
[ ]: print([Link][:,'gdpPercap_2007'])
• Puisqu’il s’agit d’une colonne, vous pouvez obtenir le même résultat avec
[ ]: data["gdpPercap_2007"]
[ ]: data.gdpPercap_2007
[ ]: [Link]["Angola":"Egypt", "gdpPercap_1962":"gdpPercap_1972"].max()
[ ]: [Link]["Angola":"Egypt", "gdpPercap_1962":"gdpPercap_1972"].min()
35
[ ]: [Link]()
[ ]: [Link]()
[ ]: subset=[Link]["Angola":"Egypt", "gdpPercap_1962":"gdpPercap_1972"]
subset
Matplot Matplotlib est une bibliothèque Python qui dessine des figures en 2D et 3D.
[ ]: # Python library for plotting
import [Link] as plt
# %matplotlib inline
[ ]: #list of ages
age=[18, 20, 24, 19, 17]
#plot of list
[Link](age)
#setting of y label
[Link]('Ages')
#showing figure
[Link]()
• Afficher le vecteur Âges contre vecteur Pourcentages : les deux listes doivent avoir la même
taille.
[ ]: percentages=[60, 80, 90, 95, 98]
[Link](percentages, age)
[Link]('Percentages')
36
[Link]('Ages')
[Link]()
Axe de la figure : une idée de la raison pour laquelle le code suivant n’affiche pas le graphique ?
Corrigez-le le cas échéant.
[ ]: [Link](percentages, age, 'bo')
[Link]([10, 25, 50, 100])
[Link]()
Latex in Matplotlib:
** r’$latex command$’ **
[ ]: [Link]('number of students ('r'$\delta$)')
[Link]('countries ID ('r'$\mu$)')
[Link]('Histogram of Frequency')
[Link](3, 30, r'$\mu=54,\ \delta=56$')
[Link]([0, 10, 1, 54])
[Link](True)
[Link]()
37
Multi subfigures
[ ]: import numpy as np
data=[x for x in [Link](1., 20., .75)]
squareddata=[Link](data, 2)
cubeddata=[Link](data, 3)
[Link](211)
[Link](xdata, f(xdata), 'bo', ydata, f(ydata), 'k')
[Link](222)
[Link](ydata, [Link](2*[Link]*ydata), 'r--')
[Link](233)
[Link](xdata, [Link](2*[Link]*xdata), 'ro')
[Link]()
Scatter: tente de montrer la corrélation entre les variables ou de comparer un grand nombre de
points de données.
38
[ ]: points=[Link](0, 2, (1000,2))
[Link]('x')
[Link]('y')
[Link](points[:,0], points[:,1],
marker=',', edgecolor='r', s=3)
[Link]()
Histogram: est utilisé pour tracer la fréquence des occurrences dans une donnée continue qui a
été en classes (bins). Cela peut aider à percevoir la distribution sous-jacente des données.
[ ]: x =120 + 22 * [Link](200)
n, bins, patches =[Link](x, bins=20, facecolor='r')
[Link]('Interval')
[Link]('Frequency')
[Link]('Histogram')
[Link]([40, 160, 0, 30])
[Link](True)
[Link]()
[ ]: n
[ ]: bins
Bar Chart: est utilisé pour montrer la fréquence des occurrences dans les variables ordinales et
nominales.
[ ]: countries = ('RSA', 'Benin', 'Botwana', 'Zambia', 'Burundi', 'Algeria',␣
,→'Swaziland', 'Ghana', 'Egypt', 'Madagascar')
y_pos = [Link](len(countries))
effectives = [2,1,3,2,2,2, 2, 2, 2, 5]
Boxplot: Il affiche le résumé des chiffres statistiques des données ou la distribution des données
en fonction de : minimum, premier quartile, médiane, troisième quartile et maximum.
[ ]: data=[Link](10, 2)
data
39
[ ]: [Link](data)
[Link]()
Exercise
Combinez the deux histograms, le pie et the boxplot ci-dessus dans une seule figure.
[ ]: # votre réponse
• Ajouter un sommet
[ ]: G.add_node("A")
[ ]: [Link]()
• Ajouter un arc
[ ]: G.add_edge("A","B")
40
[ ]: G.add_edges_from([("A","C"),("B","C")])
[Link]()
[ ]: G.has_node("A"), G.has_edge("D","E")
• Dessinez un graphe
[ ]: nx.draw_networkx(G, with_labels=True)
[Link]('off')
[Link]()
[ ]: print([Link]())
[ ]: [Link]()
[ ]: [Link]()
[ ]: [Link]()
• Effacer le graphe G
[ ]: [Link]()
[ ]: [Link]()
[ ]: [Link]()
41
• Obtenir le nombre de nœuds et d’arêtes
[ ]: G.number_of_nodes(), G.number_of_edges()
[ ]: G.remove_edge(1,2)
[ ]: [Link](), [Link]()
[ ]: [Link](G,1)
[ ]: [Link](1)
[ ]: [Link]([1,2])
Graphe orienté
[ ]: DG=[Link]()
[ ]: pos={"A":[1, 1], "B":[0, 0], "C":[2, 0], "D":[1, -1], "E":[3, 1], "F":[3, -1]}
edge_labels=dict([((u,v,),d['weight']) for u,v,d in [Link](data=True)])
nx.draw_networkx_edge_labels(DG,pos,edge_labels=edge_labels)
nx.draw_networkx(DG, pos=pos)
[Link]('off')
[Link]()
[ ]: nx.dijkstra_path_length(DG,'B','F')
[ ]: DG.out_degree('A',weight='weight')
42
[ ]: [Link]('C',weight='weight')
[ ]: [Link]('A'), [Link]('C')
9.11 Documentation
[ ]: import numpy as np
def fxname(A, p):
"""
Returns a...
Parameters
----------
A: matrice de dimension n x m
p: nombre maximum
"""
farthest=[]
for k in range(p):
index=[Link](A)
i, j= getI(index, n, n)
[Link](data[i])
[Link](data[j])
A[i, j]=0
A[j, i]=0
return farthest
[ ]: help(fxname)
43