3. Construccions amb retard (3 punts)¶
Disposem d’un fitxer de text amb dades de les construccions d’una
certa empresa durant un cert període. Les construccions poden estar
acabades, en curs o pendents d’iniciar-se. Aquesta informació es
guarda en un fitxer. Cada línia del fitxer conté les següents dades
d’una construcció: un identificador de l’obra (un string), estat (en
format string que pot prendre els valors: 'ACABADA', 'EN CURS'
o 'NO INICIADA'), el pressupost (un enter corresponent al valor en
euros), la durada prevista (un enter en mesos) i el mes de la data
prevista de finalització (MM/AA). Aquestes dades estan separades
pel caràcter ';' tal com mostra l’exemple:
xy_98967;NO INICIADA;23000;12;04/24
WT_87563;EN CURS;12500;3;08/23
ATRP_785;NO INICIADA;245000;23;08/24
xyT_12967;ACABADA;20000;6;04/23
WTMN_563;EN CURS;12500;3;02/24
LLRTP_85;NO INICIADA;245000;23;08/24
BAxy_98967;NO INICIADA;600000;20;12/24
WEST_87563;EN CURS;12500;3;08/23
RAZTP_785;NO INICIADA;245000;23;08/24
ALMxy_98967;NO INICIADA;23000;10;12/23
CAWT_87563;ACABADA;5500;5;12/23
TDRTP_785;NO INICIADA;245000;33;08/26
Pots baixar-te aquest fitxer per fer proves construcSA.txt.
Dissenya la següent funció i desa-la al mòdul construccio
(fitxer construccio.py):
- contruccio.retards(nom_fitxer, data_actual)¶
Donats un string nom_fitxer amb el nom d’un fitxer amb les construccions d’una certa empresa i donat un string, data_actual, que representa una data formada només pel mes i l’any (
MM/AA), retorna una llista amb dades de les obres no iniciades tals que el nombre de mesos que queden fins a la data de finalització prevista és menor o igual que la durada prevista.Les dades de la llista resultant seran tuples de tres elements: identificador de l’obra, mesos que falten per la data prevista de finalització i mesos previstos de durada de l’obra.
L’ordre de la llista resultant serà el mateix que hi ha en el fitxer.
Per exemple, si un fitxer anomenat
construcSA.txtconté les línies de l’exemple anterior, el resultat serà que es mostra a continuació:>>> r = retards('construcSA.txt', '05/23') >>> r [('xy_98967', 11, 12), ('ATRP_785', 15, 23), ('LLRTP_85', 15, 23), ('BAxy_98967', 19, 20), ('RAZTP_785', 15, 23), ('ALMxy_98967', 7, 10)] >>> r = retards('construcSA.txt', '10/23') >>> r [('xy_98967', 6, 12), ('ATRP_785', 10, 23), ('LLRTP_85', 10, 23), ('BAxy_98967', 14, 20), ('RAZTP_785', 10, 23), ('ALMxy_98967', 2, 10)] >>> r = retards('construcSA.txt', '01/24') >>> r [('xy_98967', 3, 12), ('ATRP_785', 7, 23), ('LLRTP_85', 7, 23), ('BAxy_98967', 11, 20), ('RAZTP_785', 7, 23), ('ALMxy_98967', -1, 10), ('TDRTP_785', 31, 33)] >>> r = retards('construcSA.txt', '01/23') >>> r [('ATRP_785', 19, 23), ('LLRTP_85', 19, 23), ('RAZTP_785', 19, 23)]
Disposes d’aquests i d’altres jocs de proves al fitxer
test-construccio.txt.Nota
Les dades que hi ha al fitxer no segueix cap mena d’ordre.
Es recomanable fer una funció que calculi els mesos que falten entre dues dates donades del tipus
MM/AA.Suposarem que mai la data d’entrega prevista sigui anterior a la data actual.