4. Qualitat de l’aire (3 punts)¶
La informació sobre diverses estacions de mesura de la qualitat de l’aire s’emmagatzema en dos diccionaris. El diccionari de lectures té com a clau el codi d’una estació (string) i com a valor una llista numèrica de lectures de contaminació. Per exemple:
>>> lectures = { ... 'E01': [42, 55, 61, 100], 'E02': [30, 34, 50], ... 'E03': [70, 65, 80, 75], 'E04': [51, 49, 53], ... 'E05': [20, 30, 40, 90] }
El diccionari d’estacions té com a claus codis d’estacions (string) i com a valors tuples formades pel districte on es troba l’estació i el tipus d’estació.
Per exemple:
>>> estacions = { ... 'E01': ('EIXAMPLE', 'A'), 'E02': ('GRACIA', 'A'), ... 'E03': ('EIXAMPLE', 'B'), 'E04': ('SANTS', 'C'), ... 'E05': ('GRACIA', 'A') }
Definim la mitjana truncada de les lectures d’una estació com a la mitjana calculada descartant una ocurrència del valor mínim i una ocurrència del valor màxim.
Dissenya la funció
mitjanes_districte(d_lect, d_est, t)que donats un diccionari de lectures d_lect, un diccionari d’estacions d_est, i un tipus d’estació t (string), retorna un nou diccionari amb informació de les estacions que apareixen a d_lect i són del tipus indicat per t. Si no hi ha cap estació del tipus t la funció retorna un diccionari buit.Les claus del diccionari han de ser els districtes i cada valor una llista de tuples amb una per cada estació del districte del tipus t. Cada tupla ha de contenir dos valors:
la mitjana de totes les lectures de l’estació
la mitjana truncada de les lectures de l’estació
Cada llista ha d’estar ordenada ascendentment segons la mitjana no truncada.
Suposeu que tots els codis d’estació que apareixen al diccionari de lectures també apareixen al diccionari d’estacions i que totes les llistes de lectures tenen com a mínim tres valors.
Els següents doctests mostren exemples del que ha de fer la funció:
>>> lectures = { ... 'E01': [42, 55, 61, 100], 'E02': [30, 34, 50], ... 'E03': [70, 65, 80, 75], 'E04': [51, 49, 53], ... 'E05': [20, 30, 40, 90] } >>> estacions = { ... 'E01': ('EIXAMPLE', 'A'), 'E02': ('GRACIA', 'A'), ... 'E03': ('EIXAMPLE', 'B'), 'E04': ('SANTS', 'C'), ... 'E05': ('GRACIA', 'A') } >>> dres = mitjanes_districte(lectures, estacions, 'A') >>> dres == { ... 'EIXAMPLE': [(64.5, 58.0)], ... 'GRACIA': [(38.0, 34.0), (45.0, 35.0)] ... } True >>> mitjanes_districte(lectures, estacions, 'D') {}
Desa la funció al fitxer
qualitat.py.Disposes de més tests al fitxer
test-mitjanes.txtDefinim la variació dins un districte com la diferència (sense arrodonir) entre el màxim i el mínim de les mitjanes no truncades de totes les estacions del districte.
Dissenya la funció
mes_variacio(d_lect, d_est, t, min_est)que donats un diccionari de lectures d_lect, un diccionari d’estacions d_est, un tipus d’estació t (string) i un enter min_est, retorna una tupla amb el districte de més variació i aquesta variació arrodonida a un decimal, considerant només les estacions de tipus t. Només s’han d’incloure els districtes que tinguin com a mínim min_est estacions del tipus t.Suposarem que totes les variacions són positives, que sempre existeix almenys un districte amb com a mínim min_est estacions del tipus t i que hi haurà un únic districte amb la variació màxima.
Aquesta funció ha de cridar la funció
mitjanes_districte().Els següents doctests mostren exemples del que ha de fer la funció:
>>> lectures1 = { ... 'E01': [10, 20, 30, 40, 100], 'E02': [5, 15, 25], ... 'E03': [60, 70, 80, 90], 'E04': [12, 18, 24, 30, 60], ... 'E05': [20, 40, 60, 80, 200], 'E06': [7, 9, 11, 13], ... 'E07': [31, 33, 35, 37, 80] } >>> estacions1 = { ... 'E01': ('EIXAMPLE', 'A'), 'E02': ('GRACIA', 'B'), ... 'E03': ('EIXAMPLE', 'A'), 'E04': ('SANTS', 'A'), ... 'E05': ('GRACIA', 'A'), 'E06': ('HORTA', 'C'), ... 'E07': ('SANTS', 'A') } >>> mes_variacio(lectures1, estacions1, 'A', 2) ('EIXAMPLE', 35.0)
Desa la funció al fitxer
qualitat.py.Disposes de més tests al fitxer
test-mes-variacio.txtDisposes de solucions al fitxer
qualitat.py.