0% ont trouvé ce document utile (0 vote)
2 vues83 pages

Programmation Python Gpe - m1

Le chapitre 2 traite des modules Python pour l'analyse des données, en se concentrant sur Numpy, Pandas et Matplotlib. Il explique la définition, la création et l'importation de modules, ainsi que les structures de données et les manipulations offertes par Numpy et Pandas. Enfin, il aborde la visualisation des données avec Matplotlib, y compris la création de graphiques et l'utilisation de sous-graphiques.

Transféré par

jeanjacquesanicet2010
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
2 vues83 pages

Programmation Python Gpe - m1

Le chapitre 2 traite des modules Python pour l'analyse des données, en se concentrant sur Numpy, Pandas et Matplotlib. Il explique la définition, la création et l'importation de modules, ainsi que les structures de données et les manipulations offertes par Numpy et Pandas. Enfin, il aborde la visualisation des données avec Matplotlib, y compris la création de graphiques et l'utilisation de sous-graphiques.

Transféré par

jeanjacquesanicet2010
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Chapitre 2: Modules Python pour l’analyse des données

▷ I. Généralités sur les Modules


▷ I.1. Définition
▷ I.2. Création de modules
▷ I.3. Importation des modules
▷ II. Numpy
▷ II.1. Importation
▷ II.2. Vectorisation dans Numpy
▷ II. 3. Sélection dans Numpy
▷ III. Pandas
▷ III.1. Importation
▷ III.2. Séries et dataframes
▷ III. 3. Manipulation des dataframes
▷ IV. Matplotlib
48
1
Définition
On appelle module, tout fichier constitué de code Python importé dans
un autre fichier ou script.

Les modules permettent la séparation et donc une meilleure organisation


du code.

En Python, on distingue selon leur éditeur :


oLes modules standards qui ne font pas partie du langage en soi mais
sont intégrés automatiquement par Python ;
oLes modules développés par des développeurs externes qu’on va
pouvoir utiliser ;
oLes modules qu’on va développer nous mêmes.
2
49
Importation
Pour utiliser un module, on doit l’importer dans le script.
Syntaxe : import nom_du_module
Exemple : import math

Pour utiliser les éléments du module dans notre script, il faudra préfixer
le nom de ces éléments par le nom du module et un point.
Exemple : [Link](25)

On peut créer un alias pour un nom de module à l’aide du mot clé as.
Exemple : import pandas as pd

3
50
Importation
On peut importer uniquement certains éléments du module.
Syntaxe : from nom_du_module import un_element

Dans ce cas, il ne faudra pas ensuite préfixer le nom des éléments par le
nom du module pour les utiliser dans notre script principal.
Exemple : from math import sqrt
sqrt(25)

Pour obtenir la liste des éléments d’un module :dir()


Syntaxe : dir(nom_du_module)

4
51
Quelques modules standards
Ce sont les modules préconçus et prêts à l’emploi qui sont fournis d’office avec
Python.
Les modules Python standards à connaitre sont les suivants :
o cgi (Common Gateway Interface) fournit des éléments permettant à des
programmes Python de s’exécuter sur des serveurs HTTP ;
o datetime fournit des classes pour manipuler de façon simple ou plus complexe des
dates et des heures ;
o json permet l’encodage et le décodage de données au format JSON ;
o math fournit un ensemble de fonctions permettant de réaliser des calculs
mathématiques complexes ;
o os fournit une manière portable d’utiliser les fonctionnalités dépendantes du
système d’exploitation ;
o pickle permet de sérialiser des objets Python ;

5
52
Création de module
Elle consiste à créer un script Python.
Exemple :
1. Créer un fichier `[Link]` (dans le dossier de référence de Python) contenant :
nom = ‘Habiba’
def disbonjour():
print(nom, ‘vous dit bonjour!’)
2. On va importer notre module dans l’invite de commande grâce à l’instruction import
bonjour.
3. On peut donc accéder aux éléments du module
[Link]()
Remarque : le dossier _pycache_ contenant un fichier de cache permet d’optimiser les
prochaines exécutions

