Adloun

NSI (première) · Chapitre 6 · Exercice de TD

Écrire moyenne colonne(table, colonne)

Traiter des données en tables · Sélectionner, projeter, agréger · niveau 2

Énoncé

Écrire moyenne_colonne(table, colonne). Quelles préconditions faut-il — et pourquoi la postcondition ne doit-elle pas s'écrire avec une égalité stricte (chapitre 2) ?

Corrigé

Trois préconditions. La table est non vide (sinon division par zéro) ; la colonne existe dans chaque ligne ; ses valeurs sont des nombres — c'est-à-dire que convertir a déjà été appelé.


def moyenne_colonne(table, colonne):
    """Moyenne arithmétique d'une colonne numérique.

    Préconditions : table non vide ; colonne présente dans chaque ligne ;
                    valeurs numériques (donc converties à l'import).
    Postcondition : min <= résultat <= max, à la tolérance des flottants près.
    """
    assert len(table) > 0, "table vide"
    assert all(colonne in l for l in table), "colonne absente"
    total = 0
    for ligne in table:
        total = total + ligne[colonne]
    return total / len(table)

Contrôle. moyenne_colonne(eleves, "moyenne") rend , et .

Pourquoi pas d'égalité stricte. Une moyenne est une somme de flottants divisée par un entier ; l'addition flottante n'est ni exacte ni associative. Le contre-exemple tient en trois valeurs :


t = [{"m": 0.1}, {"m": 0.2}, {"m": 0.3}]
moyenne_colonne(t, "m")            # 0.20000000000000004
moyenne_colonne(t, "m") == 0.2     # False
abs(moyenne_colonne(t, "m") - 0.2) < 1e-9   # True

Sur triplets de valeurs tirées au hasard à deux décimales, l'addition séquentielle diffère de dans cas, soit % du temps. Une postcondition écrite assert m == attendu échouerait donc une fois sur sept sur du code juste. La bonne écriture est celle du chapitre 2 : assert abs(m - attendu) < 1e-9.

Remarque : sur la table eleves l'égalité stricte passe par chance. C'est bien pourquoi il ne faut pas s'y fier : un test qui passe par hasard est un test qui échouera un jour sans que rien n'ait changé.

100 % gratuit

Essaie le suivant avec le tuteur

Faire l'exercice suivant avec le tuteur

Sans compte : le cours, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →