Poly2 StructuresDonnees

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 40

Introduction à la programmation en Python

Maria Zrikem

GE1, GI1, GS1 ENSA de Marrakech

2021 - 2022

Structures de données (types composites)

1. Présentation générale
2. Les listes
3. Les tuples
4. Les dictionnaires
5. Les ensembles
6. Retour sur les chaines de caractères

Types élémentaires : Rappel


Données numériques

• entiers (int ou long)


• réels ou virgules flottantes (float)
Par exemple, les données : 3.14 10 .001 1e100 3.14e-10

Le type float permet de manipuler des nombres (>0 ou <0) compris entre 10^-308
et 10^308 avec une précision de 12 chiffres significatifs. Ils sont encodés d'une
manière particulière sur 8 octets (64 bits) dans la mémoire : une partie correspond
aux 12 chiffres significatifs, et une autre à l'ordre de grandeur (exposant de 10).

Données alphanumériques : le type « string » (chaîne de caractères)

• Une donnée de type string est une suite quelconque de caractères délimitée
soit par des apostrophes (simple quotes), soit par des guillemets (double
quotes). 3

Types composites
élémentaires(structures
: Rappel de données)

• En plus des types de données simples (int, float...), Python offre différents types
de structures de données : manière d’organiser les données pour faciliter leur
traitement.

• Une donn e (variable ou expression) de type composite est une entit qui
rassemble dans une seule structure un ensemble d’entit s plus simples : les listes,
les tuples, les dictionnaires, les ensembles, les listes chainées……

• On les appelle aussi conteneurs ou collections. Ce sont des objets qui


contiennent d’autres objets.

• Nous verrons dans ce cours : Les listes, les tuples, les dictionnaires et les
ensembles (sets).

4



Types composites
élémentaires(structures
: Rappel de données)
Les listes, les tuples, les dictionnaires et les ensembles….

• Les listes et les tuples sont des séquences : une collection


d’éléments ordonnés, indexés par des entiers.

• Les éléments d’une collection ne sont pas forcément de même type.


• Les listes et les dictionnaires sont modifiables, contrairement aux
tuples.

• Les ensembles sont une collection d’éléments disjoints et


hachables.

• Les chaines de caractères sont un exemple particulier de listes.


5

Types composites
Les cha nes de caract res, type string str
• Une donn e (variable ou expression) de type composite est une
entit qui rassemble dans une seule structure un ensemble
d’entit s plus simples.

• Dans le cas d'une chaîne de caractères, ses entités plus simples


sont évidemment les caractères eux-mêmes.

• Le type str est un type de variable non mutable.


Remarque
• La séquence \n dans une chaîne provoque un saut à la ligne.
• La séquence \’ permet d'insérer une apostrophe dans une chaîne
délimitée par des apostrophes 6





Types composites
élémentaires : Rappel

Les cha nes de caract res, type string str


• Python est pourvu de mécanismes qui permettent d'accéder
séparément à chacun des caractères d'une chaîne

Exemple : Accès aux caractères individuels d'une chaîne

>>> ch = "Maria"
>>> print(ch[0], ch[3])
M i
>>>



Types composites
Opérations élémentaires sur les chaînes

Concaténation (+) len()


a = 'Petit poisson' >>> a = 'Petit poisson’
b = ' deviendra grand' >>> b = ' deviendra grand’
c=a+b >>> c = a + b
print c >>> print(c)
petit poisson deviendra grand Petit poisson deviendra grand

Conversion en nombre d’une chaîne de caractères qui représente un nombre


>>> ch = ‘8647'
>>> print ch + 45
==> *** erreur *** on ne peut pas additionner une chaîne et un nombre

>>> n = int(ch)
>>> print n + 65
8712 # OK : on peut additionner 2 nombres
8

Exercices

1. Écrivez un script qui détermine si une chaîne contient ou non le caractère «e».

2. Écrivez un script qui compte le nombre d'occurrences du caractère «e» dans une
chaîne.