6
53
Numpy
La structure de données de base dans NumPy est le ndarray ou tableau à n
dimensions.
Array décrit une collection d'éléments, semblable à une liste.
Les ndarrays peuvent avoir une ou plusieurs dimensions.

NumPy est généralement importé en utilisant l'alias np: import numpy as np


La conversion d’une liste en ndarray se fait en utilisant le constructeur
[Link]().
Pour créer un ndarray 1D, nous pouvons passer dans une seule liste.

Exemple :
data_ndarray = [Link]([5, 10, 15, 20])
7
54
Numpy
Il est possible de remplacer la boucle for par des opérations appliquées
à plusieurs données à la fois.
Il s’agit du principe de la vectorisation.
Exemple : Somme de vecteurs
Une méthode consiste à utiliser une liste de listes :

8
55
Numpy
Exemple : Somme de vecteurs

Le calcul séquentiel:

9
56
Numpy
Séquentiel:

Vectorisation

10
57
Numpy
Numpy en dimension 2:

data_ndarray = [Link]([[5, 10, 15],


[20, 25, 30]])
L'attribut shape nous permet d'obtenir la taille de l’objet (la matrice).

print(data_ndarray.shape)

Cet attribut livre un tuple constitué du nombre de lignes et celui de colonnes.

11
58
Numpy en dimension 2
Pour la sélection d’une ligne
Méthode de liste de listes Méthode Numpy

sel_lol = data_lol[1] sel_np = data_np[1]

Pour la sélection de plusieurs lignes

sel_lol = data_lol[2:] sel_np = data_np[2:]

Pour la sélection d’un seul élément


sel_lol = data_lol[1][3] sel_np = data_np[1,3]
12
59
Numpy en dimension 2
Méthode de liste de listes Méthode Numpy
Pour la sélection d’une colonne
sel_lol =[]
for row in data_lol: sel_np = data_np[:,3]
col4 = row[3]
sel_lol.append(col4)

Pour la sélection de plusieurs colonnes

sel_lol = []
for row in data_lol: sel_np = data_np[:,1:3]
col23 = row[1:3]
sel_lol.append(col23)

13
60
Numpy en dimension 2
Sélection de plusieurs colonnes spécifiques
Méthode de liste de listes
Méthode Numpy
sel_lol =[]
for row in data_lol:
cols = cols= [1,3,4]
[row[1],row[3],row[4]] sel_np = data_np[:,cols]
sel_lol.append(cols)

Exercice : Sélectionner avec les deux méthodes les cellules ci-dessous

14
61
Solution

sel_lol =[] sel_lol =[]


sel_lol =data_lol[2][1:4] rows =data_lol[1:] rows =data_lol[1:4]
for row in rows: for row in rows:
col5 = row[4] new_row = row[:3]
sel_lol.append(col5) sel_lol.append(new_row)

sel_np = data_np[2,1:4] sel_np = data_np[1:,4] sel_np = data_np[1:4,:3]

15
62
Module pandas

16
63
Limites de Numpy
NumPy fournit des structures et des outils fondamentaux qui facilitent le travail
avec les données.

Numpy présente des limites:


omanque de prise en compte des noms de variables
oprise en compte d'un seul type de données par ndarray (ne peut manipuler à
la fois des données numériques et des chaînes).

Pandas, extension de NumPy, fournit des solutions à tous ces problèmes et plus
encore !

17
64
Objets Pandas
La structure de données principale pandas est appelée un dataframe.

Les dataframes sont l'équivalent pandas d'un ndarray Numpy 2D, avec quelques
différences clés:

oles valeurs d'axe peuvent avoir des étiquettes de chaîne, pas seulement des
étiquettes numériques.
oles dataframes peuvent contenir des colonnes avec plusieurs types de
données: nombre entier, flottant et chaîne.

