Année Universitaire
2024-2025
Programmation Python
Filières: ING_TC_2/MP_BD_1
Enseignante: Noussaiba JAAFAR
E-mail:
[email protected] Plan du cours
Chapitre 1 : Eléments de base du langage Python
Chapitre 2 : Les structures conditionnelles et itératives
Chapitre 3 : Les collections d’objets en Python
Chapitre 4 : Les fonctions
Chapitre 5 : Les classes
Chapitre 6: Les fichiers
2
Collections d’objets en Python
Chapitre 3
Tuples, Listes, Chaines, Dictionnaires et Ensembles
3
Chapitre 3
1 Tuple (type tuple)
2 Liste (type list)
3Chaîne de caractères (cas particulier de liste)
4- Dictionnaire (type dict)
5 Ensemble (type set)
6 Exercices
4
1- Tuple (type tuple)
1-1 Définition et caractéristiques
Tableau statique en lecture seule d’objets hétérogènes
Un tuple est constitué d'un certain nombre de valeurs séparées par des virgules. (les
éléments peuvent être entre () ou non)
Taille et contenu fixes
Impossible de modification: objet non mutable (immutable)
Structure complexe (tuple de tuples et autres)
>>> fruits = ("apple", "orange", "tomato", "banana")
>>> print(type(fruits)) <class 'tuple'>
>>> print(fruits) ('apple', 'orange', 'tomato', 'banana')
>>> fruits = "apple", "orange", "tomato", "banana"
>>> print(type(fruits))
<class 'tuple'>
>>> print(fruits)
('apple', 'orange', 'tomato', 'banana') 5
1- Tuple (type tuple)
1-2 Création d’un tuple et accès aux données
#définition d'un tuple
>>> t1 = (2,6,8,10,15,26)
>>> print(t1)
(2, 6, 8, 10, 15, 26)
#taille du tuple
>>> print(len(t1))
6
#accès indicé
>>> a = t1[0] (1er élément, les indices vont de 0 à len(t1)-1)
>>> print(a)
2
>>> print(type(a)) (a n’est pas un tuple)
<class 'int'> 6
1- Tuple (type tuple)
1-2 Création d’un tuple et accès aux données
#modification d’un tuple ?
>>> t1[2] = 3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment (Erreur)
#plage d’indices
>>> b = t1[2:5]
>>> print(b)
(8, 10, 15)
#autre plage
>>> c = t1[:4] Les 4 premiers éléments c.-à-d. les indices 0, 1, 2, 3
>>> print(c)
(2, 6, 8, 10) 7
1- Tuple (type tuple)
1-2 Création d’un tuple et accès aux données
#indiçage négatif
>>> d = t1[-1] accéder au dernier élément du tuple
>>> print(d)
26
#indiçage négatif
>>> e = t1[-3:] les trois derniers éléments
>>> print(e)
(10, 15, 26)
8
1- Tuple (type tuple)
1-3 Autres opérations sur les tuples
Les tuples peuvent être concaténés, répétés, indexés et tranchés.
#concaténation
>>> t1 = (2, 6, 8, 10, 15, 26)
>>> t2 = (7, 9, 31)
>>> t3 = t1 + t2
>>> print(t3)
(2, 6, 8, 10, 15, 26, 7, 9, 31)
#réplication
>>> t4 = 2 * t2
>>> print(t4)
(7, 9, 31, 7, 9, 31)
9
1- Tuple (type tuple)
1-3 Autres opérations sur les tuples
#tuples d’objets hétérogènes
>>> v1 = (3,6,"toto",True,34.1)
>>> print(v1) (3, 6, 'toto', True, 34.1)
#tuple de tuples (structure complexe)
>>> x = ((2,3,5),(6,7,9),(1,8)) sorte de tableau à deux dimensions
>>> print(x) ((2, 3, 5), (6, 7, 9), (1, 8))
>>> x[0] (2, 3, 5)
>>> x[1] (6, 7, 9)
>>> x[2] (1, 8)
#accès indicé dans un tuple de tuples
>>> print(x[2][1]) 8
#accès aux tailles dans un tuple de tuples >>> print(len(x)) 3
>>> print(len(x[2])) 2 10
2- Liste (type list)
2-1 Définition et caractéristiques
Tableau dynamique en lecture et écriture d’objets hétérogènes
Possibilité de modification de la taille et du contenu: objet mutable
Liste ≈ tuple de taille dynamique et modifiable
Séquence ordonnée de valeurs
Ecrit sous la forme d'une séquence de valeurs séparées par des virgules entre
crochets.
Les valeurs peuvent être de différents types (généralement, les éléments ont tous le
même type: chaine de caractères est un cas particulier d’une liste)
>>> fruits = ["apple", "orange", "tomato", "banana"]
>>> print(fruits)
['apple', 'orange', 'tomato', 'banana']
>>> print(type(fruits))
<class 'list'>
11
2- Liste (type list)
2-2 Opérations sur les listes
#définition d’une liste
>>> L1 = [2,6,8,10,15,26]
>>> print(L1)
[2, 6, 8, 10, 15, 26]
>>> print(type(L1))
<class 'list'>
#taille d’une liste
>>> print(len(L1))
6
#accès indicé
>>> a = L1[0]
>>> print(a)
2
12
2- Liste (type list)
2-2 Opérations sur les listes
#modification ! possible !
>>> L1[2] = 3
>>> print(L1[2])
3
>>> print(L1)
[2, 6, 3, 10, 15, 26]
Remarques:
Les autres mécanismes associés aux tuples restent valables aux listes :
• plages d’indices (slicing)
• indiçages négatifs
• objets hétérogènes
• liste de listes (tableaux 2D ou +) /liste de tuples
• concaténation, réplication
13
2- Liste (type list)
2-3 Autres opérations sur les listes
#autre liste
>>> L2 = [32, 69, 28, 69] (Une liste est un objet (instance de classe)
auquel est associé des méthodes permettant de le manipuler.)
#ajout
>>> L2.append(21)
>>> print(L2)
[32, 69, 28, 69, 21]
#insertion à l’indice 1
>>> L2.insert(1,53)
>>> print(L2)
[32, 53, 69, 28, 69, 21]
#suppression l’élément d’indice 3
>>> del L2[3]
>>> print(L2) [32, 53, 69, 69, 21] (28 a disparu de L2) 14
2- Liste (type list)
2-3 Autres opérations sur les listes
#accès + suppression de l’élément d’indice 1
>>> a = L2.pop(1)
>>> print(a)
53
>>> print(L2)
[32, 69, 69, 21] (53 a disparu de L2)
#inversion
>>> L2.reverse()
>>> print(L2)
[21, 69, 69, 32]
#étendre
>>> L2.extend([34,55])
>>> print(L2)
[21, 69, 69, 32, 34, 55]
15
2- Liste (type list)
2-3 Autres opérations sur les listes
#comptage
>>> L2.count(69) 2
#trier une liste d’entiers
>>> L2.sort()
>>> print(L2) [21, 32, 34, 55, 69, 69]
#trier une liste de lettres
>>> l = ['c','g','h','a','f','e','b','d']
>>> l.sort()
>>> print(l) ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
#trier une liste de mots
>>> l = ['hello','coucou','bonjour','hi']
>>> l.sort()
>>> l ['bonjour', 'coucou', 'hello', 'hi']
Remarque: l.clear() permet de vider la liste: []
16
2- Liste (type list)
2-3 Autres opérations sur les listes
#recherche d’élément
>>> L = [20, 45, 45, 3]
>>> trouve = 3 in L
>>> print(trouve)
True
#index
>>> L.index(3)
3
#retrait par valeur
>>> L.remove(45)
>>> print(L)
[20, 45, 3]
17
2- Liste (type list)
2-4 Listes en intension (List Comprehensions)
Objectif : un mécanisme simple (et concis) pour générer une liste à
partir d’une autre liste.
Exemple 1 : Mettre tous les chiffres au carré
source = [1,5,8,12,7] source = [1,5,8,12,7]
resultat = [] resultat = [v**2 for v in source]
for v in source: print(resultat)
resultat.append(v**2)
print(resultat) Cette écriture facilite la tâche !
Exemple 2: Traitements conditionnels
source = [1,5,8,12,7] source = [1,5,8,12,7]
resultat = [] resultat = [v**2 for v in source if (v % 2 == 0)]
for v in source: print(resultat)
if (v % 2 == 0):
resultat.append(v**2)
print(resultat) 18
2- Liste (type list)
2-5 Exemples (Liste en compréhension ou en intension)
Evaluer directement les listes suivantes :
>>> [ 1 for k in range(4) ]
[1, 1, 1, 1]
>>> [ 0 for k in range (2) ]
[0, 0]
>>> [ h.upper( ) for h in ['n','s','i'] ]
['N', 'S', 'I']
>>> [ ord(z) for z in ['a','b','c'] ]
[97, 98, 99]
>>> ['mot' + str(k) for k in range(1)]
['mot0']
19
2- Liste (type list)
2-6 Affectation vs Copy()
Une variable de type liste est une référence
#L3
>>> L3 = [61,92,17]
>>> print(L3)
[61, 92, 17]
#affectation
>>> L4 = L3 En réalité, c’est la référence qui est copiée.
>>> print(L4) L3 et L4 « pointent » au même emplacement.
[61, 92, 17]
#modification d’une valeur
>>> L4[1] = 55
>>> print(L4) [61, 55, 17]
>>> print(L3) [61, 55, 17]
20
2- Liste (type list)
2-6 Affectation vs Copy()
#L3
>>> L3 = [61,92,17]
>>> print(L3)
[61, 92, 17]
#copie des valeurs
>>> L4 = L3.copy() L4 référence une nouvelle zone mémoire,
>>> print(L4) et les données de L3 y sont recopiées
[61, 92, 17]
>>> L4[1] = 55
>>> print(L4)
[61, 55, 17]
>>> print(L3)
[61, 92, 17] L3 n’est pas modifiée 21
3- Chaîne de caractères
3-1 Opérations
Une chaîne de caractères est une liste particulière avec des méthodes
associées
#définir une chaîne
>>> s1 = "bonjour le monde"
>>> print(s1) bonjour le monde
#longueur
>>> long = len(s1)
>>> print(long) 16
#accès indicé
>>> s2 = s1[:7]
>>> print(s2) bonjour
22
3 Chaîne de caractères
1 Opérations
#non modifiable
>>> s1[0] = "B" Erreur: Une chaîne n’est pas modifiable
solution 1: convertir la chaine en une liste
>>> s1 = "bonjour le monde"
>>> s1 = list(s1)
>>> s1[0] = "B"
>>> ''.join(s1) 'Bonjour le monde'
solution 2: utiliser la concaténation
>>> s1 = "bonjour le monde"
>>> s1 = "B" + s1[1:]
>>> s1 'Bonjour le monde'
23
3- Chaîne de caractères
3-1 Opérations
Une chaîne peut être transformée en liste pour réaliser des traitements
sophistiqués. L’outil est très souple.
#transformation en liste
>>> S = "Bonjour le monde"
>>> liste = list(S) (Toutes les opérations sur les listes sont possibles après)
>>> print(liste) ['B', 'o', 'n', 'j', 'o', 'u', 'r', ' ', 'l', 'e', ' ', 'm', 'o', 'n', 'd', 'e']
#découpage par séparateur
>>> S = "Bonjour le monde"
>>> decoupe = S.split(" ") (Le séparateur peut être tout autre caractère)
>>> print(decoupe) ['Bonjour', 'le', 'monde']
#former une chaîne à partir d’une liste
>>> SB = "".join(liste)
>>> SB 'Bonjour le monde' 24
4 Dictionnaire (type dict)
1 Définition et caractéristiques
Liste avec accès par clé
Dictionnaire : collection non-ordonnée (non indicée) d’objets (simples
ou évolués) s’appuyant sur le mécanisme associatif « clé – valeur ».
Les valeurs sont mappées sur une clé
Les valeurs sont accessibles par leur clé
Les clés sont uniques et immutables
Les valeurs ne peuvent pas exister sans clé
25
4- Dictionnaire (type dict)
4-2 Opérations sur les dictionnaires
#définition d'un dictionnaire
>>> d1 = {'Pierre':17, 'Paul':15,'Jacques':16}
>>> print(d1)
{'Pierre': 17, 'Paul': 15, 'Jacques': 16}
>>> print(type(d1))
<class 'dict'>
ou
>>> print(d1.items())
dict_items([('Pierre', 17), ('Paul', 15), ('Jacques', 16)])
#nombre d'élements
>>> print(len(d1))
3
26
4- Dictionnaire (type dict)
4-2 Opérations sur les dictionnaires
#liste des clés
>>> print(d1.keys()) dict_keys(['Pierre', 'Paul', 'Jacques'])
#liste des valeurs
>>> print(d1.values()) dict_values([17, 15, 16])
#accès à une valeur par clé
>>> print(d1['Paul']) 15 ou
>>> print(d1.get('Paul')) 15
#si clé n'existe pas
>>> print(d1['Pipa']) Erreur
Remarques:
d1.clear() vide le dictionnaire
d1 est une référence, d1.copy() permet de copier le contenu. 27
4- Dictionnaire (type dict)
4-2 Opérations sur les dictionnaires
#modification
>>> d1['Jacques'] = 18
>>> print(d1) {'Pierre': 17, 'Paul': 15, 'Jacques': 18}
#ajouter un élément
>>> d1['Henri'] = 22
>>> print(d1) {'Pierre': 17, 'Paul': 15, 'Jacques': 18, 'Henri': 22}
#ajout d'un bloc d’éléments
>>> d1.update({'Monica':36,'Bill':49})
>>> print(d1)
{'Pierre': 17, 'Paul': 15, 'Jacques': 18, 'Henri': 22, 'Monica': 36, 'Bill': 49}
28
4- Dictionnaire (type dict)
4-2 Opérations sur les dictionnaires
#vérifier la présence d’une clé
>>> test = 'Pierre' in d1
>>> print(test)
True
#suppression par clé
>>> del d1['Monica']
>>> print(d1)
{'Pierre': 17, 'Paul': 15, 'Jacques': 18, 'Henri': 22, 'Bill': 49}
29
4- Dictionnaire (type dict)
4-2 Opérations sur les dictionnaires
Remarque: Les clés ne sont pas forcément des chaînes de caractères.
#autre type de clé
>>> d2 =
{('Pierre',56):['Directeur',1253,True],('Paul',55):['Employé',100,False]}
>>> print(d2.keys())
dict_keys([('Pierre', 56), ('Paul', 55)])
>>> print(d2.values())
dict_values([['Directeur', 1253, True], ['Employé', 100, False]])
Dans cet exemple :
• clé est un tuple
• valeur est une liste. D’autres types sont possibles
30
5- Ensemble (type set)
5-1 Définition et caractéristiques
Une collection non ordonnée, sans éléments en double.
Permet:
test d'appartenance
élimination des entrées dupliquées
Opérations sur les ensembles : union, intersection, différence et
différence symétrique.
Fonctionnalité similaire aux listes
Ne peut pas être indexé ou tranché
Peut être créé avec {} ou vous pouvez convertir une liste en un
ensemble
31
5- Ensemble (type set)
5-2 Création d’un ensemble
#création d’un ensemble à partir d’une liste
>>> x = set([1, 2, 3])
>>> print(x)
{1, 2, 3}
>>> print(type(x))
<class 'set'>
ou directement
>>> x = {1, 2, 3}
32
6- Exercices
Ecrire un programme qui cherche tous les nombres divisibles par 7
mais non multiples de 5 et 2 entre 700 et 1099 (les deux inclus).
Les nombres obtenus doivent être affichés dans une liste.
Afficher le nombre total des nombres obtenus.
Ecrire un programme permettant de générer la liste des nombres de
Armstrong inférieurs à 1000.
(Un nombre est dit de Armstrong s’il est égal à la somme des cubes de
ses chiffres (par exemple, 370 = 33 + 73 + 03 = 27 + 343 + 0).
33
6- Exercices
Ecrire un programme Python qui partitionne un dictionnaire (clé:
identifiant de l’étudiant, valeur: la moyenne) en deux sous
dictionnaires:
etudiantAdmis dont les clés sont les étudiants admis et les valeurs des
clés sont les moyennes obtenues (moyennes supérieures ou égales à 10
).
etudiantNonAdmis dont les clés sont les étudiants non admis et les
valeurs des clés sont les moyennes obtenues (moyennes inférieures à
10).
Ecrire un programme qui génère deux ensembles A et B contenant
chacun les diviseurs d’un nombre saisi au clavier, vérifie si A est
inclus dans B, et calcule l’union et l’intersection de l’ensemble de
diviseurs communs de deux nombres.
34
6- Exercices
Utiliser une liste en compréhension (en intension) pour obtenir la liste
['ad', 'ae', 'bd', 'be', 'cd', 'ce'] à partir des chaînes "abc" et "de".
Indication : utilisez deux boucles for imbriquées.
Utiliser une liste en compréhension pour calculer la somme d’une liste
d’entiers de 0 à 9.
Voici la liste utilisée :
["T","O","A","p","t","p","l","o","e","s","t","t","r","s","t","t","t","u","m","m","p"]
A l'aide d'un script python, supprimer les éléments d'indice pair puis
supprimez toutes les lettres "t" restantes.
Ecrire un programme qui permet d’afficher la valeur maximale
trouvée dans une liste et son indice.
35
6- Exercices
Ecrire un programme pour calculer le N-ième terme UN de la suite de
FIBONACCI qui est donnée par la relation de récurrence:
U1=1, U2=1, UN=UN-1 + UN-2 (pour N>2)
Ecrire un programme qui permet d’inverser une chaine de caractères
sans utiliser reverse() ou [::-1]. (Ex. l’inverse de iTeam est maeTi)
Ecrire un programme qui saisit une chaine de caractères ch et qui
transforme toute lettre majuscule en minuscule et inversement. Ce
programme affiche aussi le nombre de lettres majuscules et de lettres
minuscules.
36