Notes d'une classe

Un professeur de NSI décide de gérer les résultats de sa classe sous la forme d’un dictionnaire :

  • les clefs sont les noms des élèves ;
  • les valeurs sont des dictionnaires dont les clefs sont les types d’épreuves sous forme de chaîne de caractères et les valeurs sont les notes obtenues associées à leurs coefficients dans une liste. Une telle liste ne peut pas être vide, et est obligatoirement de taille 2.

On garantit que chaque élève de la classe a au moins une note.

Par exemple, avec :

🐍 Script Python
resultats = {'Dupont': {
                        'DS1': [15.5, 4],
                        'DM1': [14.5, 1],
                        'DS2': [13, 4],
                        'PROJET1': [16, 3],
                        'DS3': [14, 4]
                    },
            'Durand': {
                        'DS1': [6 , 4],
                        'DM1': [14.5, 1],
                        'DS2': [8, 4],
                        'PROJET1': [9, 3],
                        'IE1': [7, 2],
                        'DS3': [9, 4],
                        'DS4':[15, 4]
                    }
            }

L’élève dont le nom est Durand a ainsi obtenu au DS2 la note de 8 avec un coefficient 4.

Le professeur crée une fonction moyenne qui prend en paramètre le nom d’un de ses élèves et renvoie sa moyenne arrondie au dixième.

Compléter le code du professeur ci-dessous

###
# Testsbksl-nlresultatspy-und2 = {'Dupont': {bksl-nl 'DS1': [15.5, 4],bksl-nl 'DM1': [14.5, 1],bksl-nl 'DS2': [13, 4],bksl-nl 'PROJET1': [16, 3],bksl-nl 'DS3': [14, 4]bksl-nl },bksl-nl 'Durand': {bksl-nl 'DS1': [6 , 4],bksl-nl 'DM1': [14.5, 1],bksl-nl 'DS2': [0, 0],bksl-nl 'PROJET1': [0, 3],bksl-nl 'IE1': [7, 2],bksl-nl 'DS3': [9, 4],bksl-nl 'DS4':[15, 4]bksl-nl }bksl-nl }bksl-nlassert 10py-strmoyenne("Dupont", resultats) == 145bksl-nlassert 10py-strmoyenne("Durand", resultats) == 94bksl-nlassert 10py-strmoyenne("Martin", resultats) == -10bksl-nlbksl-nl# Autres testsbksl-nlassert 10py-strmoyenne("Durand", resultatspy-und2) == 82bksl-nlbksl-nlbksl-nlbksl-nl 5/5
def moyenne(nom, dicopy-undresult):bksl-nl if nom in ...:bksl-nl notes = dicopy-undresult[nom]bksl-nl totalpy-undpoints = ...bksl-nl totalpy-undcoefficients = ...bksl-nl for ... in notes.values():bksl-nl note, coefficient = valeursbksl-nl totalpy-undpoints = totalpy-undpoints + ... py-str coefficientbksl-nl totalpy-undcoefficients = ... + coefficientbksl-nl return round( ... / totalpy-undcoefficients, 1 )bksl-nl else:bksl-nl return -1bksl-nlbksl-nlbksl-nlresultats = {'Dupont': {bksl-nl 'DS1': [15.5, 4],bksl-nl 'DM1': [14.5, 1],bksl-nl 'DS2': [13, 4],bksl-nl 'PROJET1': [16, 3],bksl-nl 'DS3': [14, 4]bksl-nl },bksl-nl 'Durand': {bksl-nl 'DS1': [6 , 4],bksl-nl 'DM1': [14.5, 1],bksl-nl 'DS2': [8, 4],bksl-nl 'PROJET1': [9, 3],bksl-nl 'IE1': [7, 2],bksl-nl 'DS3': [9, 4],bksl-nl 'DS4':[15, 4]bksl-nl }bksl-nl }bksl-nlbksl-nlassert 10py-strmoyenne("Dupont", resultats) == 145bksl-nlassert 10py-strmoyenne("Durand", resultats) == 94bksl-nlbksl-nlbksl-nlbksl-nldef moyenne(nom, dicopy-undresult):bksl-nl if nom in dicopy-undresult:bksl-nl notes = dicopy-undresult[nom]bksl-nl totalpy-undpoints = 0bksl-nl totalpy-undcoefficients = 0bksl-nl for valeurs in notes.values():bksl-nl note, coefficient = valeursbksl-nl totalpy-undpoints = totalpy-undpoints + note py-str coefficientbksl-nl totalpy-undcoefficients = totalpy-undcoefficients + coefficientbksl-nl return round(totalpy-undpoints / totalpy-undcoefficients, 1)bksl-nl else:bksl-nl return -1bksl-nlbksl-nlbksl-nlbksl-nl


Cet exercice utilise ce que l'on appelle en anglais de l'"unpacking" que l'on pourrait traduire en français par "déballage"

👉 Nous l'avons souvent utilisé avec des tuples.

Exemple

🐍 Script Python
a, b, c = (1, 2, 3)  # Avec un tuple
print(a)
print(b)
print(c)

👉 Cette possibilité existe aussi avec des listes

Exemple

🐍 Script Python
a, b, c = [1, 2, 3]  # Avec une liste
print(a)
print(b)
print(c)