18
65
Importation de Pandas
import pandas as pd

 Pandas manipule deux types d’objets: les Series et les DataFrames

 Ces deux structures de données sont l’épine dorsale de Pandas.

 Beaucoup de similitude avec les bases de données relationnelles.

19
66
Les Séries
Les Series structurent des ensembles de données simples et unidimensionnels
en associant chaque élément de données à une étiquette unique.

Une série se compose de deux tableaux :


o le tableau principal qui contient les données
o le tableau d'index qui contient les étiquettes appariées.

Exemple
s = [Link]([10.8,10.7,10.3,7.4,0.25],
index = ['VW','Toyota','Renault','KIA','Tesla‘])

20
67
Les Dataframes
Le DataFrame introduit une nouvelle dimension dans la structure de
données Series.

21
68
Les dataframes
Un DataFrame a des index(comme les séries) et un ensemble de colonnes.
Chaque colonne peut stocker un type de données différent.
Exemple
data = {
'Company':['VW','Toyota','Renault','KIA','Tesla'],
'Cars Sold (millions)' :
[10.8,10.7,10.3,7.4,0.25],
'Best Selling Model' :
['Golf','RAV4','Clio','Forte','Model 3']
}
Frame = [Link](data)
22
69
Les manipulations des fchiers dans Pandas
Pandas introduit un ensemble de fonctions pour manipuler des fichiers.
Syntaxe :
Importation des données d’autres formats dans Pandas.
pd.read_filetype = (filename or path)
Exportation des données de Pandas dans d’autres formats.
df.to_filetype = (filename or path)
Read Write
pd.read_csv (‘[Link]’) df.to_csv (‘filename or path’)
pd.read_excel (‘[Link]’) df.to_excel (‘filename or path’)
pd.read_json (‘[Link]’) df.to_json (‘filename or path’)
pd.read_html (‘[Link]’) df.to_html (‘filename or path’)
pd.read_sql (‘tablename’) df.to_sql (‘DB Name’)
Sélection dans Pandas
La syntaxe générale de sélection dans Pandas est :
[Link][row_label, column_label]
Sélection d’une colonne Sélection d’une ligne

single_col = df["D"] single_row = [Link]["v"]


single_col = [Link][:, "D"]
24
71
Les Séries
Sélection de plusieurs colonnes Sélection de ++ lignes

mult_cols = df[["A","C", "D"]] mult_rows = [Link][["v", "w", "x"]]

25
72
Les Séries
Selection par étiquette Syntaxe explicite Raccourci syntaxique
Colonne simple du dataframe [Link][:,"col1"] df["col1"]
Liste de colonnes du dataframe [Link][:,["col1", "col7"]] df[["col1", "col7"]]
Sous-ens de colonnes du dataframe [Link][:,"col1":"col4"]
Ligne simple du dataframe [Link]["row4"]
Liste de lignes du dataframe [Link][["row1", "row8"]]
Sous-ens de lignes du dataframe [Link]["row3":"row5"] df["row3":"row5"]
Un Seul élément de la série [Link]["item8"] s["item8"]
Liste d'éléments de la série [Link][["item1","item7"]] s[["item1","item7"]]
Sous ensemble d'éléments de la série [Link]["item2":"item4"] s["item2":"item4"]

26
73
L’indexation booléenne
L’indexation booléenne fonctionne également dans Pandas
Exemple : Soit le dataframe ci-dessous contenant des noms et des numéros
préférés

Quelles sont les personnes dont le numéro préféré est 8?


27
74
L’indexation booléenne
L’indexation booléenne fonctionne également dans Pandas
Exemple : Soit le data frame ci-dessous contenant des noms et des numéros
préférés
On s’intéresse aux personnes dont le numéro préféré est 8.
num_bool = df [‘num’] == 8

result = df [num_bool]

28
75
L’indexation booléenne
L’utilisation de .loc

result = [Link][num_bool, ‘name’]

29
76
Sélection dans Pandas avec iloc
L’utilisation de [Link] permet de sélectionner en utilisant les entiers.

Syntaxe : [Link][row_index, column_index]


30
77
Sélection avec iloc

31
78
Gestion des fichiers sous pandas
Lecture d’un fichier csv :
Exemple:
import pandas as pd
f500 = pd.read_csv('[Link]',index_col=0)
[Link] = None
Comme les ndarrays de NumPy, les dataframes ont un attribut .shape qui
renvoie un tuple représentant les dimensions de chaque axe de l'objet.
Nous utiliserons cela et la fonction type() de Python pour explorer le dataframe
f500.
Méthodes : [Link](), [Link](), [Link](), [Link]()
Exercice : voir notebook
32
79
Module Matplotlib

33
80
Introduction
La bibliothèque de création des graphiques pour la visualisation des données
est matplotlib.
Le module pyplot fournit une interface de haut niveau pour matplotlib.
Ce module est généralement importé en tant que plt depuis matplotlib.

import [Link] as plt


[Link]()
[Link]()
Pour l'utilisation combinée de Matplotlib et de Jupyter
%matplotlib inline

34
81
Construction de premiers graphiques
import numpy as np

import [Link] as plt


%matplotlib inline

x = [Link](-1.0,1.0,num=100)
squares = [val ** 2 for val in x]
[Link](x,squares)

35
82
Mise en forme d’un graphique : Titre, noms des axes, limites
import numpy as np
import [Link] as plt

%matplotlib inline
x = [Link](-1.0,1.0,num=100)
squares = [val ** 2 for val in x]
linfunc = [1 - abs(val) for val in x]

[Link]('Titre du graphique’)
[Link]('Abscisse’)
[Link]('Coordonnée’)
[Link](-1.2,1.2)
[Link](-0.2,1.2)

[Link](x,squares)
[Link](x,linfunc)

[Link]('ab’)
[Link]()

36
82
Multiples courbes : t, t2
Courbes des fonctions suivantes : f(t)=t, g(t)=t2, h(t)=t3, j(t)=30t, etc.
# x axis data
t = [Link](0., 5., 0.2)
# red dashes, blue squares, green triangles, yellow line
[Link](t, t, 'r--’,)
[Link](t, t**2, 'bs’)
[Link]( t, t**3, 'g^’)
[Link]( t, 30*t, 'y’)

[Link]('x value’)
[Link]('y value’)
[Link](-5,100)

37
82
Sous – graphiques avec sub-plots
L’utilisation de sub-plots facilite la comparaison et l’analyse des résultats
x = [Link](0, 2 * [Link], 360)
y = [Link](x ** 2)
fig, axs = [Link](2)
[Link]('Vertically stacked subplots’)

axs[0].plot(x, y)
axs[1].plot(x, -2*y)

38
82
Sous – graphiques avec sub-plots
L’utilisation de sub-plots facilite la comparaison et l’analyse des résultats
x = [Link](0, 2 * [Link], 360)
y = [Link](x ** 2)
fig, axs = [Link](1,2, sharey = True)
[Link](‘Horizontally stacked subplots’)

axs[0].plot(x, y)
axs[1].plot(x, -2*y)

39
82
Echelle logarithmique
# x axis data
t = [Link](0., 10., 0.5)
# red dashes, blue squares, green triangles, yellow line

[Link](t, t**2, 'b’)


[Link]( t, [Link](t), 'r’)

[Link]('x value’)
[Link]('y value (log scale)’)
[Link](‘log’)
[Link]()

TPE : Laquelle des courbes est la function exponentielle ?


40
82
Graphique à bandes
pays = ['USA','DE','UK','CA’]
obesity = [30,16,20,18]
x = [Link](len(pays))
[Link](x, obesity)
[Link](x,pays)

[Link]('Obesity prevalence’)
[Link]('Country’)
[Link]('Population percentage')

41
82
Nuage de points
temp = [14.2, 16.4, 11.9, 15.2, 18.5, 22.1, 19.4, 25.1,
23.4, 18.1, 22.6, 17.2]
vente_glace= [215, 325, 185, 332, 406,522, 412, 614,
544, 421, 445,408]
[Link](temp,vente_glace)
[Link](0,750)
[Link]('Temperature à midi(degrées)')
[Link]('Total des ventes’)
[Link]('Vente de glace’)

42
82
Sauvegarde de graphiques
import numpy as np
from matplotlib import pyplot as plt
%matplotlib inline

a = [1,3,5,3] # plotting the curves for


b = [1,5,7,4] # different values of a/b
delta = [Link]/2
t = [Link](-[Link],[Link],300)

for i in range(0,4):
x = [Link](a[i] * t + delta)
y = [Link](b[i] * t)
[Link](2,2,i+1)
[Link](x,y)

[Link]('Courbes de Lissajous’)
[Link]('[Link]')

43
82
Utilisation de la base de données iris
Nous chargeons la base Importer la fonction load_iris pour charger les
données
from [Link] import load_iris

iris = load_iris()

data = [Link](iris["data"], columns=iris["feature_names"])

data = [Link](species = iris["target"])

44
84
Construction d’un nuage de points avec plot
Avec les données d’iris

[Link](kind ="scatter",
x ='sepal length (cm)',
y ='petal length (cm)’)
[Link]()

45
85
Construction d’un histogramme avec hist

[Link](figsize = (10, 7))


x = data["sepal length (cm)"]

[Link](x, bins = 20, color = "green")

[Link]("Sepal Length in cm")


[Link]("Sepal_Length_cm")
[Link]("Count")

46
86
Construction des boîtes à moustaches avec boxplot

La méthode boxplot() permet de construire des boîtes à moustaches

[Link](figsize = (10, 7))

[Link]()

Rappel : Comment interpréter un boxplot?

47
87
Construction de plusieurs graphiques
names = ['jhon', 'Sanjay', 'Ellen','Sandra','Nancy','Shubham','Philip’]
scores = [10,15,20,30,40,50,100]
[Link](figsize=(15, 5))
[Link](231)
[Link](names, scores)
[Link](232)
[Link](names, scores)
[Link](233)
[Link](names, scores)
[Link](234)
[Link](names, scores)
[Link]('Categorical Plotting')
[Link]()
48
88
Module Seaborn

49
89
Construction de plusieurs graphiques
Seaborn est une librairie construite sur Matplotlib qui fournit une
interface de plus haut niveau.

Seaborn offre une alternative souvent plus agréable pour créer des graphiques
complexes.

Plus simple et plus beau, mais peut-être un peu moins flexible.

50
90
Importation du module
import seaborn as sns

sns.set_style("whitegrid")

[Link](data, hue ="species",


height = 6).map([Link],
"sepal length (cm)",
"petal length (cm)").add_legend()

51
91
Quelques fonctions / méthodes essentielles
lmplot()

lm (linear model regression) construit le nuage et son ajustement lineaire


entre deux variables

Syntaxe: [Link](‘var1’,’var2', data=ourdata)


[Link](x=‘var1', y=‘var2', data=ourdata, fit_reg=False)
[Link](x=‘var1', y=‘var2', data=ourdata, fit_reg=False,hue=‘var3')

52
92
Quelques fonctions / méthodes essentielles
Heatmap()
# Matrice des corrélations
corr = [Link]()

# Création de heatmap
[Link](figsize=(10,10))
[Link](corr)

[Link](figsize=(10,10))
[Link](corr, annot=True)
53
93
Quelques fonctions / méthodes essentielles
pairplot():
Permet la visualisation des variables deux à deux

[Link](ourdata[['Defense','Attack','HP']],kind='scatter’)
[Link]()

[Link](ourdata[['Defense','Attack','HP']], kind='scatter', diag_kind ='kde')


[Link]()
54
94
Quelques fonctions / méthodes essentielles
Autres fonctions :
[Link](data['number_of_doors'], data['horsepower’])

[Link](data['number_of_doors'], data['horsepower’])

[Link](data['number_of_doors'], data['horsepower’])

[Link](data['fuel_type'])

55
95
Chapitre 3: Programmation Orientée Objet

▷ I. Généralités sur la Programmation OO


▷ I.1. Introduction
▷ I.2. Définition des premiers concepts
▷ II. Héritage
▷ II.1. Définition
▷ II.2. Sous-classe
▷ II. 3. Surcharge
▷ [Link] d’héritage
▷ III. Polymorphisme

96
56
Introduction
Python est un langage orienté objet, ce qui signifie que le
langage tout entier est construit autour de la notion d’objets.

Objet : entité qui possède un ensemble de variables (attributs)


et de fonctions (méthodes) qui lui sont propres.

Les objectifs principaux de la POO : créer des scripts plus clairs,


mieux structurés, plus modulables et plus faciles à maintenir et
à déboguer.
57
97
Notion de classe
Une classe est un ensemble cohérent de code qui contient
généralement à la fois des variables et des fonctions et qui sert à la
création des objets.
Création : class suivi du nom de la classe.
Exemple :
class Utilisateur :
statut = ‘inscrit ’
age = 10
def setNom(self,name):
[Link] = name
Instanciation : Pierre = Utilisateur()
58
98
Notions d’Attribut et de Méthode
Les objets créés à partir d’une classe ont accès aux attributs de
données et aux méthodes.
Exemples :
[Link] --------- > ‘inscrit’
[Link] ----------- > 10
[Link](‘Pierre’)
Les objets peuvent définir des valeurs personnalisées pour leurs
attributs de données
L’on peut définir de nouveaux attributs de données qui vont être
propres à un objet en particulier dans une classe.
[Link] = ‘Admin’, [Link] = ‘Homme’
Mais Anne = Utilisateur() et [Link] ----# erreur 99
59
Héritage
En POO: hériter = avoir également accès à.

Lorsqu’on dit qu’un objet “hérite” des méthodes de la classe qui l’a
défini, cela signifie que l’objet peut utiliser ces méthodes i.e qu’il y a
accès.

Héritage est possible entre deux classes : création des “sous-classes”


ou des classes “enfants” à partir de classes de base ou classes
“parentes”.

60
100
Héritage : Sous - classe
POO: hériter = avoir également accès à.
Exemple de définition de sous-classe
class Utilisateur :
anciennete = 0
def _ _init_ _(self, nom, age):
self.user_name = nom
self.user_age = age
def getNom(self):
print(‘ Salut!, je suis’, self.user_name)
class Client (Utilisateur):
is_client = True
61
101
Héritage - Sous - classe
o Classe de base : Utilisateur
o Sous – classe : Client

o Par défaut, la sous-classe hérite des attributs et méthodes


de la classe parent (et en particulier de __init__())
o Elle peut définir ses propres attributs et méthodes.

o On peut instancier la sous-classe pour créer de nouveaux


objets, ils ont alors accès aux attributs et méthodes de la
sous-classe et de la classe de base.
62
102
Héritage - Sous - classe
Exemples
eric = Utilisateur(‘Eric’, 30)
pierre = Client(‘Pierre’, 15)
pierre.user_name ---- > ‘Pierre’
Pierre.is_client ----- > True
 Ce principe d’héritage nous permet de créer des classes de
base avec des fonctionnalités communes à plusieurs classes
puis des sous-classes qui héritent de ces fonctionnalités et
peuvent également définir leurs propres fonctionnalités.
 Code plus modulable, mieux organisé, plus clair et plus concis

63
103
Héritage - Surcharge
“Surcharger” une méthode = la redéfinir d’une façon différente.

En Python, les sous-classes vont :

pouvoir surcharger les méthodes héritées de leur classe parent et

également pouvoir définir des variables de même nom que celles


de leur classe parent.

64
104
Héritage - Surcharge
Exemple :
class Client(Utilisateur):
is_client = True
anciennete = 10
def __init__(self,nom, age, mail):
self.user_name = nom
self.user_age = age
self.user_mail = mail
def getNom(self):
print(‘Je suis’, self.user_name, ‘. Mon mail est :’, self.user_mail)
Pierre = Client(‘Pierre’,25, pierre.L@[Link])
[Link] ---------- >10
[Link]() -------- > Je suis Pierre. Mon mail est pierre.L@issea-cemac
65
105
Héritage - Surcharge
En pratique, on “étend” la méthode de la classe mère dans la sous-
classe en lui rajoutant des instructions spécifiques.
Syntaxe [Link]()

On récupère ainsi l’intégralité du code de la classe parent.


Exemple : extension de __init__()
class Client(Utilisateur):
is_client = True
def __init__(self, nom, age, mail):
Utilisateur.__init__(self, nom, age)
self.user_mail = mail
66
106
Héritage – Test d’héritage
Question : Comment l’objet fait pour déterminer les variables ou méthodes à
utiliser?
Réponse : recherche dans un ordre précis (des sous-classes les plus internes à
la classe parent)

Deux fonctions :
isinstance() pour tester le type d’une instance
issubclass() pour tester l’héritage d’une classe
Exemple :
isinstance(pierre, Client) ------ > True
issubclass(Client, Utilisateur) ------ > True
Isinstance(pierre, int) ------ > False
issubclass(Client, str) ------ > False
67
107
Héritage Mutliple
Lorsqu’une sous-classe peut hériter de plusieurs classes mères différentes,
on parle d’héritage multiple.

Difficile à mettre en place au niveau du langage

Il faut prendre en compte les cas où plusieurs classes mères définissent les
mêmes variables et fonctions
et définir une procédure pour indiquer de quelle définition la sous-classe
héritera.

mro() : méthode qui indique l’ordre de résolution des attributs dans une
classe
68
108
Exemple
Héritage Mutliple
class A :
pass
class B(A) :
pass
class C(A) :
pass
class D(B,C) :
pass

Algorithme : de bas en haut et de gauche à droite et on enlève toutes les classes


dupliquées sauf la dernière :D, B, A, object, C, A, object ------ > D, B, C, A, object
69
109
Polymorphisme
“Polymorphisme” = “plusieurs formes”.

En POO :
Polymorphisme = capacité d’une variable, d’une fonction ou d’un objet à
prendre plusieurs formes, c’est-à-dire à sa capacité de posséder plusieurs
définitions différentes.

Polymorphisme : plusieurs sous-classes héritent d’une méthode d’une classe de


base qu’ils implémentent de manière différente.

70
110
Polymorphisme - Exemple
class Animaux:
def animal_sound(self):
pass
class Chat(Animaux) :
def animal_sound(self):
return(‘Miaule’)
class Chien(Animaux) :
def animal_sound(self):
return(‘aboie’)
cat = Chat(); print(cat.animal_sound())
dog = Chien(); print(dog.animal_sound())
71
111
Exercice

1) Créer une classe Rationnel des nombres rationnels; Vous


créerez pour cela le constructeur __init__() et la fonction
d’affichage __repr_() (affichage sous la forme a/b)
2) Implémenter la méthode pour l’addition de deux rationnels
3) Créer une méthode pgcd() qui calcule le pgcd du numérateur
et du dénominateur d’un rationnel
4) Ecrire la méthode reduction() qui permet de simplifier un
rationnel

72
112
Solution
class Rationnel:

def __init__(self, num, denum):


[Link] = num
[Link] = denum

def __repr__(self):
return '{}/{}'.format([Link], [Link])

def pgcd(self):
smaller = min([Link], [Link])
small_diviseurs = [i for i in range(1, smaller+1) if smaller%i == 0]
larger = max([Link], [Link])
commun_div =[i for i in small_diviseurs if larger % i == 0]
return max(commun_div)
73
113
Solution
class Rationnel:

def pgcd(self):
smaller = min([Link], [Link])
small_diviseurs = [i for i in range(1, smaller+1) if smaller%i == 0]
larger = max([Link], [Link])
commun_div =[i for i in small_diviseurs if larger % i == 0]
return max(commun_div)

def reduire(self):
p = [Link]()
[Link] = [Link] /p
[Link] = [Link] /p
return self

74
114
Chapitre 4: Fichiers et Exceptions
▷ I. Fichiers
▷ I.1. Modes d’ouverture des fichiers

▷ I.2. Méthodes de lecture

▷ I.3. Méthode d’écriture

▷ II. Exceptions
▷ II.1. Introduction

▷ II.2. Syntaxe

▷ II.3. Type d’exceptions


115
75
I – Gestion des fichiers
1- Modes d’ouverture des fichiers
Il existe différents modes d’ouverture des fichiers :
r : en lecture seule w : en écriture avec remplacement
a : écriture avec ajout en fin de fichier x : lecture et écriture
r+ : lecture et écriture dans un même fichier

Exemple : Créer un fichier ‘[Link]’ contenant 5 lignes


fic = open(‘[Link]’, ‘r’)
[Link]()
if [Link] :
print(‘Fichier est fermé’)
else:
print(‘Fichier encore ouvert’)
116
Méthodes read(), readline(), readlines()
2. Méthodes de lecture
La lecture des fichiers peut se faire de plusieurs façons:
read() : permet de faire une lecture « en bloc »
fic = open(‘[Link]’, ‘r’)
content = [Link]()
print(content)
[Link]()

readline() : permet de faire une lecture une ligne à la fois


fic = open(‘[Link]’, ‘r’)
line = [Link]()
print(line)
line = [Link]()
print(line)
[Link]()
117
Méthodes read(), readline(), readlines()

La lecture des fichiers peut se faire de plusieurs façons:

readlines() : permet de faire une lecture de plusieurs lignes

fic = open(‘[Link]’, ‘r’)


lines = [Link]()
print(lines)
[Link]()
118
Clause with … as

L’ouverture des fichiers peut se faire à l’aide de with … as.

Dans ce cas, il n’est plus nécessaire d’utiliser la fonction close().

with open(‘[Link]’, ‘r’) as fic:


content= [Link]()
print(content)

119
Méthodes d’écriture dans un fichier
L’ouverture des fichiers fait à l’aide de with … as.

Pour l ’écriture, on utilise le paramètre ’w’.

with open(‘[Link]’, ‘w’) as fic:


nombre = 15
[Link](str(nombre))
[Link](‘\n Bonjour, chers tous!\n’)
[Link](‘ Et bon séjour ici!\n’)
120
II – Exceptions en Python
1. Syntaxe
Python permet de gérer les erreurs (exceptions):
La syntaxe est : try … except (+ else, finally)
Exemple:
age = input(‘quel âge as-tu?’)
try :
age = int(age)
except:
print(‘L’âge indiqué est incorrect’)
else :
print(‘Tu as’, age, ‘ans’)
finally:
print(‘Fin de programme’)
121
2 - Types d’exceptions en Python
Il existe différents types d’exceptions: ValueError, nameError, typeError, ZeroDivisionError, OSError, AssertionError
Exemple:
Nombre1 = 150
Nombre2 = input(‘Faites entrer le second ’)
try :
Nombre2 = int(Nombre2)
Print(‘Resultat ={ }’. format(Nombre1/Nombre2))
except ZeroDivisionError :
print(‘Vous ne pouvez pas diviser par zéro’)
except ValueError :
print(‘Vous devez faire entrer un nombre’)
except :
print(‘Valeur incorrecte’)
finally:
print(‘Fin de programme’)
123
123

Vous aimerez peut-être aussi