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 entre0.0
et20.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 :
>>> moyenne([(15.0, 2), (9.0, 1), (12.0, 3)])
12.5
def moyenne(notespy-undponderees):bksl-nl ...bksl-nlbksl-nlbksl-nlbksl-nlbksl-nlbksl-nl# testsbksl-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-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-nlbksl-nl# testsbksl-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-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
A
Itération sans indice⚓︎
Version recommandée
parcourir un tuple
La construction
for (note, coeff) in notes_ponderees:
...
est équivalente à
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
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
note, coeff = notes_ponderees[i]
est équivalente à
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
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