Reconeixement

L’ETSEIB, com cada any, vol fer un reconeixement als 10 millors estudiants de cada curs. Per aquest motiu ens demanen la nostra ajuda.

Es disposa d’un fitxer amb una línia que conté la següent informació per cada estudiant:

NOM_ESTUDIANT:NOTA1:NOTA2:NOTA3:NOTA4:NOTA5

és a dir, el nom de l’estudiant (string) i cinc notes (valors reals entre 0.0 i 10.0). Tant el nom com cadascuna de les notes estan separats pel caràcter ’:’ (dos punts). Per exemple, el fitxer dades.txt conté el següent:

Cristiano Ronaldo:3.4:3.1:2.3:5.0:1.3
Lionel Messi:3.4:3.1:3.2:5.0:1.3
Diego Costa:5.4:3.1:3.2:5.0:5.3
Alexis Sánchez:5.4:6.1:1.2:5.0:6.3
Karim Benzema:5.4:6.1:7.2:5.0:6.3
Adúriz:5.4:6.1:1.2:8.0:6.3
Carlos Vela:5.4:6.1:3.2:5.0:6.3
Antoine Griezmann:5.4:8.1:7.2:5.0:6.3
Gareth Bale:5.4:6.1:5.2:5.0:6.3
Kevin Gameiro:5.4:6.5:8.2:5.0:6.3
Pedro:5.4:6.1:1.2:5.0:10.0
Javi Guerra:5.4:6.1:1.2:5.0:6.5
Ikechukwu Uche:8.4:6.1:7.2:5.0:6.3
Carlos Bacca:5.4:6.9:9.2:5.0:6.3
Nolito:5.4:6.1:1.2:5.0:6.3

Dissenya i desa les funcions següents al mòdul reconeixement (fitxer reconeixement.py):

  1. La funció decodifica() que a partir d’un string que conté una línia del fitxer amb les dades d’un estudiant, retorni un tuple amb dos valors: la nota mitjana de l’estudiant (real) i el seu nom (string).

    Per exemple:

    >>> mitjana, nom = decodifica('Cristiano Ronaldo:3.4:3.1:2.3:5.0:1.3')
    >>> round(mitjana, 2), nom
    (3.02, 'Cristiano Ronaldo')
    >>> mitjana, nom = decodifica('Lionel Messi:3.4:3.1:3.2:5.0:1.3')
    >>> round(mitjana, 2), nom
    (3.2, 'Lionel Messi')
    

    Disposeu de més jocs de proves al fitxer tests-decodifica.txt.

  2. La funció millors() que, a partir del nom d’un fitxer on hi ha les notes de cadascun dels estudiants d’un curs, retorni una llista amb els nom dels 10 estudiants que tenen la mitjana més alta, ordenats de més a menys nota. Aquesta funció ha de cridar l’anterior.

    Per exemple:

    >>> m = millors('dades.txt')
    >>> m[:4]
    ['Ikechukwu Uche', 'Carlos Bacca', 'Antoine Griezmann', 'Kevin Gameiro']
    >>> m[4:]
    ['Karim Benzema', 'Gareth Bale', 'Pedro', 'Adúriz', 'Carlos Vela', 'Javi Guerra']
    

    Disposeu de més jocs de proves al fitxer tests-millors.txt.

Solució

Disposeu d’una solució al fitxer reconeixement.py