1. Senglars (3 punts)

Atenció

En el disseny de la funció estudiSenglars descrita més endavant has de fer servir la funció obteMes. Aquesta funció, que veus implementada a continuació, reb un string amb una data i hora, i retorna un enter amb el número del mes de la data. Per exemple, la crida a obteMes('19/12 4:13') retorna l’enter 12.

def obteMes(dataHora):
    dataHora = dataHora.strip()
    posBarra = dataHora.find('/')
    posEspai = dataHora.find(' ')
    mesStr = dataHora[posBarra+1:posEspai]
    return int(mesStr)

Has de copiar i pegar aquest codi al mòdul senglars (fitxer senglars.py) on escriuràs la següent funció.

Disposem d’una llista que descriu el número de senglars comptabilitzats en diferents punts del territori al llarg del temps. Cada element és un tuple de 3 elements: el codi del punt d’observació (str), la data i hora (str), i el número de senglars observats (ìnt). Per exemple la següent llista, on pots veure que poden aparèixer multiples vegades dades dels mateixos punts d’observació, i sense cap ordre:

[ ('pt027', '19/12 4:13', 3), ('pt121', '15/11 0:31', 7), ('pt027', '8/11 3:05', 9), ('pt029', '9/11 3:25', 4) ]

Per un altra banda tenim un diccionari que guarda, per cada zona del territori (str), la llista dels punts d’observació que conté. Per exemple, el següent diccionari:

{ 'montseny': ['pt027', 'pt029'], 'collserola': ['pt121'] }

Dissenya la funció següent i desa-la al mòdul senglars (fitxer senglars.py).

estudiSenglars(lObs, dZon, nomZ, numM)

lObs és una llista d’observacions de senglars, com la indicada anteriorment.

dZon és un diccionari de zones com l’indicat anteriorment.

nomZ és el nom d’una zona.

numM és un número de mes (un enter entre 1 i 12).

La funció retorna un diccionari on les claus són els punts d’observació que pertanyen a la zona nomZ, i els valors associats són el total de senglars vistos en cada punt, durant el mes numM. Els punts d’observació «escollits» però en els que no s’han vist cap senglar durant el mes triat, també han d’aparèixer al diccionari retornat, i els valors corresponents a les claus serà 0.

Per exemple:

>>> lO = [ ('p78', '13/9 8:34', 4), ('p84', '23/9 7:56', 2),
...        ('p23', '11/9 2:04', 7), ('p99', '1/9 5:55', 7),
...        ('p99', '3/9 0:05', 2), ('p78', '11/11 4:02', 3) ]

>>> dZ = { 'montseny': ['p78', 'p99'], 'collserola': ['p84'],
...        'ribagorça': ['p23'] }

>>> dRes1ok = {'p78': 4, 'p99': 9}
>>> dRes1 = estudiSenglars(lO, dZ, 'montseny', 9)
>>> if dRes1 != dRes1ok:
...     print(dRes1)

>>> dRes2 = estudiSenglars(lO, dZ, 'montseny', 11)
>>> dRes2ok = {'p78': 3, 'p99': 0}
>>> if dRes2 != dRes2ok:
...     print(dRes2)

>>> dRes3 = estudiSenglars(lO, dZ, 'collserola', 9)
>>> dRes3ok = {'p84': 2 }
>>> if dRes3 != dRes3ok:
...     print(dRes3)

Disposes de tests al fitxer test-senglars.txt.