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.