Initiation à la programmation python

Programming, Math · course

Voir tous les documents en programmation

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:

on affiche ici le commentaire associé à la classe d'exception # et le message associé print(AucunChiffre.__doc__, " : ", exc)