Top Banner
Langage Python Cours 2/5 : structures de données Hubert Godfroy 05 novembre 2015 1/19
34

Langage Python - Cours 2/5 : structures de données

Jan 24, 2022

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Langage Python - Cours 2/5 : structures de données

Langage PythonCours 2/5 : structures de données

Hubert Godfroy

05 novembre 2015

1/19

Page 2: Langage Python - Cours 2/5 : structures de données

La dernière fois. . .

I Environnement PythonI Syntaxe du langageI Exemple d’algorithme sur les entiers (somme, multiplication,

pgcd, . . . ) et les réels (racines d’un polynôme du second degrés)

⇒ Comment utiliser des données plus complexes (tableaux, listes,arbres, . . . )

2/19

Page 3: Langage Python - Cours 2/5 : structures de données

La dernière fois. . .

I Environnement PythonI Syntaxe du langageI Exemple d’algorithme sur les entiers (somme, multiplication,

pgcd, . . . ) et les réels (racines d’un polynôme du second degrés)⇒ Comment utiliser des données plus complexes (tableaux, listes,arbres, . . . )

2/19

Page 4: Langage Python - Cours 2/5 : structures de données

Plan

Problèmes généraux

Données non structurées

Données structurées

Persistance

3/19

Page 5: Langage Python - Cours 2/5 : structures de données

Plan

Problèmes généraux

Données non structurées

Données structurées

Persistance

4/19

Page 6: Langage Python - Cours 2/5 : structures de données

�and deux objets sont-ils égaux ? (Exemples)

On dispose de l’opérateur ==.I deux entiers ?

I deux tableaux ?I deux arbres ?

L’opérateur == essaye de “descendre” dans les structures pourtester l’égalité de chaque sous-terme.

L’opérateur == est une égalité structurelle

5/19

Page 7: Langage Python - Cours 2/5 : structures de données

�and deux objets sont-ils égaux ? (Exemples)

On dispose de l’opérateur ==.I deux entiers ?I deux tableaux ?

I deux arbres ?

L’opérateur == essaye de “descendre” dans les structures pourtester l’égalité de chaque sous-terme.

L’opérateur == est une égalité structurelle

5/19

Page 8: Langage Python - Cours 2/5 : structures de données

�and deux objets sont-ils égaux ? (Exemples)

On dispose de l’opérateur ==.I deux entiers ?I deux tableaux ?I deux arbres ?

L’opérateur == essaye de “descendre” dans les structures pourtester l’égalité de chaque sous-terme.

L’opérateur == est une égalité structurelle

5/19

Page 9: Langage Python - Cours 2/5 : structures de données

�and deux objets sont-ils égaux ? (Exemples)

On dispose de l’opérateur ==.I deux entiers ?I deux tableaux ?I deux arbres ?

L’opérateur == essaye de “descendre” dans les structures pourtester l’égalité de chaque sous-terme.

L’opérateur == est une égalité structurelle

5/19

Page 10: Langage Python - Cours 2/5 : structures de données

�and deux objets sont-ils égaux ? (Cas général ?)

Comment doit se comporter l’égalité structurelle pour deux objetsquelconques ?

Impossible

I �’est-ce qu’un sous-terme ?I L’opérateur == ne peut pas connaître toutes les structures à

l’avance.

Doit retourner quelque chose (philosophie Python)

�el autre sens donner à l’égalité a == b ?

6/19

Page 11: Langage Python - Cours 2/5 : structures de données

�and deux objets sont-ils égaux ? (Cas général ?)

Comment doit se comporter l’égalité structurelle pour deux objetsquelconques ?

Impossible

I �’est-ce qu’un sous-terme ?I L’opérateur == ne peut pas connaître toutes les structures à

l’avance.

Doit retourner quelque chose (philosophie Python)

�el autre sens donner à l’égalité a == b ?

6/19

Page 12: Langage Python - Cours 2/5 : structures de données