3. Écrivez un script qui recopie une chaîne dans une nouvelle variable, en insérant
des astérisques entre les caractères. Ainsi par exemple, « gaston » devra devenir
« g*a*s*t*o*n »

4. Écrivez un script qui recopie une chaîne (dans une nouvelle variable) en
l'inversant. Ainsi par exemple, « zorglub » deviendra « bulgroz ».

6. En partant de l'exercice précédent, écrivez un script qui détermine si une chaîne


de caractères donnée est un palindrome (c'est-à-dire une chaîne qui peut se lire
indifféremment dans les deux sens), comme par exemple « radar » ou « s.o.s ».

Les structures de données : Listes


Les listes :
• Syntaxe : éléments séparés par des virgules, et entourés de crochets.
• Les éléments sont modifiables. Ils peuvent être hétérogènes
• Une liste peut contenir une autre liste
• Elle peut être parcourue à l’aide d’une boucle (for par exemple).
• Il existe plusieurs fonctions facilitant la manipulation des listes.

10

Les structures de données : Listes

11
Les structures de données : Listes

Remarque

Pour obtenir une liste exhaustive des méthodes disponibles pour les listes,
on peut utiliser la fonction : dir(maListe)
maListe étant une liste.

12

Les structures de données : Listes

13
Les structures de données : Listes

14
Exercices

1. Analyser le petit script ci-dessous et commenter son fonctionnement :


jour = ['dimanche','lundi','mardi','mercredi','jeudi','vendredi','samedi']
a, b = 0, 0
while a<25:
a=a+1
b=a%7
print a, jour[b]

Reprendre avec une boucle for

2. Soit L une liste de noms


Ecrire un script qui affiche chacun de ces noms avec le nombre de caractères
correspondant.

3. Écrire une boucle de programme qui demande à l'utilisateur d'entrer des notes
d'élèves. La boucle se terminera seulement si l'utilisateur entre une valeur
négative. Avec les notes ainsi entrées, construire progressivement une liste.
Après chaque entrée d'une nouvelle note (et donc à chaque itération de la
boucle), afficher le nombre de notes
15



Exercices
1. Soient les listes suivantes :
t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
t2 = ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre',
'Décembre']
Écrivez un petit programme qui crée une nouvelle liste t3. Celle-ci devra contenir tous les éléments des
deux listes en les alternant, de telle manière que chaque nom de mois soit suivi du nombre de jours
correspondant : ['Janvier',31,'Février',28,'Mars',31, etc...].
2. Écrivez un programme qui affiche « proprement » tous les éléments d'une liste. Si on l'appliquait par
exemple à la liste t2 de l'exercice ci-dessus, on devrait obtenir : Janvier Février Mars Avril Mai Juin
Juillet Août Septembre Octobre Novembre Décembre
3. Écrivez un programme qui recherche le plus grand élément présent dans une liste donnée. Par exemple, si
on l'appliquait à la liste [32, 5, 12, 8, 3, 75, 2, 15], ce programme devrait afficher : le plus grand élément de
cette liste a la valeur 75.
4. Écrivez un programme qui analyse un par un tous les éléments d'une liste de nombres (par exemple celle
de l'exercice précédent) pour générer deux nouvelles listes. L'une contiendra seulement les nombres pairs
de la liste initiale, et l'autre les nombres impairs. Par exemple, si la liste initiale est celle de l'exercice
précédent, le programme devra construire une liste pairs qui contiendra [32, 12, 8, 2], et une liste impairs
qui contiendra [5, 3, 75,15].
Astuce : pensez à utiliser l'opérateur modulo (%) déjà cité précédemment.
5. Écrivez un programme qui analyse un par un tous les éléments d'une liste de mots (par exemple : ['Jean',
'Maximilien', 'Brigitte', 'Sonia', 'Jean-Pierre', 'Sandra'] pour générer deux nouvelles listes. L'une contiendra
les mots comportant moins de 6 caractères, l'autre les mots comportant 6 caractères ou davantage.

16

Les structures de données : Tuples


Les tuples
Un tuple est une séquence non modifiable d’éléments.

