Adloun

Moyennes par catégorie

Exercice · informatique (tronc commun des prépas scientifiques), chapitre 4 — Modules, fichiers et données

Énoncé

Un fichier ventes.csv contient des lignes au format produit;montant. Calculer la moyenne des montants par produit en un seul parcours du fichier, et afficher le résultat par moyenne décroissante.

Corrigé

On utilise des dictionnaires pour accumuler les sommes et les effectifs séparément, pour ne pas stocker toutes les listes de montants en mémoire :

def moyennes_par_produit(nom_fichier: str) -> dict:
    sommes = {}
    effectifs = {}
    with open(nom_fichier, "r") as f:
        for ligne in f:
            ligne = ligne.strip()
            if ligne == "":
                continue
            produit, montant_str = ligne.split(";")
            sommes[produit] = sommes.get(produit, 0.0) + float(montant_str)
            effectifs[produit] = effectifs.get(produit, 0) + 1
    
    # Calcul des moyennes par compréhension de dictionnaire
    return {p: sommes[p] / effectifs[p] for p in sommes}

# Tracé / Affichage
moyennes = moyennes_par_produit("ventes.csv")
# Tri des clés selon les valeurs associées
classement = sorted(moyennes, key=lambda p: moyennes[p], reverse=True)
for p in classement:
    print(f"{p} : {moyennes[p]:.2f}")

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.