�and deux objets sont-ils égaux ? (Cas général ?)

Comment doit se comporter l’égalité structurelle pour deux objetsquelconques ?

Impossible

I �’est-ce qu’un sous-terme ?I L’opérateur == ne peut pas connaître toutes les structures à

l’avance.

Doit retourner quelque chose (philosophie Python)

�el autre sens donner à l’égalité a == b ?

6/19

Page 13: Langage Python - Cours 2/5 : structures de données

�and deux objets sont-ils égaux ? (Cas général ?)

Comment doit se comporter l’égalité structurelle pour deux objetsquelconques ?

Impossible

I �’est-ce qu’un sous-terme ?I L’opérateur == ne peut pas connaître toutes les structures à

l’avance.

Doit retourner quelque chose (philosophie Python)

�el autre sens donner à l’égalité a == b ?

6/19

Page 14: Langage Python - Cours 2/5 : structures de données

Rappel et égalité triviale

Un variable est une étique�e.

a = obj

a

obj

L’égalité triviale de deux objets est l’égalité de leurs positions dansla mémoire.

7/19

Page 15: Langage Python - Cours 2/5 : structures de données

Rappel et égalité triviale

Un variable est une étique�e.

a = obj

a

obj

L’égalité triviale de deux objets est l’égalité de leurs positions dansla mémoire.

7/19

Page 16: Langage Python - Cours 2/5 : structures de données

SchémaLa variable a est trivialement égale à ma variable b si et seulement si

a

obj

b

I Dans le cas général, l’opérateur == teste l’égalité triviale.I Dans tous les cas, l’opérateur is teste l’égalité triviale.

Remarques

I L’égalité trivial implique l’égalité structurelle.I On peut connaître la position d’un objet grâce à l’opérateur id

8/19

Page 17: Langage Python - Cours 2/5 : structures de données

SchémaLa variable a est trivialement égale à ma variable b si et seulement si

a

obj

b

I Dans le cas général, l’opérateur == teste l’égalité triviale.I Dans tous les cas, l’opérateur is teste l’égalité triviale.

Remarques

I L’égalité trivial implique l’égalité structurelle.I On peut connaître la position d’un objet grâce à l’opérateur id

8/19

Page 18: Langage Python - Cours 2/5 : structures de données

Mutabilité

Un objet est mutable si son contenu peut être modifié sans changerde position dans la mémoire.

Intérêts

I Écriture naturelle des algorithmesI Permet de modifier les paramètres d’une fonction

DésavantageMoins de contrôle sur les objets (augmente le risque de bugs)

9/19

Page 19: Langage Python - Cours 2/5 : structures de données

Mutabilité

Un objet est mutable si son contenu peut être modifié sans changerde position dans la mémoire.

Intérêts

I Écriture naturelle des algorithmesI Permet de modifier les paramètres d’une fonction

DésavantageMoins de contrôle sur les objets (augmente le risque de bugs)

9/19

Page 20: Langage Python - Cours 2/5 : structures de données

Exemple

Dans le programme suivant, si obj est mutable

a = objf(a)

on ne peut pas savoir si a a structurellement changé pendant l’appelde f.

10/19

Page 21: Langage Python - Cours 2/5 : structures de données

Plan

Problèmes généraux

Données non structurées

Données structurées

Persistance

11/19

Page 22: Langage Python - Cours 2/5 : structures de données

Données non structurées

I Il s’agit des données de type entier et réelI Ces données sont immuables (cf. exercices 1 à 3 du TD1).

12/19

Page 23: Langage Python - Cours 2/5 : structures de données

Plan

Problèmes généraux

Données non structurées

Données structurées

Persistance

13/19

Page 24: Langage Python - Cours 2/5 : structures de données

Structures tabulairesType str (string)

I De la forme s = ’bonjour’.I ImmuableI On accède au i-ème élément avec s[i-1]

