Adloun

Une fonction statistique complète

Exercice de TD · niveau 3 (difficile) · sciences numériques et technologie (seconde), chapitre 5 — Les fonctions · Lire une fonction statistique

Énoncé

Écrire une fonction bilan(notes) qui renvoie, en un seul appel, le minimum, le maximum et la moyenne d'une liste de notes, sans utiliser min, max ni sum.

  1. Écrire la fonction et la tester sur [12, 8, 15, 10, 17].
  2. Que se passe-t-il si la liste est vide ? Corriger.
  3. Pourquoi initialiser le minimum à la première valeur plutôt qu'à ou à ?

Corrigé

1.

def bilan(notes):
    mini = notes[0]
    maxi = notes[0]
    total = 0
    for n in notes:
        if n < mini:
            mini = n
        if n > maxi:
            maxi = n
        total = total + n
    return mini, maxi, total / len(notes)

print(bilan([12, 8, 15, 10, 17]))   # (8, 17, 12.4)

Une fonction peut renvoyer plusieurs valeurs à la fois, séparées par des virgules ; on les récupère par a, b, c = bilan(...).

2. Sur une liste vide, notes[0] lève une IndexError, et la division par len(notes) serait de toute façon une division par zéro. Il faut traiter le cas d'abord :

    if len(notes) == 0:
        return None, None, None

3. C'est le point le plus important. Initialiser mini à donnerait toujours comme minimum : aucune note positive ne pourrait passer sous cette valeur. Initialiser maxi à donnerait toujours . Ces valeurs semblent raisonnables parce qu'on pense à des notes sur — mais elles encodent une hypothèse sur les données, et la fonction devient fausse dès qu'on l'applique à des températures ou à des altitudes.

Partir de la première valeur de la liste est le seul choix sûr : elle appartient aux données, donc le résultat aussi.

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.