2. Rangs de notes (3 Punts)¶
Disposem d’un diccionari on hem anat guardant les notes dels diferents actes avaluació d’una assignatura. En aquest diccionari les claus són strings que representen els noms de l’estudiantat. El valor és una llista de reals amb les notes de cada un d’aquests. No tots els estudiants tenen el mateix nombre de notes. Pots veure un exemple d’aquest diccionari:
... 'Ramon': [8.9, 9.9, 10.0, 5.0, 6.9], 'Rosa':[10.0, 10.0],
... 'Mireia': [8.9, 7.9, 6.8], 'Aleix':[5.6, 6.5, 8.1, 4.0, 3.0],
... 'Tresa': [3.8, 2.9], 'Enric':[7.8, 6.9, 9.0]}
>>> d_3=notes_per_rang(dic_3)
Un cop s’ha acabat el curs volem treure informació sobre com han anat
les notes globalment. Per això ens demanen que implementis al mòdul
notes (fitxer notes.py) la funció
notes_per_rang() tal que donat un diccionari com el descrit en
retorni un altre amb les següents característiques:
El diccionari tindrà com a claus els següents strings: “suspens”, “aprovat”, “notable”, “excel·lent”, “MH”. Cada un correspon a una nota qualitativa que compren un rang de notes numèriques (“suspens”, notes inferiors a 5.0; “aprovat”, notes més grans o iguals que 5.0 i menors que 7.0; “notable”, notes més grans o iguals que 7.0 i menors que 9.0;”excel·lent”, notes més grans o iguals que 9.0 i menors que 10.0;”MH”, nota igual a 10.0.
El valor associat a cada clau serà una llista que contindrà una tupla per a cada estudiant amb una nota mitjana en aquest rang. La tupla contindrà la nota mitjana arrodonida amb dos decimals i el nom de l’estudiant.
La llista de tuples estaran ordenades en ordre decreixent per la nota.
Per exemple, si tenim el diccionari:
>>> dic_1={'Joan':[4.5, 7.5, 2.3, 8.5], 'Mar':[5.8, 9.0, 9.6, 2.4, 9.8]}
En 'Joan' té una nota mitjana de 5.7, per tant, 'aprovat' i la
'Mar' una mitjana de 7.32, per tant, 'notable'. Per tant, el
diccionari que s’ha de construir és:
>>> d_res= {'suspens': [], 'aprovat': [(5.7, 'Joan')],
... 'notable': [(7.32, 'Mar')], 'excel·lent': [], 'MH': []}
S’aconsella fer una funció per saber quina nota qualitativa li correspon a cada nota numèrica.
>>> dic_1={'Joan':[4.5, 7.5, 2.3, 8.5], 'Mar':[5.8, 9.0, 9.6, 2.4, 9.8]}
>>> d_1=notes_per_rang(dic_1)
>>> d_res= {'suspens': [], 'aprovat': [(5.7, 'Joan')],
... 'notable': [(7.32, 'Mar')], 'excel·lent': [], 'MH': []}
>>> if d_1 != d_res:
... print (d_1)
>>> dic_2={'Joan':[4.5, 3.5, 2.3, 6.5], 'Mar':[5.8, 9.0, 9.6, 2.4, 9.8],
... 'Ramon': [8.9, 9.9, 10.0, 5.0, 6.9], 'Rosa':[10.0, 10.0],
... 'Mireia': [8.9, 9.9, 6.8] }
>>> d_2=notes_per_rang(dic_2)
>>> if d_2 !={'suspens': [(4.2, 'Joan')], 'aprovat': [], 'notable': [(8.53, 'Mireia'), (8.14, 'Ramon'), (7.32, 'Mar')], 'excel·lent': [], 'MH': [(10.0, 'Rosa')]}:
... print(d_2)
>>> dic_3={'Joan':[4.5, 3.5, 2.3], 'Mar':[5.8, 9.0, 9.6, 2.4, 9.8],
... 'Ramon': [8.9, 9.9, 10.0, 5.0, 6.9], 'Rosa':[10.0, 10.0],
... 'Mireia': [8.9, 7.9, 6.8], 'Aleix':[5.6, 6.5, 8.1, 4.0, 3.0],
... 'Tresa': [3.8, 2.9], 'Enric':[7.8, 6.9, 9.0]}
>>> d_3=notes_per_rang(dic_3)
>>> if d_3 !={'suspens': [(3.43, 'Joan'), (3.35, 'Tresa')],
... 'aprovat': [(5.44, 'Aleix'),], 'notable': [(8.14, 'Ramon'),
... (7.9, 'Enric'), (7.87, 'Mireia'), (7.32, 'Mar')], 'excel·lent': [],
... 'MH': [(10.0, 'Rosa')]}:
... print(d_3)
Disposes dels jocs de proves al fitxer test-notes.txt