.. py:module:: hospital Hospital ======== Un fitxer conté la relació de pacients ingressats en un hospital. A cada línia del fitxer hi ha el nom i dos cognoms de la persona ingressada, el seu DNI, el número de l'habitació on s'està i la data d'ingrés en format ``dd/mm/aaaa``. Dins cada línia, les dades estan separades per punt-i-coma (``';'``). Per exemple [#n1]_, el fitxer :file:`prova.txt` és el següent:: Anna Perejoan Puigmartinez;34567890;123;10/10/2013 Roger Moll Verat;34676785;124;15/11/2013 Maria Sofie Dentetes Conill;67345123;234;16/11/2013 Pernile Gual Permanent;34123456;678;9/10/2013 Narcis Vallrobat Fanalet;45678678;212;30/9/2013 Deseu les funcions següents al fitxer :file:`hospital.py`. #. Dissenyeu la funció :py:func:`crea_dict` que crea un diccionari de pacients a partir de les dades del fitxer. La clau del diccionari és el DNI del pacient i el valor és una tupla formada pel nom complet del pacient, el número d'habitació i la data d'ingrés. Tots els elements de la tupla han de ser strings [#n2]_. .. py:function:: crea_dict(nomfitxer) A partir del fitxer , crea i retorna un diccionari {dni: (nom complet, numero habitació, data ingrés)} Per exemple: .. literalinclude:: hospital.txt :language: python :lines: 22-30 #. Dissenyeu la funció :py:func:`num_hab` que, a partir d'un diccionari de pacients com el descrit a la pregunta anterior i el dni d'un pacient, retorni el número de la seva habitació (un enter) o -1 si el dni no consta al diccionari [#n2]_: .. py:function:: num_hab(dicc, dni) Retorna el número d'habitació del pacient de dni donat o -1 si no és un dni de pacient de l'hospital. Per exemple: .. literalinclude:: hospital.txt :language: python :lines: 45-49 #. Dissenyeu la funció :py:func:`crea_llista` que, a partir d'un diccionari de pacients com el descrit a la primera pregunta i d'una data, retorna una llista de tuples on cada tupla correspon un pacient i està formada pel dni i el nombre de dies que el pacient duu ingressat fins la data donada. La llista ha d'estar ordenada pel dni [#n2]_. .. py:function:: crea_llista(dicc, data) Crea i retorna una llista (dni, nombre de dies d'ingrés). Per exemple: .. literalinclude:: hospital.txt :language: python :lines: 56-62 Per a calcular el nombre de dies, podeu utilitzar funcions del mòdul :py:mod:`datetime`. En concret, - la classe :py:class:`datetime.date`, que permet crear una data a partir de tres enters (any, mes, dia), així com restar dues dates, obtenint un interval de temps (:py:class:`datetime.timedelta`); - d'un interval de temps se'n pot consultar els dies o els segons (atributs :py:attr:`~datetime.timedelta.days` i :py:attr:`~datetime.timedelta.seconds`, respectivament). #. Dissenyeu la funció :py:func:`habitacions_cronics` que, a partir d'un diccionari de pacients com el descrit a la primera pregunta, una llista com la descrita a la pregunta anterior, i un valor llindar, retorni la llista de les habitacions on hi ha un o més pacients que estan ingressats a l'hospital des de fa més de *llindar* dies. La llista retornada ha de ser una llista d'enters, ordenada de forma creixent i que no contingui repetits [#n2]_. .. py:function:: habitacions_cronics(d, llista, llindar) Retorna la llista d'habitacions en les que hi ha pacients que porten ingressats més de llindar dies. Per exemple: .. literalinclude:: hospital.txt :language: python :lines: 67-72 .. rubric:: Solució Disposeu d'una solució al fitxer :download:`hospital.py `. Us encoratgem a resoldre el problema abans de mirar la solució. Useu-la per comparar-la amb la vostra. .. rubric:: Notes .. [#n1] Les dades de l'hospital són completament fictícies. .. [#n2] Disposeu de jocs de prova al fitxer :download:`hospital.txt`.