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 fichier qui ment corrigé
- La variance en un seul passage corrigé
- Construire l'histogramme soi-même corrigé
- La méthode de Monte-Carlo corrigé
- Lire un fichier à colonnes variables corrigé