Estudiants

Es vol gestionar els llistats de clase d’un curs de l’escola i per això es fa servir un diccionari on la clau és una tupla de tres elements formada pel nom i els dos cognoms de l’estudiant, tots strings, i el valor associat és la llista d’assignatures en què hi està matriculat.

Per exemple el diccionari

dic = {('Joan', 'Rubio', 'Boix'): ['Informàtica', 'Física', 'Càlcul'],
       ('Anna', 'Pons', 'Adell'): ['Càlcul', 'Informàtica']}

conté l’estudiant Joan Rubio Boix matriculat en Informàtica, Física i Càlcul i l’estudiant Anna Pons Adell matriculada en Informàtica i Càlcul.

  1. Dissenya la funció afegir_estudiant que donat un diccionari d’estudiants, tres strings que representen el nom, primer cognom i segon cognom d’un estudiant respectivament, i una llista amb assignatures matriculades, modifica el diccionari afegint les dades d’aquest estudiant.

    Desa la funció al fitxer estudiants.py. La funció ha de passar el següent doctest:

    >>> dic = {('Joan', 'Rubio', 'Boix'): ['Informàtica', 'Física', 'Càlcul']}
    >>> afegir_estudiant(dic, 'Anna', 'Pons', 'Adell', ['Informàtica', 'Càlcul'])
    >>> dic == {('Joan', 'Rubio', 'Boix'): ['Informàtica', 'Física', 'Càlcul'],
    ... ('Anna', 'Pons', 'Adell'): ['Informàtica', 'Càlcul']}
    True
    

    Nota

    Podeu descarregar el fitxer amb tests estudiants1.txt.

  2. Dissenya la funció assignatures_estudiant que donat un diccionari d’estudiants i tres strings que representen el nom, primer cognom i segon cognom d’un estudiant respectivament, retorna la llista de les assignatures de l’estudiant. Si l’estudiant no es troba al diccionari retorna la llista buida.

    Desa la funció al mateix fitxer estudiants.py de l’apartat anterior. La funció ha de passar el següent doctest:

    >>> dic = {('Pol','Amer','Coll'):['FI','CA','QM'],
    ... ('Aina','Soler','Gil'):['FI','CA','QM','ME']}
    >>> ['FI', 'CA', 'QM'] == assignatures_estudiant(dic, 'Pol', 'Amer', 'Coll')
    True
    

    Nota

    Podeu descarregar el fitxer amb tests estudiants2.txt.

  3. Dissenya la funció llistat que donat un diccionari d’estudiants i una assignatura (string), retorna la llista de tots els estudiants matriculats en aquesta assignatura. Cada estudiant ha d’estar representat com a un string amb el primer cognom, un espai, el segon cognom, una coma i un espai, i el nom. La llista ha d’estar ordenada pel primer cognom. Si cap estudiant està matriculat a l’assignatura donada, la funció retornarà la llista buida.

    Desa la funció al mateix fitxer estudiants.py dels apartats anteriors. La funció ha de passar el següent doctest:

    >>> dic = {('Pol','Amer','Coll'):['FI','CA','QM'],
    ... ('Aina','Soler','Gil'):['FI','CA','QM','ME'],
    ... ('Joan','Rubio','Boix'):['CA','QM','ME', 'AL'],
    ... ('Mar','Pou','Coll'):['CA','GE']}
    >>> llistat(dic, 'FI')
    ['Amer Coll, Pol', 'Soler Gil, Aina']
    >>> llistat(dic, 'PR')
    []
    

    Nota

    Podeu descarregar el fitxer amb tests estudiants3.txt.

  4. Dissenya la funció estudiants_per_assig que donat un diccionari d’estudiants, retorna un altre diccionari a on cada clau és el nom d’una assignatura, i cada valor el nombre d’estudiants matriculats en aquesta assignatura.

    Per a fer això, en primer lloc implementeu una funció afegir_assignatures que donat un diccionari com el que es vol construir en aquest apartat i una llista d’assignatures, modifica el diccionari afegint les assignatures de la llista.

    Desa la funció al mateix fitxer estudiants.py dels apartats anteriors. La funció ha de passar el següent doctest:

    >>> dic = {'FI':2,'CA':4,'QM':3,'ME':2,'AL':1,'GE':1}
    >>> l=['ME', 'FI', 'CA']
    
    >>> afegir_assignatures(dic, l)
    >>> if dic != {'FI':3,'CA':5,'QM':3,'ME':3,'AL':1,'GE':1}:
    ... 	print (dic)
    

    Nota

    Podeu descarregar el fitxer amb tests estudiants4.txt.

    Ara cridant aquesta funció, pots implementar estudiants_per_assig.

    Desa la funció al mateix fitxer estudiants.py dels apartats anteriors. La funció ha de passar el següent doctest:

    >>> dic = {('Pol','Amer','Coll'):['FI','CA','QM'],
    ... ('Aina','Soler','Gil'):['FI','CA','QM','ME'],
    ... ('Joan','Rubio','Boix'):['CA','QM','ME', 'AL'],
    ... ('Mar','Pou','Coll'):['CA','GE']}
    >>> {'FI':2,'CA':4,'QM':3,'ME':2,'AL':1,'GE':1} == estudiants_per_assig(dic)
    True
    

    Nota

    Podeu descarregar el fitxer amb tests estudiants5.txt.

Solució

Disposeu de solucions al fitxer estudiants.py