UVT : Master BADS
Initiation à la programmation python
1
Séance en ligne du 15/11/2020 à 16h
Enseignante Tutrice : Mme Mansouri L.
2
Partie abordée :
Module 5: Les dictionnaires et les ensembles
Module 6: Les fichiers
Module 7: Les classes
Module 8: La gestion des exceptions
module 5: Les dictionnaires et les ensembles
Les dictionnaires
▪ Un dict est une table d'associations clé-valeur.
3
▪ Les dictionnaires sont modifiables.
▪ La clé qui peut être n’importe quel type non-modifiable (les chaînes,les
nombres et les tuples s’ils ne contiennent que des éléments non modifiables)
▪ Associer une valeur à une clé existante remplace l'ancienne valeur associée.
▪ Un dict est itérable sur ses clés.
Déclaration :
Nom-Collection= { Cle1 : valeur1, cle2 :valeur2, … Clen :valeurn }
Exemple :
dico = {}
4
dico['computer'] = 'ordinateur'
dico['mouse'] ='souris'
dico['keyboard'] ='clavier’
print(dico)
#on aura ceci :
{'computer': 'ordinateur', 'keyboard': 'clavier', 'mouse': 'souris’}
print (dico['mouse'] ) # affiche souris
Remarque
5
Les dictionnaires ne sont pas des séquences : Les éléments d'un dictionnaire ne sont pas disposés dans un ordre particulier. Des opérations comme la concaténation et l'extraction (d'un groupe d'éléments contigus) ne peuvent donc tout simplement pas s'appliquer ici.
Si vous essayez tout de même, Python lèvera une erreur lors de l'exécution du code :
print (dic[1:3])
***** Erreur : KeyError: slice(1, 3, None) *****
Opérations sur les dictionnaires
6
del(d[k])
update()
Supprime une paire clé-valeur
Mettre à jour la valeur d’une clé existante dans le dict d (ex: d.update(livre = 70)) Ajouter une nouvelle paire clé/valeur dans un dict d (ex:d.update( {'C++' : 24} ) Concaténer entre deux dict (ex: d1.update(d2))
Parcours d’un dict
On peut utiliser une boucle for pour traiter successivement tous les éléments contenus dans un dictionnaire, mais attention : Au cours de l'itération, ce sont les clés utilisées dans le dictionnaire qui seront successivement affectées à la variable de travail, et non les valeurs. L'ordre dans lequel les éléments seront extraits est imprévisible.
Exemple :
7
for clef in invent:
print(clef, invent[clef])
Il est recommandé de plutôt faire appel à la méthode items() décrite à la section précédente :
for clef, valeur in invent.items():
print(clef, valeur)
Les ensembles (set)
Les ensemble ou sets forment un type de données composites Python. Un ensemble est une collection d’éléments non ordonnée, sans index et qui ne peut pas posséder l’élément dupliqué.
C’est la transposition informatique de la notion d’ensemble mathématique.
8
En python, on trouve deux types d’ensembles:
▪Le set qui est un objet modifiable
▪le frozenset qui est un objet immuable (le mot anglais frozen signifie gelé en français)
Déclarer un set
Il y a deux manières de déclarer un set.
•En utilisant des accolades.
s = { "anas", "lamia", "amine", "aziz"} print(s) # affiche {'aziz', 'amine', 'anas', 'lamia'}
9
Notez bien qu’il s’agit d’un ensemble non ordonné ce qui explique que print() retourne les éléments dans un ordre aléatoire.
•En transformant une liste en set grâce au constructeur set().
s2 = set(["lamia", (1,2,3), 7.56]) print(s2) # affiche {7.56, 'lamia', (1, 2, 3)}
Quelques méthodes associées aux sets
syntaxe
set.add()
description
Ajouter un élément
set.update()
Ajouter tous les éléments d’un autre set
10
exemple
s = {"amine", "anas", "aziz"} s.add("lamia") print(s)#affiche {‘anas’,’aziz’,’amine’,’lamia’}
s = {"amine", "ahmed", "Mohamed"} s2 = {1, 2, 3} s.update(s2) print("s =", s) # s = {1, 2, 3, ‘amine’, ‘ahmed’, ‘Mohamed’} print("s2 =", s2)# s2 = {1, 2, 3}
set.remove() et set.discard()
Supprimer un élément : Set.Remove lève une exception si on veut supprimer un élement inexistant , au contraire de set.discard
s = {"amine", "ahmed", "Mohamed", "aziz"} s.remove("ahmed") print(s) # {'aziz', 'Mohamed', 'amine'}
Quelques opérations mathématiques associées aux sets
• Différence entre deux sets s1 = {"amine", "aziz", "anas", "ahmed"} s2 = {"amine", "anas"} s3 = s1 - s2 print("s3 =", s3) # s3={'aziz', 'ahmed'}
• Union de deux sets s1 = {"Python", "php"} s2 = {"java", "html","php"} s3 = s1 | s2 print("s3 =", s3) # s3={'php', 'Python', 'java', 'html'} • s1 = {"Python", "php"} s2 = {"java", "php"} s3 = s1 & s2 print("s3 =", s3) # s3= {'php'}
Publicité
Intersection de deux sets
11
Les frozensets
Les sets sont des objets modifiables donc il n’est pas possible d’utiliser un set comme clé de dictionnaire.
Solution : les frozensets (ensemble gélés) qui sont des sets immuables .
12
•Déclaration d’un frozenset:
s = {1, 2, 3} fr_s = frozenset(s) print(type(fr_s)) # <class ‘frozenset’>
• frozenset() fonctionne également avec un tuple ou une liste
Récapitulatif sur les types en python
13
Les listes sont des collections d’éléments ordonnés et altérables qui peuvent contenir plusieurs fois la même valeur ;
Les tuples sont des collections d’éléments ordonnés et immuables qui peuvent contenir plusieurs fois la même valeur ;
Les dictionnaires sont des collection d’éléments non ordonnés mais indexés avec des clefs de notre choix et altérables qui n’acceptent pas de contenir plusieurs fois le même élément ;
Les ensembles sont des collections d’éléments non ordonnées, non indexés et non modifiables qui n’acceptent pas de contenir plusieurs fois le même élément.
module 6: Les fichiers
1. La Gestion des fichiers texte
14
2. Les fichiers binaires
3. Les fichiers csv
Gestion des fichiers texte
L’ouverture d’un fichier
open()
modes d’ouverture d’un fichier :
15
• Le mode lecture ('r') (mode par défaut)
Exemple : file_n = open("utilisateur")
• Le mode écriture ('w')
• Le mode ajout ('a')
Fermeture de fichier
close()
Ecrire dans un fichier grâce la méthode write()
file_n.write(prenom + '\n’)
Extraction des données
▪read() extrait la totalité du contenu du fichier qu’elle retourne sous la forme d’une chaîne de caractères. ▪readline(): lit une seule ligne à la fois et ne prend pas en compte le caractère de fin
de ligne. Elle retourne une chaîne de caractères.
16
file_n = open("utilisateur", 'r') name = file_n.readline() file_n.close() print("Le contenu du fichier est: {} \n ".format(name))
▪readlines() : extrait la totalité du fichier et retourne non pas une chaîne mais une liste.
file_n = open("utilisateur", 'r') name = file_.readlines() file_n.close() file_ n= open("utilisateur", 'w') for i in name:
file_n.write(i.lower())
file_n.close()
La syntaxe with open() as
with open("fichier", 'mode') as objet_fichier:
variable = objet_fichier.readlines()
Exemple :
with open("utilisateur", 'r') as file_n:
17
name = file_n.readlines()
with open("utilisateur", 'w') as file_n:
for i in name:
file_n.write(i.upper())
Gestion des fichiers binaires
Les modes d’ouverture de fichiers binaires
▪En mode texte : un fichier est lu caractère par caractère.
▪En mode binaire : un fichier est lu octet par octet.
modes d’ouverture en binaire :
18
Le mode lecture : 'rb'
Le mode écriture avec effacement préalable du contenu : 'wb’
Le mode ajout : 'ab'
Sérialisation des données avec le module Pickle
Pickle est un module de python qui permet de sauvegarder n'importe quel objet dans un fichier et de le récupérer ultérieurement.
▪ Pickling (sérialisation)
Pour sérialiser un objet on utilise la syntaxe suivante :
Exemple : import pickle
19
pickle.dump (objet, fichier, protocole) # Pour sérialiser un objet
ou
pickle.dumps (objet, protocole) # Pour sérialiser un objet en octets
où :
objet :L'objet à stocker
fichier : Le fichier ouvert qui contiendra l'objet
protocole : ( facultatif) :La manière avec laquelle les objets
sont traduits en binaire (souvent fixée à pickle.HIGHEST_PROTOCOL)
création d'un dictionnaire departement = {36:’info',30:’GRH',75:’compt'}
enregistrement du dictionnaire dans un fichier Fichier = open('data.txt','wb’) # sérialisation pickle.dump(departement,Fichier) Fichier.close()
Unpickling (désérialisation)
L'opération inverse est la désérialisation. La syntaxe est la suivante :
pickle.load (file) #Pour désérialiser un objet
ou
pickle.loads (buffer) # Pour désérialiser un objet à partir d'octets
20
Exemple import pickle # récupération du dictionnaire Fichier = open('data.txt','rb') Dept = pickle.load(Fichier) # désérialisation Fichier.close() print(Dept)# affiche {75: ‘compt', 36: ‘GRH', 30: ‘info’} print(Dept[36]) #affiche GRH
Gestion des fichiers CSV
Publicité
Le format CSV (Comma Separated Values) est le format le plus commun dans l'importation et l'exportation de feuilles de calculs et de bases de données.
C’est un fichier texte avec une structure tabulaire ,dans lequel les données sont enregistrées ligne par ligne, et où les valeurs sont séparées par une virgule.
Remarques :
21
▪Le passage d’une ligne à l’autre est matérialisé par un saut de ligne ;
▪";" est utilisé comme séparateur de colonnes (paramétrable, ça peut être tabulation "\t" aussi souvent) ;
▪La première ligne joue le rôle d’en-tête de colonnes
Lecture du format csv : structure liste
22
Lecture du format csv : structure dictionnaire
On peut lire/écrire les données dans un dictionnaire en utilisant les classes DictReader et DictWriter.
23
module 7: Les classes
24
▪ Présentation des classes
▪ Attributs et méthodes
▪ Constructeur et destructeur
▪ l’héritage
25
Présentation des classes
déclaration Syntaxe: class nom_classe :
corps de la classe # ...
Instanciation :
Syntaxe: C1=nom_classe()
Les classes sont des types modifiables.
Le mot-clé pass permet de préciser que le corps de la classe ne contient rien. Exemple: class classe_vide:
pass
Attributs et méthodes
26
Les attributs sont des variables qui sont associées de manière explicite à une classe. Les attributs de la classe se comportent comme des variables globales pour toutes les méthodes de cette classe.
Une méthode s’écrit comme une fonction du corps de la classe avec un premier paramètre self obligatoire, où self représente l’objet sur lequel la méthode sera appliquée. Autrement dit self est la référence d’instance.
class nom_classe :
def nom_methode (self, param_1, ..., param_n) :
self.nom_attribut = valeur
L’appel d’une méthode :
cl = nom_classe() # objet c1 qui est une instance de nom_classe t = cl.nom_methode(valeur_1, ..., valeur_n)
27
Exemple : class Point:
def deplace(self, dx, dy):
self.x = self.x + dx self.y = self.y + dy
p = Point() p.x = 1 p.y = 2 p.deplace(2,2) print("p : x =", p.x, "y =", p.y)
Constructeur et destructeur
28
Constructeur C’est une fonction avec deux particularités : ▪ le nom de la fonction doit être __init__ ; ▪ la fonction doit accepter au moins un paramètre, dont le nom doit être self, et qui doit être le
premier paramètre et ne doit pas retourner de résultat
Le paramètre self représente en fait l'objet cible, c'est-à-dire que c'est une variable qui contient une référence vers l'objet qui est en cours de création.
Exemples
class Point:
def __init__(self):
self.x = 0 self.y = 0
a = Point() print("a : x =", a.x, "y =", a.y) a.x = 1 a.y = 2 print("a : x =", a.x, "y =", a.y)
class compte:
"""gestion d'un compte bancaire""" def __init__(self,nom,numero,valeur):
self.nom = nom self.numero = numero self.solde = valeur
def afficherSolde(self):
print("Le solde vaut :",self.solde)
monCompte = compte("pro",777,10000) monCompte.afficherSolde()
Attributs privés
29
On réalise la protection des attributs de notre classe Point grâce à l’utilisation d’attributs privées. Pour avoir des attributs privés, leur nom doit débuter par __ (deux fois le symbole underscore _).
Une fois déclarés privés, il n’est pas plus possible de faire appel aux attributs __x et __y depuis l’extérieur de la classe Point. Il faut donc disposer de méthodes qui vont permettre par exemple de modifier ou d’afficher les informations associées à ces variables.
Exemple
class Point:
def __init__(self, x, y):
self.__x = x self.__y = y
p = Point(1, 2) p.__x
class Point:
def __init__(self, x, y):
self.__x = x self.__y = y
def deplace(self, dx, dy): self.__x = self.__x + dx self.__y = self.__y + dy
def affiche(self):
Traceback (most recent call last): File "<pyshell#9>", line 1, in p.__x AttributeError: Point instance has no attribute '__x'
print("abscisse =", self.__x, "ordonnee =", self.__y)
a = Point(2, 4) a.affiche() a.deplace(1, 3) a.affiche()
destructeur
30
Pour libérer la mémoire d’un objet
En Python, son nom est imposé : __del__.
On ne fait quasiment jamais d’appel explicite à la méthode __del__.
Elle est appelée automatiquement quand un objet cesse d’être référencé .
Syntaxe :
class nomDeLaClasse:
#documentation de la classe def __init__(self,para1,para2,...):
...
def __del__(self):
Publicité
...
def methode1(self,para1,para2,...):
...
L’héritage
31
class classeMere:
#une classe mère ...
class classeFille(classeMere):
#une classe fille héritant de la classe mère
Constructeur de la classe fille
1ere méthode class classeFille(classeMere):
#documentation de la classe fille def __init__(self,para1,para2,...):
classeMere.__init__(self,para1,...) ...
2eme méthode (avec super() ) class classeFille(classeMere):
#documentation de la classe fille def __init__(self,para1,para2,...):
super().__init__(para1,...) ...
Héritage multiple
32
class mere1:
"""une première classe mère""" ...
class mere2:
"""une seconde classe mère""" ...
class classeFille(mere1,mere2,...):
"""une classe fille héritant des classes mère1 et
mère2"""
...
Exemple : class carnivore:
def __init__(self,p):
self._poidsViande = p
def devorer(self):
print("Je mange",self._poidsViande,"kilos de steack par jour")
class herbivore:
def __init__(self,p):
self._poidsHerbe = p
def brouter(self):
print("Je mange",self._poidsHerbe,"kilos de gazon par jour")
class omnivore(carnivore,herbivore):
def __init__(self,pv,ph,h):
carnivore.__init__(self,pv) # appel du constr de la classe mère herbivore.__init__(self,ph) self.__humain = h
teddy = omnivore(10,5,False) teddy.devorer() teddy.brouter()
module 8: Les exceptions
Les exceptions sont un moyen de gérer les instructions susceptibles de ne pas fonctionner correctement.
Le mécanisme des exceptions
1.
Instruction try-except
33
Syntaxe
try:
// Code
except:
// Code
▪ S'il n'y a pas d'exception, alors
seule la clause try sera exécutée.
▪ Si une exception survient, la clause try sera ignorée et la clause except sera exécutée. Si l'exception n'est pas gérée, l'exécution s'arrête.
▪
34
35
2. La clause else
Le code entre dans le bloc else uniquement si la clause try ne déclenche pas d'exception.
Exemple :
def division(a, b):
try:
d = a/b
except ZeroDivisionError:
print("Division par zero ! ")
else:
print("Résultat : ", d)
36
3. La clause Finally
Le code qu’elle contient sera exécuté dans tous les cas, qu’une exception ait été levée par la clause try ou pas.
Exemple :
37
Définir ses propres classes d’exception
Pour définir sa propre exception, il faut créer une classe qui dérive d’une classe d’exception existante, par exemple, la classe Exception.
Exemple : class AucunChiffre(Exception):
pass
def conversion(s):
38
#conversion d'une chaîne de caractères en entier if not s.isdigit(): raise AucunChiffre(s) return int(s)
try:
s = "123a" print(s, " = ", conversion(s))
except AucunChiffre as exc: