Theme 9(bis)

22
THEME 9 APPROFONDIR LES STRUCTURES DE DONNÉES (LISTES, TUPLES ET DICTIONNAIRES) 2011-04-07 1

Transcript of Theme 9(bis)

Page 1: Theme 9(bis)

1

THEME 9

APPROFONDIR LES STRUCTURES DE DONNÉES

(LISTES, TUPLES ET DICTIONNAIRES)

2011-04-07

Page 2: Theme 9(bis)

2

LES LISTES: ACCÈS AUX ÉLÉMENTS

nombres=[5,38,10,25] Accéder à un seul élément (index)

Ex: print(nombres[2])10

Accéder à plusieurs éléments (slicing: découpage en tranches)

Ex: print(nombres[1:3])[38, 10] #tranche de type liste

Ex: print(nombres[2:3])[10]

Ex: print(nombres[2:])[10,25]

Ex: print(nombres[-1])25

Ex: print(nombres[-3])38

Page 3: Theme 9(bis)

3

nombres = [17, 38, 10, 25, 72]

Trier une liste Ex: nombres.sort()

Inverser l’ordre des éléments Ex: nombres.reverse()

Retrouver l'index d'un élément (le premier rencontré) Ex: nombres.index(17)

Enlever un élément (le premier rencontré) Ex: nombres.remove(38)

Enlever un élément à un index Ex: del(nombres[2]) Ex: del(nombres[2:4])

LES LISTES: AUTRES OPÉRATIONS

Page 4: Theme 9(bis)

4

LES LISTES: REMPLACEMENT D’ÉLÉMENTS

mots = ['jambon', 'fromage', 'confiture', 'chocolat']

Insertion dans une liste Ex: mots[2:2] = ['miel'] Ex: mots[5:5] =['saucisson', 'ketchup']

Suppression de la liste Ex: mots[2:2] = ['miel'] Ex: mots[2:5]=[] Ex: mots[1:3] = ['salade']

Page 5: Theme 9(bis)

5

EXERCICE 9.1 Écrire un programme qui permet de simuler une gestion de la file

d’attente suivante dans un centre de services

['client 1','client 2','client 3','client 4','client 5','client 6','client 7'] Sans utiliser un compteur de boucles

Le premier client arrivé dans le centre de services est 'client 1‘

Le résultat de la simulation serait

['client 1'] est en cours de service, il reste les clients suivants dans la liste ['client 2','client 3','client 4','client 5','client 6','client 7'] dans la file['client 1'] servi['client 2'] est en cours de service, il reste les clients suivants dans la liste ['client 3','client 4','client 5','client 6','client 7'] dans la file['client 2'] servi

Etc..

Page 6: Theme 9(bis)

6

EXERCICE 9.2

Écrire un programme qui permet de comparer deux listes

Par exemple comparer deux à deux les listes suivantes liste1=[76,23,14,2,33,18] liste2=[23,76,33,18,2,14] liste3=[2,56,85,12,1,1]

Pour cela nous utiliserons la fonction sort()

Page 7: Theme 9(bis)

7

LES LISTES ET LA FONCTION RANGE La fonction range fournit un ensemble de nombres

(objet particulier appelé itérateur)

range( [départ,]arrivée[,pas])

Nous pouvons construire une liste à partir de cet ensemble avec list() Ex: list(range(2,10))

Nous pouvons aussi construire un tuple à partir de cet ensemble avec tuple() Ex: tuple(range(4,25,6))

Page 8: Theme 9(bis)

8

LES TUPLES Types de données composites: chaînes, listes +

tuples

Chaines Vs listes Composition: caractères Vs différents types Non modifiables Vs modifiables

Tuple Composition: différents types Non modifiable

Syntaxe Ex: monTuple=('anne','cote',24,'etudiante')

Page 9: Theme 9(bis)

9

Similaires aux opérations sur les listes, sauf opérations de modification (ajout et suppression)

Longeur d’un tuple: len(monTuple)

Accès à un élément monTuple[3] monTuple[1:] (le slicing retourne un tuple)

Conversion en liste Liste = list(monTuple)

LES TUPLES: LES OPÉRATIONS

Page 10: Theme 9(bis)

10

EXERCICE 9.3 Écrire un programme qui permet de charger des villes ainsi que

leurs coordonnées (latitude, longitude) enregistrées dans un fichier «villes.txt ».

Pour que ces informations ne soient pas modifiées tout au long du programme, nous désirons les inscrire dans des tuples.

Les différents tuples seront enregistrés dans une liste définie dans le programme

Toronto 43.6702330 -79.3867550

Montreal 45.5454470 -73.6390760

Vancouver 49.2635880 -123.1385650

Ottawa 45.4234940 -75.6979330

Calgary 51.0551490 -114.0624380

Page 11: Theme 9(bis)

11

SURCHARGE DE L’OPÉRATEUR + Applicable aux chaines, listes et tuples

