Un tuple est une séquence immuable, c'est-à-dire que ses éléments ne peuvent pas être modifiés après sa création. Contrairement aux listes, les tuples sont souvent utilisés pour regrouper des éléments hétérogènes, tels que des coordonnées, dans un ensemble fixe et ordonné.
En informatique, un dictionnaire est une structure de données qui stocke des paires clé-valeur, permettant un accès rapide aux données via une clé unique. Il est très utile pour l'organisation des informations où chaque élément peut être récupéré rapidement par son identifiant.
1. Les tuples
Un tuple est une structure de données très proche des listes : il permet de stocker plusieurs valeurs dans une seule variable.
La différence principale est qu’un tuple est immuable : une fois créé, on ne peut pas modifier ses éléments (ajouter, supprimer ou changer une valeur).
On définit un tuple en utilisant des parenthèses ( ) :
coordonnees = (4, 7)
notes = (15, 12, 18)
Comme pour les listes, on peut accéder aux éléments grâce à leur indice (le premier indice est toujours 0) :
un tuple coordonnees qui contient les valeurs 3 et 7.
un tuple informations qui contient les valeurs "Alice", 15 et "Seconde".
# À compléter
coordonnees = .........
informations = .........
Tests :
# Tests
Affichage :
Console:
>>>
3. Exercice :
Dans un plan, un point est représenté par un tuple (x, y).
Écrire une fonction distance_origine qui prend en paramètre un point et renvoie la distance de ce point à l’origine (0,0).
La distance est calculée avec la formule :
$$\sqrt{x^2 + y^2}$$
Exemple :
>>> distance_origine((3, 4))
5.0
import math
def distance_origine(point):
x = point[.....]
y = ............
return math.sqrt(............)
point1 = (3, 8)
print(f"La distance entre {point1} et l'origine est {distance_origine(point1)}.")
Tests :
# Tests
Affichage :
Console:
>>>
4. Exercice :
On représente deux points par des tuples (x, y).
Écrire une fonction distance_points qui prend en paramètres deux tuples et renvoie la distance entre eux.
La distance est calculée avec la formule :
$$\sqrt{(x_2-x_1)^2 + (y_2-y_1)^2}$$
Astuce : on peut utiliser le dépaquetage d’un tuple pour récupérer directement ses valeurs :
import math
def distance_points(point1, point2):
x1, y1 = .......
x2, y2 = .......
return math.sqrt(........................)
point1 = (3, 8)
point2 = (4, 12)
print(f"La distance entre {point1} et {point2} est {distance_points(point1, point2)}.")
Tests :
# Tests
Affichage :
Console:
>>>
5. Exercice :
Écrire une fonction meilleure_note qui prend en entrée une liste de tuples, où chaque tuple contient le nom d’un étudiant et sa note.
La fonction doit retourner un string correspondant au nom de l’étudiant ayant la meilleure note.
Pour simplifier le problème ici, on considérera qu'il est le seul à avoir eu la meilleure note.
Rappel : on peut utiliser l’affectation multiple pour extraire directement le nom et la note d’un tuple :
student_scores = [
("Alice", 85),
("Bob", 72),
("Carol", 90),
("David", 60),
("Eve", 78),
("Frank", 88),
("Grace", 92),
("Henry", 70),
("Ivy", 68),
("Jack", 82),
("Kelly", 95),
("Leo", 73),
("Mia", 87),
("Nathan", 79),
("Olivia", 91),
("Paul", 67),
("Quinn", 76),
("Ryan", 83),
("Sophia", 89),
("Tyler", 74)
]
def meilleure_note(liste):
meilleur_nom = ............ # premier nom de la liste
meilleur_score = ........... # première note de la liste
for nom, note in liste: # dépaquetage automatique du tuple lors de la boucle
if ................. :
.................
.................
return meilleur_nom
print(f"C'est {meilleure_note(student_scores)} qui a la meilleure note! Bravo!")
Tests :
# Tests
Affichage :
Console:
>>>
6. Les dictionnaires
En Python, un dictionnaire est une structure qui associe une clé à une valeur.
Cela permet de retrouver facilement une information grâce à sa clé, un peu comme dans un vrai dictionnaire où on cherche un mot pour en obtenir la définition.
On écrit un dictionnaire avec des accolades { }, les clés et valeurs étant séparées par :.
eleve["age"] = 17 # modification
eleve["option"] = "Maths" # ajout d'une nouvelle clé
Enfin, on peut parcourir toutes les clés ou toutes les valeurs :
for cle, valeur in eleve.items():
print(cle, ":", valeur)
7. Exemple.
Regardons la commande coucou={1:"salut","chocolat":3,6:"avion"}.
1, "chocolat" et 6 sont des clefs.
"salut", 3 et "avion" sont les valeurs associées.
La commande coucou[6] renvoie "avion".
8. Exercice :
Créer un dictionnaire vide appelé personne_1 puis y ajouter les clés "nom", "âge" et "ville" avec des valeurs adaptées pour représenter une personne.
personne_1 = {}
# ajoutez les clés et valeurs ici
Tests :
# Tests
Affichage :
Console:
>>>
9. Exercice :
Créer un dictionnaire qui associe tous les jours de la semaine à leur numéro (1 pour lundi, 2 pour mardi, …, 7 pour dimanche).
Dans ce dictionnaire nommé semaine, le jour est la clé et le numéro est la valeur.
semaine = {
# à compléter
}
for jour in semaine.keys():
print(f"{jour} est le jour n°{semaine[jour]}.")
Tests :
# Tests
Affichage :
Console:
>>>
10. Exercice :
Écrire une fonction couleur_fruit qui prend en entrée un dictionnaire dico associant des fruits à leur couleur, ainsi qu’un string nom_fruit correspondant au nom d’un fruit.
La fonction doit retourner la couleur associée à ce fruit.
Si le fruit n’est pas présent dans le dictionnaire, la fonction retournera "Fruit inconnu".
Un dictionnaire est présent pour tester votre fonction.
Un professeur souhaite analyser les résultats d’un grand test. Pour cela, il dispose d’une liste contenant toutes les notes des élèves.
Écrire une fonction frequences_nbs qui prend en entrée une liste de nombres (les notes des élèves) et qui retourne un dictionnaire indiquant la fréquence de chaque note.
La fréquence d’une note est égale au nombre d’occurrences de cette note divisé par le nombre total de notes.
def frequences_nbs(liste):
dico = {}
for nb in liste:
if ...............: # le nb est déjà une clé du dictionnaire
..............
else: # on crée une nouvelle clé
..............
for clef in dico.keys():
dico[clef] = dico[clef] / .......... # on transforme les occurrences en fréquences
return dico
# Exemple de liste de notes (40 notes)
notes = [
12, 15, 12, 10, 18, 15, 12, 8, 10, 15,
18, 12, 14, 10, 10, 18, 8, 15, 12, 14,
16, 10, 8, 18, 12, 15, 14, 10, 12, 18,
9, 7, 6, 13, 19, 11, 17, 20, 5, 14
]
print(frequences_nbs(notes))
nombre = 15
freq = frequences_nbs(notes)[nombre]
print(f"Le nombre {nombre} a une fréquence de {freq}.")
print(f"C'est à dire qu'il représente à peu près {round(freq * 100, 2)} % des nombres.")
Tests :
# Tests
Affichage :
Console:
>>>
12. Exercice :
Écrire une fonction population_totale qui prend comme paramètre un dictionnaire dont les clés
sont des pays et les valeurs associées leur population.
La fonction doit renvoyer un entier correspondant à la population totale.
Un dictonnaire est présent pour tester votre fonction.
def population_totale(dico):
total = 0
for ............. in dico.values():
total += .............
return total
# Exemple de dictionnaire
country_populations = {
"Chine": 1444216107,
"Inde": 1393409038,
"États-Unis": 332915073,
"Indonésie": 276361783,
"Pakistan": 225199937,
"Brésil": 213993437,
"Nigéria": 211400708,
"Bangladesh": 166303498,
"Russie": 145912025,
"Mexique": 130262216,
"Japon": 126050804,
"Éthiopie": 123849456,
"Philippines": 113530590,
"Égypte": 112411076,
"Vietnam": 97580000,
"République démocratique du Congo": 89561403,
"Turquie": 84495243,
"Iran": 85075571,
"Allemagne": 83900473,
"Thaïlande": 69953881,
"France": 67406000,
"Monaco": 38300
}
print(f"La population totale des pays ci-dessus est de {population_totale(country_populations)}.")
Tests :
# Tests
Affichage :
Console:
>>>
13. Exercice :
Écrire une fonction produit_plus_cher qui prend en entrée un dictionnaire de produits et leur prix,
et qui retourne le nom du produit le plus cher.
Un dictionnaire est présent pour tester votre fonction.
Dans le jeu de cartes la bataille, la carte "9" l'emporte sur la carte "7" et la carte "dame" l'emporte
sur la carte "5".
Créer un dictionnaire qui fait correspondre à une valeur entre 2 et 14 une carte.
Ainsi :
les nombres entiers de 2 à 10 sont associés aux strings "2" à "10".
11 est associé à "valet", 12 à "dame", 13 à "roi" et 14 à "as".
Programmer une fonction bataille qui prend en paramètres deux entiers entre 2 et 14 et qui
retourne le résultat d'une bataille comme dans les exemples ci-dessous.
Exemples :
>>> bataille(3,11)
["Le premier joueur a la carte 3 et le deuxième joueur a la carte valet.",
"Le deuxième joueur l emporte avec la carte valet."]
>>> bataille(9,9)
["Le premier joueur a la carte 9 et le deuxième joueur a la carte 9.",
"Egalité entre les deux joueurs."]
# dictionnaire des cartes
cartes = {
# à compléter
}
def bataille(carte1, carte2):
resultat = []
resultat.append("Le premier joueur a la carte " + ...... + " et le deuxième joueur a la carte " + ....... + ".")
if ............ : # cas d'égalité
resultat.append("Egalité entre les deux joueurs.")
elif ............ : # si carte1 est plus grande
resultat.append("Le premier joueur l emporte avec la carte " + cartes[carte1] + ".")
else: # sinon, c'est le deuxième joueur
resultat.append("Le deuxième joueur l emporte avec la carte " + cartes[carte2] + ".")
return resultat
jeu = bataille(8, 13)
for element in jeu:
print(element)
Tests :
# Tests
Affichage :
Console:
>>>
15. Exercice : (sujet 7- 2025)
Le nombre d’occurrences d’un caractère dans une chaîne est le nombre
d’apparitions de ce caractère dans la chaîne.
Exemples :
le nombre d’occurrences du caractère o dans bonjour est 2 ;
le nombre d’occurrences du caractère b dans Bébé est 1 ;
le nombre d’occurrences du caractère B dans Bébé est 1 ;
le nombre d’occurrences du caractère dans Hello world ! est 2.
On souhaite stocker ces nombres d’occurrences dans un dictionnaire dont les clefs sont
les caractères de la chaîne et les valeurs le nombre d’occurrences de ces caractères.
Par exemple : avec la phrase Hello world ! le dictionnaire est le suivant :
Écrire une fonction nbr_occurrences prenant comme paramètre une chaîne de
caractères chaine et renvoyant le dictionnaire des nombres d’occurrences des
caractères de cette chaîne.
def nbr_occurrences(chaine):
# à compléter
texte = "Apprendre la programmation est utile!"
print(nbr_occurrences(texte))
print(f"Il y a {nbr_occurrences(texte)[' ']} espace(s) dans le texte précédent !")
Tests :
# Tests
Affichage :
Console:
>>>
16. Exercice :
Écrire une fonction regrouper_mots_par_longueur qui prend en entrée une liste de mots
et retourne un dictionnaire où :
les clés sont les longueurs des mots,
les valeurs sont des listes contenant tous les mots de cette longueur.
Par exemple, si on appelle la fonction sur la liste suivante :
Écrire une fonction regrouper_etudiants_par_note qui prend en entrée une liste de dictionnaires représentant des étudiants (chaque dictionnaire contient un "nom" et une "note"), et retourne un dictionnaire qui associe chaque note à une liste des étudiants ayant obtenu cette note.
Par exemple, si on appelle la fonction sur la liste suivante :