Adloun

informatique (tronc commun des prépas scientifiques) · Chapitre 4 · Exercice de TD

Moyennes par catégorie

Modules, fichiers et données · niveau 2

É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}")

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre