2. Canvi climàtic (3,5 punts)¶
Disposem d’un fitxer de text amb dades dels nivells de contaminació de
diverses poblacions. Cada línia conté, separats per ';', el nom de
la població, i quatre indicadors dels nivells de contaminació de
\(O_3\), \(NO_2\), \(PM10\) i \(CO_2\), expressats amb
colors 'verd', 'groc', 'vermell' o 'gris'.
Per exemple:
olot;verd;vermell;verd;verd sort;verd;verd;verd;verd figueres;vermell;vermell;vermell;vermell alcarras;verd;verd;verd;verd molins de rei;vermell;verd;groc;gris preixens;vermell;vermell;vermell;vermell
Observa que a olot l’indicador de \(NO_2\) és vermell, o
que a molins de rei el nivell de \(PM10\) és groc.
Pots descarregar-te el fitxer canvi_clima_dades_exemple.txt
amb aquest contingut.
L’objectiu final de l’exercici és fer una funció que, a partir d’un
fitxer com aquest, calculi, i escrigui en un altre fitxer, les
poblacions amb millors indicadors (tots verd) i amb pitjors (tots
vermell), però abans has de programar un altra funció.
Dissenya la funció següent i desa-la al mòdul canvi_climatic
(fitxer canvi_climatic.py).
- tracta_linia(linia)¶
linia és un string que correspon a una línia del fitxer amb el nom de la població i els 4 indicadors. Les línies normalment acaben amb el caràcter salt de línia.
La funció retorna el nom de la població (
str), el número d’indicadorsverd, i el número d’indicadorsvermell(dosint).Per exemple:
>>> tracta_linia('olot;verd;vermell;verd;verd\n') ('olot', 3, 1) >>> tracta_linia('figueres;vermell;vermell;vermell;vermell\n') ('figueres', 0, 4) >>> tracta_linia('molins de rei;vermell;verd;groc;gris\n') ('molins de rei', 1, 1)
Disposes de tests al fitxer
test-tracta_linia.txt.
Finalment, dissenya la funció següent i desa-la també al mòdul
canvi_climatic (fitxer canvi_climatic.py).
- millors_pitjors(nom_fitxer_dades, nom_fitxer_resultats)¶
nom_fitxer_dades és el nom del fitxer que conté les dades dels nivells de contaminació de les poblacions com, per exemple, el de més amunt.
nom_fitxer_resultats és el nom del fitxer on s’han d’escriure els resultats.
La funció escriurà els noms de les poblacions amb millors indicadors (4
verd), i els noms de les que tenen els pitjors (4vermell) en el fitxer de resultats, que sempre contindrà dues línies. La primera comença per'verds: 'i a continuació la llista de noms de les «millors» poblacions. La segona comença per'vermells: ', seguit de la llista de les «pitjors» poblacions. Tant els noms de les millors com de les pitjors poblacions han d’aparèixer ordenats alfabèticament, i estaran separats per comes','. Pista: fes servir el mètodejoin().Aquest seria el contingut del fitxer de resultats si el fitxer de dades fos el de l’exemple de més amunt.
verds: alcarras,sort vermells: figueres,preixens
Per exemple:
>>> lDades1 = [ 'olot;verd;vermell;verd;verd', ... 'sort;verd;verd;verd;verd', ... 'figueres;vermell;vermell;vermell;vermell', ... 'alcarras;verd;verd;verd;verd', ... 'molins de rei;vermell;verd;groc;gris', ... 'preixens;vermell;vermell;vermell;vermell' ] >>> with open('fitxerDades1.txt', 'w') as fDades1: ... for line1 in lDades1: ... r1 = fDades1.write(line1 + '\n') >>> millors_pitjors('fitxerDades1.txt', 'fitxerResultats1.txt') >>> with open('fitxerResultats1.txt', 'r') as fResuls1: ... lines1 = fResuls1.read() >>> print(lines1, end='') verds: alcarras,sort vermells: figueres,preixens >>> lDades2 = [ 'flix;verd;vermell;gris;gris', ... 'falset;verd;verd;groc;verd', ... 'espot;vermell;vermell;vermell;vermell' ] >>> with open('fitxerDades2.txt', 'w') as fDades2: ... for line2 in lDades2: ... r2 = fDades2.write(line2 + '\n') >>> millors_pitjors('fitxerDades2.txt', 'fitxerResultats2.txt') >>> with open('fitxerResultats2.txt', 'r') as fResuls2: ... lines2 = fResuls2.read() >>> print(lines2, end='') verds: vermells: espot
Disposes de tests al fitxer
test-millors_pitjors.txt.