Aller au contenu

Moyenne olympique⚓︎

Le championnat d'Europe de la bourrée auvergnate va avoir lieu à Nantes cette année. Chaque athlète reçoit une note du panel de \(n\) juges (il y en a au moins 3). bourée
Domaine public

La note finale est calculée selon la moyenne olympique, c'est-à-dire en enlevant les deux notes extrêmes et en calculant la moyenne des \(n - 2\) notes qui restent.

Vous devez aider les organisateurs à donner la note finale en créant une fonction moyenne_bourree(notes)notes est un tableau contenant les notes des juges (les notes sont des nombres entiers ou à virgule flottante entre 0 et 10).

CONTRAINTE : on n'utilisera pas les fonctions Python max, min, ou sum.

Exemples

🐍 Console Python
>>> notes1 = [2, -1, 2, 10, 2]
>>>  moy_bourree(notes1)
2.0
>>> notes2 = [1, 1, 1, 1, 1, 1]
>>> moy_bourree(notes2)
1.0
>>> notes3 = [1, 2]
>>> moy_bourree(notes3)
AssertionError: Pas assez de juges
notes1 = [1.0, 2.0, 4.0, 5.0]bksl-nlnotes2 = [1.0, 1.0, 1.0, 1.0, 1.0]bksl-nlbksl-nlbksl-nlassert round(moyennepy-undbourree(notes1),1) == 3.0bksl-nlassert round(moyennepy-undbourree(notes2),1) == 1.0bksl-nlbksl-nlnotes1 = [2, -1, 2, 10, 2]bksl-nlnotes2 = [1, 1, 1, 1, 1, 1]bksl-nlassert round(moyennepy-undbourree(notes1),1) == 2.0bksl-nlassert round(moyennepy-undbourree(notes2),1) == 1.0bksl-nlbksl-nltry :bksl-nl notes3 = [1]bksl-nl moyennepy-undbourree(notes3)bksl-nlexcept ZeroDivisionError:bksl-nl assert False, "Un nombre insuffisant de juges doit générer une erreur !"bksl-nlexcept AssertionError:bksl-nl passbksl-nlelse:bksl-nl assert False, "Un nombre insuffisant de juges doit générer une erreur !"bksl-nl bksl-nl bksl-nltry :bksl-nl notes3 = [1,3]bksl-nl moyennepy-undbourree(notes3)bksl-nlexcept ZeroDivisionError:bksl-nl assert False, "Un nombre insuffisant de juges doit générer une erreur !"bksl-nlexcept AssertionError:bksl-nl passbksl-nlelse:bksl-nl assert False, "Un nombre insuffisant de juges doit générer une erreur !"bksl-nl bksl-nlbksl-nl ∞/∞

def moyennepy-undbourree(notes):bksl-nl ...bksl-nlbksl-nlbksl-nlnotes1 = [1.0, 2.0, 4.0, 5.0]bksl-nlnotes2 = [1.0, 1.0, 1.0, 1.0, 1.0]bksl-nlbksl-nlbksl-nlassert round(moyennepy-undbourree(notes1),1) == 3.0bksl-nlassert round(moyennepy-undbourree(notes2),1) == 1.0bksl-nlbksl-nldef moyennepy-undbourree(notes):bksl-nl nbpy-undjuges = len(notes)bksl-nl assert nbpy-undjuges > 2, "Pas assez de juges"bksl-nl mini = 10bksl-nl maxi = 0bksl-nl total = 0bksl-nl for note in notes:bksl-nl total += notebksl-nl if note < mini:bksl-nl mini = notebksl-nl if note > maxi:bksl-nl maxi = notebksl-nl return (total - mini - maxi) / (nbpy-undjuges - 2)bksl-nlbksl-nlbksl-nl

A

{{ IDE('exo_corr') }}

Pour résoudre cet exercice, il fallait rechercher les valeurs minimum et maximum, puis calculer la moyenne.

Il est possible d'utiliser trois boucle, mais la solution proposée avec une seule boucle permet de minimiser le nombres d'instructions.

En revanche, dans les deux cas, la complexité de l'algorithme reste linaire.

Z

Retour en haut de la page