Parcours et retournement
Exercice · informatique (tronc commun des prépas scientifiques), chapitre 17 — Les dictionnaires dévoilés : le hachage
É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).
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.