• Syntaxe : éléments séparés par des virgules, et entourés de parenthèses.


• Les éléments sont ordonnés (indicés) et peuvent être hétérogènes.
Exemple : t = (’a’, 2, [1, 3])

• Les tuples s’utilisent comme les listes mais leur parcours est plus rapide.
• ells sont utiles pour définir des constantes.

17

Les structures de données : Tuples

Les tuples
L’affectation et l’indiçage fonctionnent comme avec les listes. Mais si on essaie
de modifier un des éléments du tuple, Python renvoie un message d’erreur.

18
Les structures de données : Tuples
• Pour ajouter un élément (ou le modifier), il faut créer un autre tuple.
• Pour utiliser un tuple d’un seul élément, il faut ajouter une virgule après l’élément
(element,) pour éviter toute ambiguïté.

• Il est possible de créer un tuple sans les parenthèses (déconseillé).


• tuple(sequence) fonctionne exactement comme la fonction list()

19

Exercices
Analyser le petits scripts ci-dessous :
1. >>> tup = 'a', 'b', 'c', 'd', 'e'
>>> print(tup

2. >>> tup = ('a', 'b', 'c', 'd', ‘e'


>>> print(tup

3. >>> print(tup[2:4]

4. >>> tup[1:3] = ('x', ‘y’

5. >>> tup = ('Toto',) + tup[1:]



>>> print(tup)


6. >>> tu1, tu2 = ("a","b"), ("c","d","e")



>>> tu3 = tu1*4 + tu2
>>> tu

7. >>> for e in tu3: !



... print(e, end=":") 


20
3

Exercices
Analyser les petits scripts ci-dessous :
1. >>> tup = 'a', 'b', 'c', 'd', 'e'
>>> print(tup
('a', 'b', 'c', 'd', 'e')

2. >>> tup = ('a', 'b', 'c', 'd', ‘e'


>>> print(tup
('a', 'b', 'c', 'd', 'e')

3. >>> print(tup[2:4]
('c', 'd'

4. >>> tup[1:3] = ('x', ‘y’


TypeError: 'tuple' object does not support item assignment


5. >>> tup = ('Toto',) + tup[1:]



>>> print(tup
('Toto', 'b', 'c', 'd', 'e')


6. >>> tu1, tu2 = ("a","b"), ("c","d","e")



>>> tu3 = tu1*4 + tu2
>>> tu
('a', 'b', 'a', 'b', 'a', 'b', 'a', 'b', 'c', 'd', 'e')


7. >>> for e in tu3: !



... print(e, end=":")
a:b:a:b:a:b:a:b:c:d:e: 21
3

Les structures de données : Dictionnaires


Les dictionnaires
Les dictionnaires sont une collection d’association clé - valeur

Syntaxe : Collection de couples clé : valeur entourée d’accolades.

Exemple : animal = {’nom’ :’singe’, ’poids’ :70, ’taille’ :1.75}

• Les dictionnaires sont des collections non ordonnées d’objets. Il n’y a donc pas d’ordre (i.e.
pas d’indice).
• On accède aux valeurs par les clés (ex. animal[’nom’] retourne singe).

22

Exemples
Analyser le petits scripts ci-dessous :
ani1 = {’nom’ :’singe’, ’poids’ :70, ’taille’ :1.75}

1. print(ani1)

2. print(ani1.keys())
print(list(ani1.keys()))

3. print(ani1.values()
print(list(ani1.values()))

5. ani1[’age’]=1
print(ani1)

6. del ani1[’age’] 

print(ani1)


7. print (’poids’ in ani1) 



print (’singe’ in ani1)

23
5

Exemples
Analyser le petits scripts ci-dessous :
ani1 = {’nom’ :’singe’, ’poids’ :70, ’taille’ :1.75
ani2 = dict()

1. print(ani2, type(ani2)
ani2[”nom”]=’girafe’
ani2[”poids”]=110
ani2[”taille”]=1.5
print(ani2)

2. ani3 = {}
print(ani3, type(ani3)
animaux = [ani1 , ani2]
print(animaux)

3. for animal in animaux :


print(animal[’nom’],end=’ ’))

24

Exemples

Ecrire 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.

25

Exemples

26
Exemples

27
Les structures de données : Ensembles
Les ensembles (sets)
• Un ensemble (set) est une collection itérable non ordonnée d’éléments hachables distincts.
• C’est une sorte de dictionnaire où les valeurs seraient ignorées, seules les clefs comptent.
Syntaxe : éléments séparés par des , et entourés d’accolades.

Exemple : ens ={2,’ab’,0.5}

28

Les structures de données : Ensembles

29
Les structures de données : Arrays
Array
• Un Array est une séquence qui permet de représenter de manière compacte une liste de valeurs toutes
du même type (élémentaire). Sa taille n'est pas fixe.

• Faire from array import array pour l’utiliser


Definition d’une Array :

• a = array('d', [2.3, 5.4, 3.2, 2.7]) : définit une array de type double
• les différents types sont :
c : caractère.
b : entiers signés sur 1 octet.
B : entiers non signés sur 1 octet.
i : entiers signés sur 2 octets.
I : entiers non signés sur 2 octets.
f : float sur 4 octets.
d : double sur 8 octets.

• pour définir une array de caractères, donner une chaîne : a = array('c', 'abcde')

https://docs.python.org/fr/3/py-modindex.html (index des modules Python)


30

Les structures de données : Arrays


Lectures et modifications d'une array :
• a[0], a[1:3] et toutes les opérations sur les séquences sont valables.
• a.append(5.3) : rajoute une valeur à la fin.
• a.extend([2.1, 8.3]) : rajoute à la fin la liste ou l'array (qui doit alors avoir le même type).
• a.count(3.2) : renvoie le nombre de valeurs qui sont à 3.2 dans l'array.
• a.index(3.2) : renvoie le plus petit index (origine à 0) dont la valeur est 3.2.
• a.insert(2, 7.7) : insère la valeur à la position 2 (origine à 0) et décale les valeurs après.
• a.insert(-1, 7.7) : insère la valeur à l'avant-dernière position.
• a.remove(7.7) : enlève la première valeur qui vaut 7.7 (et décale le reste).
• a.pop(2) : enlève la valeur à la position 2 (origine à 0) et la renvoie.
• a.pop() : enlève la dernière valeur et la renvoie (équivalent à a.pop(-1).
• a.reverse() : renverse la liste en place

31

Retour sur les chaines de caractères


• Une chaine de caractères est une suite de caractères entourés de guillemets simples ou
doubles. s = ”Fin !” ou s = ’Fin !’

• Son type de données non modifiable est str.


• Elle peut être considérée comme une liste (de caractères), mais non modifiable :
[’F’,’i’,’n’,’ ’,’ !’] (s[1] vaut i). Une fois la chaîne définie, on ne peut changer ses caractères
(s[1]=’u’ erreur !).

• Elle peut contenir des caractères spéciaux comme \n (pour le retour à la ligne) et \t pour
la tabulation...

• Elle peut elle même contenir des ’ ou ”, pour que ceux-ci ne soient pas confondus avec la
fin de la chaine il suffit :

- soit de les précéder de \ : ch=’l\’enfant’

- soit d’alterner ’ et ” dans la déclaration : ch=”l’enfant” ou ch=’la valeur de ”a” est :’

32

Retour sur les chaines de caractères

33
Retour sur les chaines de caractères

34
Exercice
Huit petits canetons s’appellent respectivement : Jack, Kack, Lack, Mack, Nack, Oack, Pack
et Qack. Écrivez un petit script qui génère tous ces noms à partir des deux chaînes suivantes :
prefixes = 'JKLMNOP' et suffixe = 'ack’

utilisez une instruction for ... in ..., votre script ne devrait comporter que deux lignes.

35


Encore des fonctions

36
Encore des fonctions

37
Encore des fonctions

38
Encore des fonctions
Formatage des chaines de caractères

39
Encore des fonctions
Formatage des chaines de caractères

40

Vous aimerez peut-être aussi