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’indicadors verd, i el número d’indicadors vermell (dos int).

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 (4 vermell) 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ètode join().

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.