Notes

La llista de notes d’un lliurament està formada per subllistes de dos elements: el dni de l’alumne (un string) i la seva nota (un real). Dissenya les següents funcions i desa-les al fitxer notes.py:

  1. busca_dni, donats una llista de notes i un dni, retorna True si el dni donat és a la llista i False en cas contrari.

    La funció ha de passar els tests següents, com a mínim:

    >>> l = [['44444444D',8.3],['11111111A',7.25],['88888888H',4.1],['22222222B',3.8]]
    >>> busca_dni(l,'88888888H')
    True
    >>> busca_dni(l,'33333333C')
    False
    >>> busca_dni([],'11111111A')
    False
    

    Nota

    Pots descarregar el fitxer amb tests test-notes-1.txt.

  2. busca_nota donats una llista de notes i una nota, retorna True si un o més alumnes de la llista han obtingut la nota donada i False en cas contrari

    La funció ha de passar els tests següents, com a mínim:

    >>> l = [['44444444D',8.3],['11111111A',7.25],['88888888H',4.1],['22222222B',3.8]]
    >>> busca_nota(l,7.25)
    True
    >>> busca_nota(l,5.0)
    False
    >>> busca_nota([],6.5)
    False
    

    Nota

    Pots descarregar el fitxer amb tests test-notes-2.txt.

  3. perc_aprovats: donada una llista de notes, retorna el tant per u d’alumnes aprovats de la llista. Podeu suposar que la llista no és buida.

    La funció ha de passar els tests següents, com a mínim:

    >>> l = [['44444444D',8.3],['11111111A',7.25],['88888888H',4.1],['22222222B',3.8],['66666666F',5.3]]
    >>> round(perc_aprovats(l), 2)
    0.6
    >>> l = [['3A', 5]]
    >>> round(perc_aprovats(l), 2)
    1.0
    >>> l = [['1A', 2], ['2B', 1], ['3C', 4]]
    >>> round(perc_aprovats(l), 2)
    0.0
    

    Nota

    Pots descarregar el fitxer amb tests test-notes-3.txt.

  4. millor_pitjor_nota: donada una llista de notes, retorna la millor i la pitjor nota obtinguda. Podeu suposar que la llista no és buida.

    La funció ha de passar els tests següents, com a mínim:

    >>> l = [['44444444D',8.3],['11111111A',7.25],['88888888H',4.1],['22222222B',3.8],['66666666F',5.3]] 
    >>> m, p = millor_pitjor_nota(l)
    >>> round(m, 2)
    8.3
    >>> round(p, 2)
    3.8
    >>> l = [['3A', 5]]
    >>> m, p = millor_pitjor_nota(l)
    >>> round(m, 2)
    5
    >>> round(p, 2)
    5
    

    Nota

    Pots descarregar el fitxer amb tests test-notes-4.txt.

  5. distribucio_notes: donada una llista de notes, retorna una altra llista de 11 elements que representa la distribució de les notes entre 0 i 10: el primer element de la llista és el nombre d’alumnes amb nota compresa entre 0 (inclòs) i 1 (exclòs), el segon element de la llista és el nombre d’alumnes amb nota compresa entre 1 (inclòs) i 2 (exclòs), i així successivament fins a l’onzè element que representa el nombre d’alumnes que han tret un 10. Podeu suposar que la llista no és buida.

    La funció ha de passar els tests següents, com a mínim:

    >>> l = [['44444444D',8.3],['88888888H',4.1],['22222222B',4.8],['66666666F',5.3],['99999999J',10.0]]
    >>> dn = distribucio_notes(l)
    >>> print(dn)
    [0, 0, 0, 0, 2, 1, 0, 0, 1, 0, 1]
    >>> l = [['3A', 5]]
    >>> dn = distribucio_notes(l)
    >>> print(dn)
    [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
    >>> l = [['1A', 2], ['2B', 1], ['3C', 4]]
    >>> dn = distribucio_notes(l)
    >>> print(dn)
    [0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0]
    

    Nota

    Pots descarregar el fitxer amb tests test-notes-5.txt.

  6. dnis_10: donada una llista de notes, retorna la llista dels dnis dels alumnes que tenen un 10, ordenada per DNIs creixents.

    La funció ha de passar els tests següents, com a mínim:

    >>> l = [['44444444D',8.3],['88888888H',10.0],['33333333C',10.0],['22222222B',4.8],['66666666F',5.3],['99999999J',10.0]]
    >>> ld = dnis_10(l)
    >>> print(ld)
    ['33333333C', '88888888H', '99999999J']
    >>> l = [['3A', 10]]
    >>> ld = dnis_10(l)
    >>> print(ld)
    ['3A']
    >>> l = [['3A', 5]]
    >>> ld = dnis_10(l)
    >>> print(ld)
    []
    

    Nota

    Pots descarregar el fitxer amb tests test-notes-6.txt.

  7. ordena_dnis: donada una llista de notes, retorna una nova llista, ordenada per DNIs creixents.

    La funció ha de passar els tests següents, com a mínim:

    >>> l = [['44444444D',8.3],['88888888H',10.0],['33333333C',10.0],['22222222B',4.8],['66666666F',5.3],['99999999J',10.0]]
    >>> ld = ordena_dnis(l)
    >>> for e in ld:
    ...     print(e[0], e[1])
    ... 
    22222222B 4.8
    33333333C 10.0
    44444444D 8.3
    66666666F 5.3
    

    Nota

    Pots descarregar el fitxer amb tests test-notes-7.txt.

  8. ordena_notes: donada una llista de notes, retorna una nova llista ordenada per notes.

    La funció ha de passar els tests següents, com a mínim:

    >>> l = [['44444444D',8.3],['88888888H',10.0],['22222222B',4.8],['66666666F',5.3]]
    >>> ld = ordena_notes(l)
    >>> for e in ld:
    ...     print(e[0], e[1])
    ... 
    22222222B 4.8
    66666666F 5.3
    44444444D 8.3
    88888888H 10.0
    

    Nota

    Pots descarregar el fitxer amb tests test-notes-8.txt.

Solució

El fitxer notes.py conté una solució.