Python au lycée (4) : Les fonctions Exercices

Fonction Python : moyenne et écart-type

Durée estimée
10 minutes
Difficulté
Votre progression

Créez un compte gratuit pour suivre votre avancement et reprendre où vous avez laissé.

Créer un compte

Objectifs travaillés

On dispose d'une série de valeurs rangées dans une liste Python, par exemple les notes d'un élève : $ L = [12, 15, 9, 14, 10] $.
On rappelle que la moyenne $ \bar{x} $ d'une série de $ n $ valeurs $ x_1, x_2, \dots, x_n $ est :

$ \bar{x} = \dfrac{x_1 + x_2 + \dots + x_n}{n} $

La variance $ V $ mesure la dispersion autour de la moyenne, et l'écart-type $ \sigma $ est la racine carrée de la variance :

$ V = \dfrac{(x_1 - \bar{x})^2 + (x_2 - \bar{x})^2 + \dots + (x_n - \bar{x})^2}{n} \qquad \sigma = \sqrt{V} $
  1. Calculer « à la main » la moyenne de la série $ L = [12, 15, 9, 14, 10] $.
  2. Écrire une fonction Python moyenne(L) qui prend en argument une liste de valeurs et renvoie leur moyenne.
  3. Calculer « à la main » la variance puis l'écart-type de la série $ L $. On donnera l'écart-type arrondi à $ 0{,}01 $ près.
  4. Écrire une fonction Python ecart_type(L) qui renvoie l'écart-type de la liste $ L $.
  5. Utiliser les deux fonctions pour vérifier les résultats des questions 1. et 3.

Corrigé

  1. La série compte $ n = 5 $ valeurs. On additionne puis on divise par $ 5 $ :
    $ \bar{x} = \dfrac{12 + 15 + 9 + 14 + 10}{5} = \dfrac{60}{5} = \mathbf{12} $.
  2. On parcourt la liste pour cumuler la somme, puis on divise par le nombre d'éléments. La fonction len(L) renvoie le nombre de valeurs de la liste :

    def moyenne(L):
        somme = 0
        for x in L:
            somme = somme + x
        return somme / len(L)
  3. On utilise la moyenne $ \bar{x} = 12 $ trouvée à la question 1. On calcule les carrés des écarts à la moyenne :
    $ V = \dfrac{(12-12)^2 + (15-12)^2 + (9-12)^2 + (14-12)^2 + (10-12)^2}{5} $.
    $ V = \dfrac{0 + 9 + 9 + 4 + 4}{5} = \dfrac{26}{5} = 5{,}2 $.
    L'écart-type est la racine carrée de la variance :
    $ \sigma = \sqrt{5{,}2} \approx \mathbf{2{,}28} $.
  4. On réutilise la fonction moyenne pour obtenir $ \bar{x} $, puis on cumule les carrés des écarts. On importe la fonction sqrt (racine carrée) du module math :

    from math import sqrt
    
    def ecart_type(L):
        m = moyenne(L)
        somme = 0
        for x in L:
            somme = somme + (x - m)**2
        variance = somme / len(L)
        return sqrt(variance)
  5. On exécute les deux fonctions avec la liste de l'énoncé :

    >>> L = [12, 15, 9, 14, 10]
    >>> moyenne(L)
    12.0
    >>> ecart_type(L)
    2.280350850198276

    On retrouve bien une moyenne de $ 12 $ et un écart-type $ \sigma \approx \mathbf{2{,}28} $, ce qui confirme les calculs des questions 1. et 3.

Remarque

La fonction ecart_type appelle la fonction moyenne : on peut réutiliser une fonction déjà écrite à l'intérieur d'une autre, ce qui évite de réécrire le même calcul.