informatique (tronc commun des prépas scientifiques) · Chapitre 17 · Application directe du cours
Parcours et retournement
Les dictionnaires dévoilés : le hachage · niveau 1 (application)
Énoncé
Soit le dictionnaire notes = {"Ana": 15, "Bob": 12, "Eva": 15, "Lou": 17}. Écrire le code Python pour : (a) calculer la moyenne des notes ; (b) construire le dictionnaire inverse note -> liste des prénoms ; (c) trouver le ou les prénoms ayant la note maximale, le tout en effectuant un unique parcours à chaque fois.
Corrigé
# (a) Calcul de la moyenne en un parcours (via sum et len)
moyenne = sum(notes.values()) / len(notes) # Donne 14.75
# (b) Inversion du dictionnaire (note -> liste de prénoms)
inverse = {}
for nom, note in notes.items():
if note not in inverse:
inverse[note] = []
inverse[note].append(nom)
# Résultat : {15: ["Ana", "Eva"], 12: ["Bob"], 17: ["Lou"]}
# (c) Recherche des clés avec la valeur maximale en un parcours
meilleurs = []
record = None
for nom, note in notes.items():
if record is None or note > record:
meilleurs = [nom]
record = note
elif note == record:
meilleurs.append(nom)
# Résultat : meilleurs = ["Lou"], record = 17
Remarque : Pour la question (b), puisque plusieurs prénoms peuvent partager la même note, associer directement la note à une chaîne simple écraserait les valeurs précédentes (par exemple, "Eva" écraserait "Ana"). Il est indispensable d'associer chaque note à une liste de prénoms (méthode de l'indexation inverse).
Exercices semblables
- Le redimensionnement et son coût amorti corrigé
- L'ensemble, dictionnaire sans valeurs corrigé
- Étude — l'index des mots, de bout en bout corrigé
- Une table à la main corrigé
- Hachable ou pas ? corrigé