Aller au contenu

Moyenne de notes avec coefficients⚓︎

Les résultats aux évaluations d'un élève sont regroupés dans une liste non vide composée de couples (note, coefficient). Dans ce couple :

  • note est un nombre de type flottant (float) compris entre 0.0 et 20.0
  • coefficient est un nombre de type entier (int) strictement positif

Écrire une fonction moyenne qui renvoie la moyenne pondérée de cette liste donnée en paramètre.

Exemple

Le calcul suivant illustre l'exemple :

\[\frac{2×15,\!0 + 1×9,\!0 + 3×12,\!0}{2+1+3} = 12,\!5\]
🐍 Console Python
>>> moyenne([(15.0, 2), (9.0, 1), (12.0, 3)])
12.5
###
# testsbksl-nlbksl-nlbksl-nldef sontpy-undproches(x, y):bksl-nl return abs(x - y) < 10py-strpy-str-6bksl-nlbksl-nlbksl-nlassert sontpy-undproches(moyenne([(15.0, 2)]), 15.0)bksl-nlassert sontpy-undproches(moyenne([(15.0, 2), (9.0, 1), (12.0, 3)]), 12.5)bksl-nlbksl-nl# autres testsbksl-nlbksl-nlassert sontpy-undproches(bksl-nl moyenne([(15.0, 2), (9.0, 1), (12.0, 3)]), 12.5bksl-nl), "Erreur sur ce test"bksl-nlassert sontpy-undproches(moyenne([(0.0, 1)]), 0.0), "Erreur sur ce test"bksl-nlassert sontpy-undproches(moyenne([(20.0, 1)]), 20.0), "Erreur sur ce test"bksl-nlassert sontpy-undproches(moyenne([(10.0, 5)]), 10.0), "Erreur sur ce test"bksl-nlbksl-nl 5/5

def moyenne(notespy-undponderees):bksl-nl ...bksl-nlbksl-nlbksl-nl# testsbksl-nlbksl-nlbksl-nldef sontpy-undproches(x, y):bksl-nl "Renvoie un booléen : les nombres x et y sont-ils proches ?"bksl-nl return abs(x - y) < 10py-strpy-str-6bksl-nlbksl-nlbksl-nlassert sontpy-undproches(moyenne([(15.0, 2)]), 15.0)bksl-nlassert sontpy-undproches(moyenne([(15.0, 2), (9.0, 1), (12.0, 3)]), 12.5)bksl-nlbksl-nldef moyenne(notespy-undponderees):bksl-nl cumulpy-undpoints = 0.0bksl-nl cumulpy-undcoeffs = 0bksl-nl for (note, coeff) in notespy-undponderees:bksl-nl cumulpy-undpoints += coeff py-str notebksl-nl cumulpy-undcoeffs += coeffbksl-nl return cumulpy-undpoints / cumulpy-undcoeffsbksl-nlbksl-nl

A

Itération sans indice⚓︎

Version recommandée

parcourir un tuple

La construction

🐍 Script Python
for (note, coeff) in notes_ponderees:
    ...

est équivalente à

🐍 Script Python
for element in notes_ponderees:
    note  = element[0]
    coeff = element[1]
    ...

On préfèrera la première version.

Itération avec indice⚓︎

Peu d'intérêt

🐍 Script Python
def moyenne(notes_ponderees):
    cumul_points = 0.0
    cumul_coeffs = 0
    for i in range(len(notes_ponderees)):
        note, coeff = notes_ponderees[i]
        cumul_points += coeff * note
        cumul_coeff += coeff
    return cumul_points / cumul_coeff

unpack d'un tuple

La construction

🐍 Script Python
note, coeff = notes_ponderees[i]

est équivalente à

🐍 Script Python
note  = notes_ponderees[i][0]
coeff = notes_ponderees[i][1]

On préfèrera la première version.

Version fonctionnelle⚓︎

Non recommandée ; deux parcours de la liste

🐍 Script Python
def moyenne(notes_ponderees):
    cumul_points = sum(note * coeff for (note, coeff) in notes_ponderees)
    cumul_coeffs = sum(coeff for (note, coeff) in notes_ponderees)
    return cumul_points / cumul_coeff

Z