Opérateur + (concaténation):uneChaine = "aaa bbb ccc " uneChaine = " --- "+uneChaine+ " --- "

liste = liste + ['jambon', 'fromage', 'confiture']liste1 = liste + [‘recette']

montuple = tuple1+tuple2montuple=tuple6+montuple+tuple3

Page 12: Theme 9(bis)

12

SURCHARGE DE L’OPÉRATEUR * Applicable aux chaines, listes et tuples

uneChaine = "aaa bbb ccc c " *3uneChaine = unechaine+" "+unechaine*3

liste = liste*3liste1 = liste + [‘recette']

montuple= (tuple6*montuple+tuple3)*2

Page 13: Theme 9(bis)

13

LES DICTIONNAIRES

Type composite

Chaînes, listes et tuples: séquences ordonnées (les éléments sont indexés par des séquences d’entiers)

Dictionnaire: Opérations: La plupart est similaire avec celles des listes Différence: Les éléments sont indexés par clés uniques

Une clé: alphabétique, numérique, ou type composite(sous certaines conditions)

Les éléments peuvent être de n’importe quel type de donnée

Page 14: Theme 9(bis)

14

CRÉATION D’UN DICTIONNAIRE Initialisation directe

Initialisation par ajout élément par élément

dico = {} #intialisation d’un dictionnaire dico["a"]=["arbre","alien","abrit"]dico["b"]=["betise","batiment"]dico["c"]=["cat","cale","cailloux"]  print dicoprint dico["a"]print dico["a"][2]

dico = {'computer': 'ordinateur', 'keyboard': 'clavier', 'mouse': 'souris'}

print dico["computer"]

Page 15: Theme 9(bis)

15

OPÉRATIONS SUR LES DICTIONNAIRES Enlever un élément

Exemple: del dico["a"]

Test d’appartenance d’une clé print  "b" in dico if "b" in dico:

print " Trouvé!"

Liste des clés du dictionnaire print dico.keys()

Liste des valeurs du dictionnaire print dico.values()

Page 16: Theme 9(bis)

16

PARCOURS D’UN DICTIONNAIRE

Itérer sur les clés for uneCle in dico:

print uneCle,dico[uneCle]

Lister les couples (clé, valeur) du dicitonnaire sous forme de liste de tuples

liste = dico.items()print liste

Parcourir les tuples de clés et leurs éléments associés for uneCle, uneValeur in dico.items():

print uneCle,uneValeur

Page 17: Theme 9(bis)

17

REMARQUES

Les dictionnaires ne sont pas des séquences (les indexes n’ont pas d’ordre déterminé)

Erreur si on essaye de Concaténer Extraction d’éléments contigus (slicing)

Possibilité d’affecter un indice (la clé) contrairement aux listes

Page 18: Theme 9(bis)

18

EXERCICE 9.4

Nous désirons représenter la matrice suivante à l’aide d’un dictionnaire:

0 1 2

0 Roi

1 Pion

2

3 Reine

4 Tour

5 Chevalier

Page 19: Theme 9(bis)

19

SOLUTION

A chaque couple (ligne, colonne) correspond un élément Représenter le couple par un tuple Indexer l’élément par le couple (ligne, colonne)

correspondant

dico[(0,2)]=["roi"]dico[(1,0)]=["pion"]dico[(3,1)]=["reine"]dico[(4,0)]=["tour"]dico[(5,2)]=["chevalier"]

Tester print dico[(5,5)] !!!

Page 20: Theme 9(bis)

20

SOLUTION AU PROBLEME DE CLÉ NON DÉFINIE

Traiter le cas des clés inexistantes dans le dictionnaire: fonction get() Exemple: print echiquier.get((5,5), "non

existant")

clé Message a afficher dans le cas ou la clé n’existe pas

Page 21: Theme 9(bis)

21

EXERCICE 9.5

Écrivez une fonction qui échange les clés et les valeurs d’un dictionnaire (ce qui permettra par exemple de transformer un dictionnaire anglais/français en un dictionnaire français/anglais).

On suppose que le dictionnaire ne contient pas plusieurs valeurs identiques.

Page 22: Theme 9(bis)

22

EXERCICE 9.6 Écrivez un script qui crée un mini-système de base de

données fonctionnant a l’aide d’un dictionnaire, dans lequel vous mémoriserez les noms d’une série de copains, leur âge et leur taille.

Votre script devra comporter deux fonctions : la première pour le remplissage du dictionnaire, et la seconde pour sa consultation

Dans la fonction de remplissage, utilisez une boucle pour accepter les données entrées par l’utilisateur. Dans le dictionnaire, le nom de l’élève servira de clé d’accès, et les valeurs seront constituées de tuples (âge, taille).

La fonction de consultation comportera elle aussi une boucle, dans laquelle l’utilisateur pourra fournir un nom quelconque pour obtenir en retour le couple ≪ âge, taille ≫ correspondant.