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 [1], el fitxer
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 hospital.py.
Dissenyeu la funció
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 [2].- hospital.crea_dict(nomfitxer)¶
A partir del fitxer , crea i retorna un diccionari
{dni: (nom complet, numero habitació, data ingrés)}
Per exemple:
>>> d = hospital.crea_dict('prova.txt') >>> d == { ... '34567890': ('Anna Perejoan Puigmartinez', '123', '10/10/2013'), ... '34676785': ('Roger Moll Verat', '124', '15/11/2013'), ... '67345123': ('Maria Sofie Dentetes Conill', '234', '16/11/2013'), ... '34123456': ('Pernile Gual Permanent', '678', '9/10/2013'), ... '45678678': ('Narcis Vallrobat Fanalet', '212', '30/9/2013'), ... } True
Dissenyeu la funció
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 [2]:- hospital.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:
>>> hospital.num_hab(d, '34567890') 123 >>> hospital.num_hab(d, '666') -1
Dissenyeu la funció
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 [2].- hospital.crea_llista(dicc, data)¶
Crea i retorna una llista (dni, nombre de dies d’ingrés).
Per exemple:
>>> import datetime >>> datadoctest = datetime.date(2014, 2, 10) >>> llista = hospital.crea_llista(d, datadoctest) >>> sorted(llista) [('34123456', 124), ('34567890', 123), ('34676785', 87), ('45678678', 133), ('67345123', 86)]
Per a calcular el nombre de dies, podeu utilitzar funcions del mòdul
datetime. En concret,la classe
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 (datetime.timedelta);d’un interval de temps se’n pot consultar els dies o els segons (atributs
daysiseconds, respectivament).
Dissenyeu la funció
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 [2].- hospital.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:
>>> hospital.habitacions_cronics(d, llista, 100) [123, 212, 678] >>> hospital.habitacions_cronics(d, llista, 200) []
Solució
Disposeu d’una solució al fitxer hospital.py. Us encoratgem a resoldre el problema abans de
mirar la solució. Useu-la per comparar-la amb la vostra.
Notes