Type list

I De la forme s = [1, 42, ’abc’, ...]

I MutableI On accède au i-ème élément avec s[i-1]

Type tuple

I De la forme s = (1, 42, ’abc’, ...)

I ImmuableI On accède au i-ème élément avec s[i-1]

14/19

Page 25: Langage Python - Cours 2/5 : structures de données

Structures tabulairesType str (string)

I De la forme s = ’bonjour’.I ImmuableI On accède au i-ème élément avec s[i-1]

Type list

I De la forme s = [1, 42, ’abc’, ...]

I MutableI On accède au i-ème élément avec s[i-1]

Type tuple

I De la forme s = (1, 42, ’abc’, ...)

I ImmuableI On accède au i-ème élément avec s[i-1]

14/19

Page 26: Langage Python - Cours 2/5 : structures de données

Structures tabulairesType str (string)

I De la forme s = ’bonjour’.I ImmuableI On accède au i-ème élément avec s[i-1]

Type list

I De la forme s = [1, 42, ’abc’, ...]

I MutableI On accède au i-ème élément avec s[i-1]

Type tuple

I De la forme s = (1, 42, ’abc’, ...)

I ImmuableI On accède au i-ème élément avec s[i-1]

14/19

Page 27: Langage Python - Cours 2/5 : structures de données

Autres Structures

Type set

I De la forme {obj1, obj2, obj3, ...}.I Mutable

Type dict (dictionnaire)

I De la forme s = {key1 : value1, key2 : value2, ...}.I MutableI On accède à valuei avec s[keyi]

15/19

Page 28: Langage Python - Cours 2/5 : structures de données

Autres Structures

Type set

I De la forme {obj1, obj2, obj3, ...}.I Mutable

Type dict (dictionnaire)

I De la forme s = {key1 : value1, key2 : value2, ...}.I MutableI On accède à valuei avec s[keyi]

15/19

Page 29: Langage Python - Cours 2/5 : structures de données

Fonctions utiles

Fonctions génériques

I len donne le nombre d’élément de la structureI + concatène deux structures de même type.I in test l’appartenance d’un objet à la structure

Pour des fonctions plus particulières, on se reportera àhttps://docs.python.org/2/library/index.html

16/19

Page 30: Langage Python - Cours 2/5 : structures de données

Fonctions utiles

Fonctions génériques

I len donne le nombre d’élément de la structureI + concatène deux structures de même type.I in test l’appartenance d’un objet à la structure

Pour des fonctions plus particulières, on se reportera àhttps://docs.python.org/2/library/index.html

16/19

Page 31: Langage Python - Cours 2/5 : structures de données

Plan

Problèmes généraux

Données non structurées

Données structurées

Persistance

17/19

Page 32: Langage Python - Cours 2/5 : structures de données

Persistance

Comment pérenniser les données une fois que le programmetermine ?

Ouverture des fichiers

I Ouverture du fichier en lecture :

fichier = open(’nomfichier’, ’rb’)

I Ouverture du fichier en écriture (e�ace un éventuel fichier déjàprésent) :

fichier = open(’nomfichier’, ’wb’)

18/19

Page 33: Langage Python - Cours 2/5 : structures de données

Persistance

Comment pérenniser les données une fois que le programmetermine ?

Ouverture des fichiers

I Ouverture du fichier en lecture :

fichier = open(’nomfichier’, ’rb’)

I Ouverture du fichier en écriture (e�ace un éventuel fichier déjàprésent) :

fichier = open(’nomfichier’, ’wb’)

18/19

Page 34: Langage Python - Cours 2/5 : structures de données

Persistance

Opérations sur les fichiers

I Lecture sur fichier ouvert en lecture :

txt = fichier.read()txt = fichier.read(42)txt = fichier.readline()liste_txt = fichier.readlines()

I Écriture sur un fichier ouvert en écriture

fichier.write(txt)

19/19