Somme et moyenne d'une liste
Exercice supplémentaire · niveau 1 (application) · mathématiques appliquées (ECG 1re année), chapitre 11 — Informatique et algorithmique · Boucles et listes
Énoncé
Écrire somme(L) et moyenne(L) sans utiliser sum. Que doit renvoyer moyenne sur une liste vide ?
Corrigé
Le code.
def somme(L):
s = 0 # element neutre de l'addition
for x in L:
s = s + x
return s
def moyenne(L):
if len(L) == 0:
return None # une liste vide n'a pas de moyenne
return somme(L) / len(L)
print(somme([3, 1, 4, 1, 5])) # 14
print(moyenne([3, 1, 4, 1, 5])) # 2.8
print(moyenne([])) # None
L'initialisation à . L'accumulateur doit partir de l'élément neutre de l'opération : pour une somme, pour un produit. Partir de L[0] obligerait à commencer la boucle au deuxième élément, et provoquerait une erreur sur une liste vide.
Le cas de la liste vide. somme([]) vaut , ce qui est correct : la somme d'aucun nombre est nulle. Mais moyenne([]) conduirait à une division par , et le programme s'arrêterait sur une erreur. Il faut donc traiter le cas à part — ici en renvoyant None, valeur qui signale l'absence de résultat.
Pourquoi c'est important. Une liste vide surgit naturellement d'un tri sélectif : « la moyenne des salaires des employés de plus de ans » sur un fichier qui n'en contient aucun. Le cas ne doit pas faire tomber le programme.
Le coût. La boucle fait un tour par élément : de l'ordre de opérations, ce qui est optimal — il faut bien lire chaque valeur au moins une fois.
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.