def moyenne_ponderee(valeurs, effectifs) :
somme_des_notes = 0
somme_des_effectifs = 0
for i in range(len(valeurs)) :
somme_des_notes = somme_des_notes + valeurs[i] * effectifs[i]
somme_des_effectifs = somme_des_effectifs + effectifs[i]
return somme_des_notes/somme_des_effectifs
>>> notes = [2, 6, 8, 10, 12, 14, 15, 18, 20]
>>> effectifs = [1, 0, 2, 3, 4, 2, 4, 2, 3]
>>> moyenne_ponderee(notes, effectifs)
13.333333333333334
Dans cette solution, nous utilisons la fonction pré-programmée sum()
qui renvoie la somme des valeurs de la liste passée en argument :
def moyenne_ponderee(valeurs, effectifs) :
# création d'une liste qui contiendra
# les produits valeur * effectif :
liste = []
for i in range(len(valeurs)) :
liste.append(valeurs[i] * effectifs[i])
return sum(liste)/sum(effectifs)
>>> notes = [2, 6, 8, 10, 12, 14, 15, 18, 20]
>>> effectifs = [1, 0, 2, 3, 4, 2, 4, 2, 3]
>>> moyenne_ponderee(notes, effectifs)
13.333333333333334
Essentiellement la même solution que la précédente, mais on crée la
liste des produits valeur * effectif différemment :
def moyenne_ponderee(valeurs, effectifs) :
# création d'une liste qui contiendra
# les produits valeur * effectif :
liste = [effectif * valeur for effectif, valeur in zip(effectifs, valeurs)]
return sum(liste)/sum(effectifs)
>>> notes = [2, 6, 8, 10, 12, 14, 15, 18, 20]
>>> effectifs = [1, 0, 2, 3, 4, 2, 4, 2, 3]
>>> moyenne_ponderee(notes, effectifs)
13.333333333333334
Pour bien saisir le fonctionnement de cette solution, vous pouvez chercher
sur le web "python liste en compréhension" puis "python zip".
La notion de liste en compréhension est au programme
des classes de 1ère et de Tale.
On peut aussi éviter la fonction
zip
:
def moyenne_ponderee(valeurs, effectifs) :
lg = len(effectifs)
# création d'une liste qui contiendra
# les produits valeur * effectif :
liste = [effectifs[i] * valeurs[i] for i in range(lg)]
return sum(liste)/sum(effectifs)