2. TP 1#
2.1. Objectifs#
Comprendre les bases de la programmation Python :
Variables, types de données, listes, ensembles et tuples.
Expressions conditionnelles et boucles
Trier
Dictionnaire
Fichiers et interaction avec les utilisateurs
Utilisation de la bibliothèque Numpy
2.2. Exercice 1 ★#
2.2.1. a. Commentaires#
Le symbole # est utilisé pour écrire un commentaire.
# Ceci est un commentaire
print("Bonjour")
2.2.2. b. Variables#
Une variable est un nom symbolique qui fait référence à une valeur ou qui la contient, et cette valeur peut être de différents types de données tels que des nombres, des chaînes de caractères ou des objets.
# une variable
message = "le monde!"
print(message)
Les variables sont utilisées pour stocker des valeurs qui peuvent être manipulées ; ici, a et b se voient attribuer des valeurs entières, et c stocke le résultat de leur addition, qui est ensuite affiché.
a = 10
b = 20
c = a + b
print(c)
Une variable se voit attribuer une valeur réél, puis est affichée.
# nombres réels
pi = 3.14
print(pi)
La fonction type() en Python est utilisée pour déterminer le type de données d’une variable ou d’une valeur.
# types de donnés
message1 = "Bonjour"
a = 12
pi = 3.14
print(type(message1))
print(type(a))
print(type(pi))
2.2.3. c. Concaténation de deux chaînes de caractères#
La concaténation de chaînes en Python désigne le processus qui consiste à joindre plusieurs chaînes de caractères pour en créer une nouvelle. Cela peut être réalisé en utilisant l’opérateur +. Lorsque vous utilisez + entre deux chaînes, Python les combine en une seule chaîne.
# Concaténation de deux chaînes de caractères
message = "le monde!"
print("Bonjour" + message)
# Concaténation de deux chaînes de caractères
message1 = "Bonjour "
message2 = "le monde!"
print(message1 + message2)
# concaténation de deux variables de types de données différents
# opération + sur deux types de données différents
# Supprimer le commentaire ci-dessous et lancer le code
message1 = "Bonjour en Python"
a = 3
# print(message1 + a)
Pourquoi avez-vous obtenu cette erreur ? Dans le code suivant, nous corrigeons cette erreur.
# solution de concaténation entre deux variables de types de données différents
message1 = "Bonjour en Python "
a = 3
print(message1 + str(a))
La conversion de type (ou type casting) désigne le processus de conversion d’un type de données en un autre.
str(a) convertit la variable entière a en une chaîne de caractères. Cela est nécessaire car vous ne pouvez pas concaténer directement une chaîne (message1) avec un entier (a) en utilisant l’opérateur + sans d’abord convertir l’entier en une chaîne.
2.2.4. d. Listes#
Une liste est une collection d’éléments, qui peuvent être de types de données différents, entourée de crochets [] et séparée par des virgules.
a = [10, 20, 30, 40, 50]
print(a)
Les listes sont des collections ordonnées, et chaque élément d’une liste possède une position spécifique appelée indice. L’indexation permet d’accéder aux éléments individuels d’une liste en utilisant leur position.
L’indice du premier élément d’une liste est 0, l’indice du deuxième élément est 1, et ainsi de suite.
Les éléments d’une liste peuvent être accédés en spécifiant le nom de la liste suivi de crochets contenant l’indice de l’élément que vous souhaitez accéder.
a = [10, 20, 30, 40, 50]
print(a[0])
print(a[1])
print(a[2])
print(a[3])
print(a[4])
# Supprimer le commentaire ci-dessous et lancer le code
a = [10, 20, 30, 40, 50]
# print(a[8])
Pourquoi avez-vous obtenu cette erreur ? L’erreur se produit car le code tente d’accéder à un élément de la liste a à l’indice 8, qui n’existe pas. En Python (et dans de nombreux langages de programmation), l’indexation des listes commence à 0 et va jusqu’à len(a) - 1, où len(a) est le nombre d’éléments dans la liste a.
message1 = "Bonjour en Python "
print(message1[0])
print(message1[1])
print(message1[2])
print(message1[3])
print(message1[4])
print(message1[5])
print(message1[6])
print(message1[7])
Les chaînes de caractères se comportent comme des listes de caractères à bien des égards, vous pouvez donc accéder à des caractères individuels en utilisant l’indexation, tout comme vous le feriez avec des éléments dans une liste. La fonction len() est utilisée pour déterminer le nombre de caractères (ou d’éléments) dans la chaîne (ou la liste).
message1 = "Bonjour en Python "
print(len(message1))
Nous allons maintenant créer une liste d’entiers
a = [10, 20, 30, 40, 50]
print(len(a))
La fonction len() est utilisée pour déterminer le nombre d’éléments dans une liste (ou la longueur de tout objet itérable). Lorsque len() est appliquée à une liste, elle retourne le nombre d’éléments (ou d’articles) présents dans cette liste.
a = [10, 20, 30, 40, 50]
# ajouter un nouveau numéro à la fin de la liste
a.append(60)
print(a)
La méthode append() est utilisée pour ajouter un élément unique à la fin d’une liste existante. La syntaxe pour utiliser append() est list_name.append(element), où list_name est le nom de la liste à laquelle vous souhaitez ajouter l’élément, et element est l’élément que vous voulez ajouter. L’élément peut être de n’importe quel type de données, et il est ajouté en tant que dernier élément de la liste.
Les éléments d’une liste peuvent être modifiés en attribuant une nouvelle valeur à un indice spécifique. L’indexation des listes commence à 0, donc a[0] fait référence au premier élément de la liste a, a[1] fait référence au deuxième élément, et ainsi de suite. Vous pouvez directement attribuer une nouvelle valeur à n’importe quel élément existant dans la liste en utilisant cette méthode d’indexation.
a = [10, 20, 30, 40, 50]
# modifier un numéro à un index donné
a[0] = 0
print(a)
# Supprimer le commentaire ci-dessous et lancer le code
a = [10, 20, 30, 40, 50]
# a[6] = 20
print(a)
La méthode insert() peut être utilisée pour insérer un élément à n’importe quel indice dans la plage actuelle de la liste. Si vous spécifiez un indice supérieur à la longueur actuelle de la liste, Python insérera le nouvel élément à la fin de la liste.
a = [10, 20, 30, 40, 50]
# l'insertion d'un élément à un index particulier modifiera la liste
a.insert(0, 0)
print(a)
print(len(a))
a = [10, 20, 30, 40, 50]
a.insert(6, 60)
print(a)
print(len(a))
a = [10, 20, 30, 40, 50]
# Nous allons maintenant essayer d'insérer un nombre à un index plus grand que la longueur
# de la liste. Nous veillerons à ce qu'il n'y ait pas d'erreur et le nouveau numéro
# est ajouté à la fin de la liste
a.insert(10, 60)
print(a)
print(len(a))
2.2.5. e. Tuples (listes non modifiables)#
Un tuple est une collection ordonnée d’éléments, similaire à une liste, mais les tuples sont immutables, ce qui signifie que leur contenu ne peut pas être modifié après leur création. Les tuples sont définis en utilisant des parenthèses () et les éléments sont séparés par des virgules. Les tuples peuvent contenir des éléments de différents types de données et peuvent même contenir d’autres tuples.
a = (10, 20, 30, 40, 50)
print(a)
a = (10, 20, 30, 40, 50)
print(a[0])
a = (10, 20, 30, 40, 50)
# Nous essayons maintenant de modifier un tuple
# Décommentez le code ci-dessous et lancez le code
# Un tupe est une liste non modifiable
# a[0] = 0
print(a)
Les tuples en Python sont immuables, ce qui signifie que leur contenu ne peut pas être modifié après leur création. Cela contraste avec les listes, qui sont mutables et permettent de modifier leurs éléments.
2.2.6. f. Sets (Ensembles)#
Un ensemble (set) est une collection non ordonnée d’éléments uniques. Il ne permet pas les éléments en double. Les ensembles sont définis en utilisant des accolades {}, et les éléments sont séparés par des virgules.
Lorsque vous créez un ensemble avec des éléments en double, Python supprime automatiquement les doublons, ne laissant que des éléments uniques dans l’ensemble.
# Un ensemble(Set) est une collection d'éléments distincts
a = {10, 20, 30, 40, 50, 10, 20, 30, 40, 50}
print(a)
Vous pouvez ajouter des éléments à un ensemble en utilisant la méthode add() et supprimer des éléments d’un ensemble en utilisant la méthode remove().
a = {10, 20, 30, 40, 50, 10, 20, 30, 40, 50}
a.add(10)
print(a)
a = {10, 20, 30, 40, 50, 10, 20, 30, 40, 50}
a.add(60)
print(a)
a = {10, 20, 30, 40, 50, 10, 20, 30, 40, 50}
a.remove(40)
print(a)
Nous allons maintenant essayer différents types de données avec les chiffres et afficher le résultat.
# set
a = {10, 20, 30, 40, 50, 10, 20, 30, 40, 50}
print(a)
print(type(a))
# tuple
b = (10, 20, 30, 40, 50, 10, 20, 30, 40, 50)
print(b)
print(type(b))
# list
c = [10, 20, 30, 40, 50, 10, 20, 30, 40, 50]
print(c)
print(type(c))
Les ensembles (sets) en Python suppriment automatiquement les doublons. Les tuples préservent l’ordre des éléments et permettent les doublons, mais sont immuables. Les listes préservent également l’ordre des éléments et permettent les doublons.
2.2.7. union()#
La méthode union() ou l’opérateur | combine deux ensembles en un nouvel ensemble contenant tous les éléments uniques des deux ensembles. Elle retourne un nouvel ensemble contenant les éléments présents dans a, b, ou les deux, sans doublons. L’opération d’union ne modifie pas les ensembles originaux a et b ; elle crée et retourne plutôt un nouvel ensemble avec les éléments combinés.
a = {10, 20, 30, 40, 50}
b = {10, 60, 70, 80, 90}
c = a.union(b)
print(c)
2.2.8. intersection()#
La méthode intersection() ou l’opérateur & retourne un nouvel ensemble contenant les éléments présents dans les deux ensembles a et b. Elle calcule l’intersection des ensembles a et b, ce qui signifie qu’elle inclut uniquement les éléments communs aux deux ensembles.
L’opération d’intersection ne modifie pas les ensembles originaux a et b ; elle crée et retourne plutôt un nouvel ensemble avec les éléments communs.
a = {10, 20, 30, 40, 50}
b = {10, 60, 70, 80, 90}
c = a.intersection(b)
print(c)
2.2.9. difference()#
La méthode difference() ou l’opérateur - retourne un nouvel ensemble contenant les éléments présents dans l’ensemble a mais pas dans l’ensemble b. Elle calcule la différence entre les ensembles a et b, ce qui signifie qu’elle inclut uniquement les éléments de a qui ne sont pas présents dans b.
L’opération de différence ne modifie pas les ensembles originaux a et b ; elle crée et retourne plutôt un nouvel ensemble avec les éléments de a qui ne sont pas dans b.
a = {10, 20, 30, 40, 50}
b = {10, 60, 70, 80, 90}
c = a.difference(b)
print(c)
a = {10, 20, 30, 40, 50}
b = {10, 60, 70, 80, 90}
c = b.difference(a)
print(c)
Question :
Étant donné les ensembles :
a = {10, 20, 30, 40, 50}
b = {15, 25, 35, 40, 50}
c = {5, 10, 15, 25, 30}
Trouvez l’intersection de
a
etb
.Trouvez la différence entre
b
eta
.Trouvez la différence symétrique entre
a
etc
.Déterminez si
a
est un sur-ensemble dec
.Trouvez l’union de l’intersection de
a
etb
avec la différence deb
etc
.
Écrivez le code Python pour chaque opération et expliquez les résultats.
2.3. Exercice 2 ★#
2.3.1. a. Expressions conditionnelles#
Les instructions conditionnelles (if, else, elif) vous permettent de contrôler le flux de votre programme en fonction de certaines conditions. Ces instructions vous aident à exécuter des blocs de code spécifiques en fonction du fait que les conditions soient vraies ou fausses.
2.3.2. L’instruction if#
L’instruction if est utilisée pour exécuter un bloc de code uniquement si une condition spécifiée est vraie. Elle peut être suivie d’un bloc else optionnel.
a = 12
if a % 2 == 0:
print(a, " is divisible by 2")
else:
print(a, " is not divisible by 2")
lang = "Français"
if lang == "Français":
print("Bonjour le monde!")
else:
print("Hello World!")
2.3.2.1. L’instruction if-elif-else
#
L’instruction if-elif-else
est utilisée lorsque vous avez plusieurs conditions à évaluer de manière séquentielle. Elle vous permet de vérifier plusieurs conditions et d’exécuter un bloc de code dès qu’une des conditions est True. Elle peut également avoir un bloc else
optionnel à la fin.
Syntaxe :
if condition1:
# bloc de code à exécuter si condition1 est True
elif condition2:
# bloc de code à exécuter si condition2 est True (optionnel)
elif condition3:
# bloc de code à exécuter si condition3 est True (optionnel)
else:
# bloc de code à exécuter si toutes les conditions sont False (optionnel)
b = 15
if b < 10:
print("b is less than 10")
elif b == 10:
print("b is equal to 10")
else:
print("b is greater than 10")
2.3.2.2. L’instruction if-elif
(sans else
)#
Vous pouvez également utiliser if-elif
sans bloc else
. Dans ce cas, si aucune des conditions n’est True, aucun bloc de code ne sera exécuté.
Syntaxe :
if condition1:
# bloc de code à exécuter si condition1 est True
elif condition2:
# bloc de code à exécuter si condition2 est True (optionnel)
c = 5
if c < 0:
print("c is negative")
elif c == 0:
print("c is zero")
elif c > 0:
print("c is positive")
2.3.3. Points clés :#
Utilisez
if
pour exécuter un bloc de code en fonction d’une seule condition.Utilisez
if-elif-else
pour évaluer plusieurs conditions de manière séquentielle et exécuter le bloc de code correspondant dès qu’une condition est True.Utilisez
if-elif
sanselse
lorsque vous avez plusieurs conditions à vérifier, mais que vous n’avez pas besoin d’exécuter de code si aucune des conditions n’est True.L’indentation est cruciale en Python pour délimiter les blocs de code au sein des instructions conditionnelles.
Les instructions conditionnelles sont essentielles pour contrôler la logique et le comportement de vos programmes Python en fonction de différents scénarios et conditions.
2.3.4. b. Boucles#
Les boucles peuvent également être utilisées pour accéder aux éléments à différents indices. Une boucle for
est utilisée pour itérer sur une séquence (par exemple, une liste, un tuple, une chaîne de caractères ou une plage de nombres). La variable de boucle (i
dans ce cas) prend chaque élément de la séquence un par un, ce qui vous permet d’effectuer des opérations sur chaque élément à l’intérieur de la boucle.
# liste
for i in [10, 20, 30, 40, 50, 10, 20, 30, 40, 50]:
print(i)
# tuples
for i in (10, 20, 30, 40, 50, 10, 20, 30, 40, 50):
print(i)
# set
for i in {10, 20, 30, 40, 50, 10, 20, 30, 40, 50}:
print(i)
2.3.5. c. Limites#
La fonction range(start, stop)
génère une séquence de nombres en commençant par start
jusqu’à (mais sans inclure) stop
.
for i in range(0, 10):
print(i)
range(start, stop, step)
spécifie l’incrément (ou le décrément) entre chaque nombre dans la séquence. Le paramètre step
détermine la différence entre chaque nombre successif dans la séquence.
for i in range(0, 10, 2):
print(i)
# print() par défaut affiche le message suivi d'une nouvelle ligne
# Mais vous pouvez changer son comportement
for i in range(0, 10, 2):
print(i, end=" ")
Lorsque la valeur de step
est négative (par exemple, -2
dans l’exemple ci-dessous), la séquence compte à l’envers, c’est-à-dire qu’elle diminue.
for i in range(10, 0, -2):
print(i)
for i in range(10, 0):
print(i)
print()
affiche par défaut le message suivi d’un saut de ligne. Cependant, vous pouvez modifier ce comportement. Le paramètre end=" "
dans print()
spécifie que chaque instruction print()
doit se terminer par un espace au lieu du caractère de saut de ligne par défaut (\n
).
for i in range(0, 10, 2):
print(i, end=" ")
2.3.5.1. d. split()#
split(): La fonction peut être utilisée pour séparer une chaîne de caractères en utilisant un délimiteur spécifié. Par défaut, le délimiteur est un espace blanc.
for i in "Bonjour,le,monde!".split():
print(i)
La boucle for
parcourt chaque élément de la liste produite par split()
, vous permettant de traiter chaque sous-chaîne individuellement.
for i in "Bonjour,le,monde!".split(","):
print(i)
Question: Écrivez un programme en Python pour afficher la sortie suivante:
1
12
123
1234
12345
123456
1234567
12345678
2.4. Exercice 3 ★#
2.4.1. a. Tri#
La méthode sort()
est utilisée pour trier les listes. Par défaut, sort()
organise les éléments par ordre croissant.
num = [10, 20, 30, 40, 50, 10, 20, 30, 40, 50]
num.sort()
print(num)
2.4.2. b. Tri (ordre décroissant)#
Passer reverse=True
trie les éléments par ordre décroissant. La méthode sort()
modifie directement la liste sans renvoyer une nouvelle liste.
num = [10, 20, 30, 40, 50, 10, 20, 30, 40, 50]
num.sort(reverse=True)
print(num)
2.4.3. c. minimum#
La fonction min()
renvoie l’élément le plus petit d’une séquence. Elle peut être utilisée directement avec des listes (ou d’autres objets itérables) pour trouver l’élément le plus petit.
num = [10, 20, 30, 40, 50, 10, 20, 30, 40, 50]
print(min(num))
2.4.4. d. maximum#
La fonction max()
renvoie l’élément le plus grand d’une séquence. Elle peut être utilisée directement avec des listes (ou d’autres objets itérables) pour trouver l’élément le plus grand.
num = [10, 20, 30, 40, 50, 10, 20, 30, 40, 50]
print(max(num))
2.4.5. e. sorted()#
La fonction sorted()
en Python peut être utilisée pour créer une nouvelle liste triée sans modifier la liste originale. Elle permet d’obtenir une version triée d’une liste sans altérer la liste d’origine.
Cette approche est utile lorsque vous avez besoin à la fois de la liste originale non triée et d’une version triée pour différents usages.
num = [70, 20, 30, 10, 50, 60, 20, 80, 70, 50]
tri = sorted(num, reverse=True)
print(num)
print(tri)
2.4.6. f. reversed()#
La fonction reversed()
inverse l’ordre des éléments dans une séquence sans modifier la liste d’origine. Le résultat de reversed()
est un itérateur, ce qui signifie qu’il génère les éléments de manière paresseuse, au fur et à mesure des besoins.
a = [12, 13, 14, 15]
a_reverse = reversed(a)
print(a_reverse)
for num in a_reverse:
print(num)
2.4.7. g. zip()#
La fonction zip()
associe les éléments de plusieurs itérables (listes, tuples, etc.) en fonction de leurs positions. Si les itérables d’entrée (a1
et b1
dans l’exemple ci-dessous) ont des longueurs différentes, zip()
s’arrête après que le plus court soit épuisé.
zip()
est couramment utilisé pour itérer simultanément sur plusieurs listes ou pour combiner des données provenant de différentes sources en tuples.
a1 = [1, 2, 3, 4]
b1 = [5, 6, 7, 8]
zipped = list(zip(a1, b1))
print(zipped)
2.4.8. h. enumerate()#
La fonction enumerate()
en Python est utilisée pour ajouter un compteur à un objet itérable (comme une liste, un tuple ou une chaîne de caractères) et le retourner sous forme d’objet enumerate
.
Cet objet enumerate
peut ensuite être utilisé dans des boucles ou d’autres itérations pour obtenir une liste d’éléments indexés.
a1 = [1, 2, 3, 4]
ezipped = enumerate(a1)
print(ezipped)
a1 = [1, 2, 3, 4]
ezipped = enumerate(a1)
for index, number in ezipped:
print(index, number)
Elle peut également être utilisée avec d’autres fonctions mentionnées ci-dessus.
a1 = [1, 2, 3, 4]
b1 = [5, 6, 7, 8]
ezipped = list(enumerate(zip(a1, b1)))
print(ezipped)
2.4.9. i. Chaîne de caractères#
sorted(…, key=str.lower, reverse=True) : La fonction sorted()
trie une liste. L’argument key=str.lower
permet de trier les mots sans tenir compte de la casse (majuscules/minuscules). L’argument reverse=True
indique que le tri doit être effectué en ordre décroissant (inverse).
print(sorted("Bonjour le monde!".split(), key=str.lower, reverse=True))
days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
days_num = list(enumerate(days))
print(days_num)
enumerate(days, start=1)
crée un objet enumerate
qui itère sur les jours, en commençant l’index à partir de 1 (start=1)
.
days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
days_num = list(enumerate(days, start=1))
print(days_num)
Question 1: Modifiez le code donné ci-dessous pour afficher les cinq plus grands numéros uniques.
num = [70, 20, 30, 10, 50, 60, 20, 80, 70, 50]
# sélectionner les cinq premiers numéros
tri = sorted(num, reverse=True)[:5]
print(tri)
Question 2
On vous donne une liste d’entiers représentant les chiffres de ventes mensuelles d’une entreprise sur une période de 12 mois. Votre tâche consiste à effectuer une série d’opérations en utilisant les fonctions de tri et de min/max pour analyser et manipuler les données.
sales = [1200, 3500, 2800, 4500, 3000, 2200, 3400, 3700, 4200, 3600, 2800, 3900]
Trouvez le mois avec les ventes les plus élevées.
Trouvez le mois avec les ventes les plus faibles.
Triez les données de ventes par ordre croissant (du plus petit au plus grand).
Triez les données de ventes par ordre décroissant (du plus grand au plus petit).
Créez une nouvelle liste des 3 mois avec les ventes les plus élevées. Affichez cette nouvelle liste.
Créez une nouvelle liste des 3 mois avec les ventes les plus faibles en utilisant la fonction
sorted()
sansreverse=True
et en tranchant le résultat. Affichez cette nouvelle liste.Triez les données de ventes en utilisant la fonction
sorted()
par ordre décroissant et créez une nouvelle liste contenant les données de ventes sans les 2 premiers mois. Affichez cette nouvelle liste.Écrivez une fonction
average_sales()
qui calcule et retourne la moyenne des ventes sur les 12 mois. Utilisez cette fonction pour afficher la moyenne des ventes et comparez-la avec les chiffres des ventes les plus élevées et les plus faibles.
2.5. Exercice 4 ★★#
2.5.1. a. Dictionnaire#
Un dictionnaire représente une collection non ordonnée d’éléments où chaque élément est une paire clé-valeur. Les clés doivent être uniques et immuables (chaînes de caractères, nombres, tuples), tandis que les valeurs peuvent être de n’importe quel type de données et peuvent être mutables.
a = {"contente": 12, "content": 12, "triste": 2}
print(a)
print(type(a))
Vous pouvez accéder (et même modifier) à la valeur associée à une clé en utilisant a[key]
.
a = {"contente": 12, "content": 12, "triste": 2}
a["contente"] = 10
print(a)
Itérer directement sur un dictionnaire permet d’itérer sur ses clés par défaut.
a = {"contente": 12, "content": 12, "triste": 2}
for key in a:
print("la phrase ", key, " apparait ", a[key], " fois")
a = {"contente": 12, "content": 12, "triste": 2}
a["joie"] = 10
print(a)
Trier directement un dictionnaire avec sorted()
trie ses clés et les retourne sous forme de liste.
mots = {"contente": 12, "content": 12, "triste": 2, "joie": 10}
print(sorted(mots))
L’utilisation de .items()
permet d’itérer sur les paires clé-valeur d’un dictionnaire.
a = {"contente": 12, "content": 12, "triste": 2}
for key, value in a.items():
print("la phrase ", key, " apparait ", value, " fois")
mots = {"contente": 12, "content": 12, "triste": 2, "joie": 10}
mots_tuple = [(key, value) for key, value in mots.items()]
print(mots_tuple)
Vous pouvez supprimer un élément d’un dictionnaire en utilisant del
suivi de a[key]
, où key
est la clé de l’élément que vous souhaitez supprimer.
a = {"contente": 12, "content": 12, "triste": 2}
del a["triste"]
print(a)
2.5.2. b. itemgetter#
itemgetter
est une fonction du module operator
qui est utilisée pour récupérer des éléments ou des objets d’un objet itérable (comme une liste, un tuple ou un dictionnaire) en fonction de leurs indices ou clés. Elle renvoie un objet callable qui extrait l’élément ou les éléments spécifiés de l’objet fourni.
Utiliser sorted()
avec itemgetter(1)
permet de trier une liste de tuples en fonction du deuxième élément (ici, la valeur
). Les opérations de tri ne modifient pas le dictionnaire d’origine ni son contenu, mais créent une liste triée de tuples.
from operator import itemgetter
mots = {"contente": 12, "content": 12, "triste": 2, "joie": 10}
mots_tuple = [(key, value) for key, value in mots.items()]
print(sorted(mots_tuple, key=itemgetter(1)))
2.5.3. c. Interaction with user#
La fonction input()
est utilisée pour accepter les entrées de l’utilisateur depuis la console. Le message à l’intérieur de input()
sert d’invite pour guider l’utilisateur sur ce qu’il doit saisir.
# nom = input("Quel est votre nom?")
# print(nom)
# age = input("Quel est votre âge? ")
# print(age)
# print(type(age))
# age = input("Quel est votre âge? ")
# age = int(age)
# print(age)
# print(type(age))
Question 1: Compréhension de l’ensemble et filtrage complexe
Vous avez une collection de données d’utilisateurs stockées sous forme de liste de dictionnaires. Chaque dictionnaire représente un utilisateur avec les clés suivantes : name, age et hobbies.
users = [
{"name": "Alice", "age": 30, "hobbies": {"reading", "swimming", "hiking"}},
{"name": "Bob", "age": 22, "hobbies": {"chess", "reading", "swimming"}},
{"name": "Charlie", "age": 25, "hobbies": {"gaming", "hiking", "reading"}},
{"name": "Diana", "age": 35, "hobbies": {"swimming", "yoga", "reading"}},
{"name": "Eve", "age": 29, "hobbies": {"gaming", "reading", "chess"}},
]
Écrivez un programme qui :
Trouve les loisirs (hobbies) communs à tous les utilisateurs.
Trouve les loisirs uniques (ceux qui n’appartiennent qu’à un seul utilisateur).
Trouve les utilisateurs qui partagent les exactement les mêmes loisirs (s’il y en a).
Trouve le loisir le plus populaire parmi tous les utilisateurs.
Affichez les résultats clairement et expliquez votre approche.
Question 2: Ecrire un programme en Python qui interagit avec l’utilisateur pour obtenir les informations suivantes de 5 étudiants :
Nom de l’étudiant
Âge
Grades en 5 modules
Une fois les informations obtenues pour les cinq étudiants, calculez et afficher les valeurs suivantes pour chaque module :
note moyenne
note maximale
note minimale
2.6. Exercice 5 ★★★#
Lire et écrire dans un fichier
2.6.1. a. Fichiers#
La fonction open()
ouvre un fichier et retourne un objet fichier correspondant qui vous permet d’interagir avec le fichier (lire son contenu, y écrire, etc.). La méthode read()
lit les données d’un fichier ouvert. La méthode write()
écrit des données dans un fichier ouvert.
# écrire dans un fichier
message = "Bonjour le monde"
with open("bonjour.txt", "w") as file:
file.write(message)
file.close()
# lire un fichier
with open("bonjour.txt", "r") as file:
text = file.read()
print(text)
file.close()
# écrire dans un fichier
message1 = "Bonjour le monde"
message2 = "Programmation en Python"
with open("bonjour.txt", "w") as file:
file.write(message1)
file.write(message2)
file.close()
# lire un fichier
with open("bonjour.txt", "r") as file:
text = file.read()
print(text)
file.close()
# Rédaction dans un fichier en utilisant le caractère de nouvelle ligne
message1 = "Bonjour le monde\n"
message2 = "Programmation en Python"
with open("bonjour.txt", "w") as file:
file.write(message1)
file.write(message2)
file.close()
with open("bonjour.txt", "r") as file:
text = file.read()
print(text)
file.close()
Dans Jupyter Notebook, le symbole ?
est utilisé pour accéder à la documentation et à l’aide des fonctions et objets. C’est un raccourci pour accéder au système d’aide intégré dans Python et les environnements Jupyter.
?open
?message1
?message2
Le code suivant ouvre le fichier “bonjour.txt” en mode lecture, lit son contenu, l’affiche, puis ferme le fichier.
with open("bonjour.txt", "r") as file:
text = file.read()
print(text)
2.6.2. b. readline()#
Cette fonction peut être utilisée pour lire un fichier ligne par ligne et non le contenu complet en un seul appel comme read()
message1 = "Bonjour le monde\n"
message2 = "Programmation en Python"
with open("bonjour.txt", "w") as file:
file.write(message1)
file.write(message2)
file.close()
Utilisez readline()
dans une boucle ou de manière itérative pour traiter chaque ligne d’un fichier séquentiellement. Cela est utile pour traiter des fichiers volumineux ou des fichiers où il est nécessaire de traiter chaque ligne indépendamment.
with open("bonjour.txt", "r") as file:
text = file.readline()
print(text)
file.close()
message1 = "Bonjour le monde\n"
message2 = "Programmation en Python\n"
with open("bonjour.txt", "w") as file:
file.write(message1)
file.write(message2)
file.close()
with open("bonjour.txt", "r") as file:
for line in file:
print(line)
file.close()
Question 1: Copiez un fichier HTML dans votre répertoire. Ecrire un programme en Python pour obtenir les valeurs suivantes :
nombre de caractères dans le fichier HTML
nombre de lignes dans le fichier HTML
nombre de mots dans le fichier HTML
les vingt premiers mots du fichier HTML
des mots distincts dans le fichier HTML
Question 2: Copier le CSV du fichier population.csv du dossier data. Le fichier contient les valeurs de population entre 1901 et 2016. Écrivez un programme en Python pour obtenir la valeur maximale.
la valeur maximale de la population
la valeur minimale de la population
2.7. Exercise 6 ★★★#
2.7.1. NumPy#
NumPy, une bibliothèque populaire pour les calculs numériques, offre des moyens efficaces d’effectuer des opérations mathématiques sur des tableaux, y compris des matrices. Les opérations NumPy sont optimisées pour les performances, en particulier avec de grands ensembles de données.
import numpy as np
2.7.2. a. Les opérations sur les matrices#
a1 = [1, 2, 3, 4]
b1 = [5, 6, 7, 8]
Addition de matrices avec np.add()
c1 = np.add(a1, b1)
print(c1)
Soustraction de matrices avec np.subtract()
c1 = np.subtract(a1, b1)
print(c1)
Multiplication de matrices avec np.multiply()
c1 = np.multiply(a1, b1)
print(c1)
c1 = np.multiply(4, b1)
print(c1)
L’objectif de np.dot
est de calculer le produit scalaire (ou produit matriciel) entre deux tableaux NumPy a1
et b1
.
Si
a1
etb1
sont des vecteurs (tableaux 1D), alorsnp.dot(a1, b1)
renvoie le produit scalaire des deux vecteurs, qui est un nombre unique obtenu en multipliant les éléments correspondants des vecteurs et en les additionnant.Si
a1
etb1
sont des matrices (tableaux 2D), alorsnp.dot(a1, b1)
calcule le produit matriciel entre les deux matrices.
np.dot
est utilisé pour effectuer un produit scalaire (ou matriciel) en fonction des dimensions des entrées.
c1 = np.dot(a1, b1)
print(c1)
c1 = np.dot(5, b1)
print(c1)
b1 = [5, 6, 7, 8]
c1 = np.dot(a1, b1)
print(c)
La fonction np.average()
de NumPy permet de calculer la moyenne pondérée (ou moyenne arithmétique) d’un tableau ou d’une liste de valeurs. Par défaut, elle calcule la moyenne simple, mais elle offre également la possibilité d’utiliser des poids pour chaque élément du tableau, si spécifié.
a1 = [1, 2, 3, 4, 5 ]
moyen = np.average(a1)
print(moyen)
2.7.3. b. Tranposition matricielle#
L’objectif de b1.T
en NumPy est d’afficher la transposée du tableau b1
, c’est-à-dire d’inverser ses dimensions. Si b1
est un vecteur ou une matrice, la transposition échange les lignes et les colonnes.
b1 = [[5, 6, 7, 8, 9], [1, 2, 3, 4, 5]]
print(b1)
b1 = np.array(b1)
print(b1.T)
2.7.4. c. Séparer une matrice en deux, horizontalement et verticalement#
La fonction np.hsplit()
divise un tableau horizontalement (le long des colonnes) aux indices spécifiés.
a = [[0, 0, 0], [0, 1, 0], [1, 0, 0], [1, 1, 1]]
a = np.array(a)
a = np.hsplit(a, [2])
a1 = a[0]
a2 = a[1]
print(a1)
print(a2)
?np.hsplit
La fonction np.vsplit()
divise un tableau verticalement (le long des lignes) aux indices spécifiés.
?np.vsplit
a = [[0, 0, 0], [0, 1, 0], [1, 0, 0], [1, 1, 1]]
a = np.array(a)
a = np.vsplit(a, [2])
a1 = a[0]
a2 = a[1]
print(a1)
print(a2)
2.7.5. d. Les opérations sur les matrices bidimensionnelles#
a2 = [[1, 2, 3, 4], [1, 2, 3, 4]]
b2 = [[5, 6, 7, 8], [5, 6, 7, 8]]
c2 = np.add(a2, b2)
print(c2)
c2 = np.subtract(a2, b2)
print(c2)
c2 = np.multiply(a2, b2)
print(c2)
a2 = [[1, 2, 3, 4], [1, 2, 3, 4]]
a2 = np.array(a2)
b2 = [[5, 6, 7, 8], [5, 6, 7, 8]]
b2 = np.array(b2)
c2 = np.dot(a2, b2.T)
print(c2)
2.7.6. e. Redéfinir une matrice#
.reshape() : L’objectif de b2.reshape(m, n)
en NumPy est de redimensionner le tableau b2
en une nouvelle forme avec m lignes et n colonnes. Cette méthode réorganise les éléments de b2
sans en modifier les valeurs, tant que le nombre total d’éléments reste le même.
Par exemple, si b2
a 8 éléments au total, b2.reshape(4, 2)
les réarrangera en un tableau 2D de 4 lignes et 2 colonnes.
b2.reshape(4, 2)
print(b2)
2.7.7. f. Créer des matrices avec des nombres aléatoires#
np.random.rand()
génère un tableau de nombres aléatoires uniformément distribués entre 0 et 1. np.zeros()
crée un tableau rempli de zéros de la forme spécifiée.
a = np.random.rand()
print(a)
a = np.random.rand(1)
print(a)
a = np.random.rand(2, 5)
print(a)
a = np.random.rand(2, 3, 3)
print(a)
a = np.zeros(1)
print(a)
a = np.zeros(1, dtype=int)
print(a)
a = np.zeros((2, 5), dtype=int)
print(a)
Question: Lisez les données présentes dans le fichier population.csv dans des tableaux en utilisant les fonctions numpy et calculez les valeurs suivantes:
la valeur maximale de la population et l’année
la valeur minimale de la population et l’année