Adloun

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.