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 .. code:: python 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. #. 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: .. literalinclude:: estudiants1.txt :language: python :lines: 3- .. Note:: Podeu descarregar el fitxer amb tests :download:`estudiants1.txt`. #. 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: .. literalinclude:: estudiants2.txt :language: python :lines: 3- .. Note:: Podeu descarregar el fitxer amb tests :download:`estudiants2.txt`. #. 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: .. literalinclude:: estudiants3.txt :language: python :lines: 3- .. Note:: Podeu descarregar el fitxer amb tests :download:`estudiants3.txt`. #. 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: .. literalinclude:: estudiants4.txt :language: python :lines: 3- .. Note:: Podeu descarregar el fitxer amb tests :download:`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: .. literalinclude:: estudiants5.txt :language: python :lines: 3- .. Note:: Podeu descarregar el fitxer amb tests :download:`estudiants5.txt`. .. rubric:: Solució Disposeu de solucions al fitxer :download:`estudiants.py`