Classe Registre¶
Mètodes principals¶
Implementeu la classe Registre especificada a continuació, que permet de representar informació sobre els naixements en una població durant un any. Per cada dia es guarda una llista dels noms de les persones nascudes aquell dia en l’ordre en el qual s’han inscrit.
- class registres.Registre(pob, an)¶
Atributs:
Mètodes
- inscriure(data, nom)¶
Afegeix un naixement en la data data (
datetime.date) d’una persona de nom nom (str). El naixement s’inscriu al final de la llista dels naixements ja existents aquell dia.
Aquesta classe ha de suportar les operacions següents:
Operació
Resultat
r[data]Retorna una llista dels noms de les persones nascudes en la data donada que consten al registre r. Si no hi ha cap persona nascuda en la data donada, retorna la llista buida.
len(r)Retorna el nombre de dates en les que hi ha algun naixement.
Implementeu la classe Registre i deseu-la al fitxer registre.py. Tingueu en compte que serà necessari un atribut privat per a emmagatzemar els noms de cada data. Utilitzeu un diccionari en el qual les claus siguin dates i els valors, llistes de noms. Aquest diccionari serà inicialment buit i només emmagatzemarà dates per les quals hi hagi algun nom.
Vegeu per exemple:
>>> from registres import Registre >>> r = Registre('Barcelona', 2022) >>> r.poblacio 'Barcelona' >>> r.any_naix 2022 >>> len(r) 0 >>> from datetime import date >>> d1 = date(2022, 2, 23) >>> d2 = date(2022, 5, 1) >>> r.inscriure(d1, 'Tom') >>> r.inscriure(d1, 'Lluís') >>> r.inscriure(d1, 'Marc') >>> r.inscriure(d2, 'Marc') >>> r.inscriure(d2, 'Marc') >>> r.inscriure(d2, 'Ali') >>> len(r) 2 >>> r[d1] ['Tom', 'Lluís', 'Marc'] >>> r[d2] ['Marc', 'Marc', 'Ali']
Disposeu d’un fitxer amb un joc de proves al fitxer test-registre.txt.
Iterar sobre dates¶
En un intèrpret de python, intenteu iterar sobre dates del registre. És possible? Per què?
Afegir a la classe Registre el mètode adient per a que la classe sigui iterable per dates de naixement. Vegeu per exemple per la instància r definida en els tests anteriors:
>>> for data in r: ... print(data,':',r[data]) ... 2022-02-23 : ['Tom', 'Lluís', 'Marc'] 2022-05-01 : ['Marc', 'Marc', 'Ali']
Disposeu de jocs de proves al fitxer test-registre_iter.txt.
Iterar sobre noms¶
Afegiu a la classe Registre el mètode iter_noms() que permet iterar sobre els noms de persona que s’han registrat durant l’any ordenats per ordre alfabètic i sense repeticions. Vegeu com a exemple, per registre r creat en els tests anteriors:
>>> for nom in r.iter_noms(): ... print(nom, end = '-') ... Ali-Lluís-Marc-Tom-
Una estratègia possible per abordar aquest problema és utilitzar la funció itertools.chain.from_iterable per crear un iterador de tots els noms i un set per guardar-ne només els no repetits.
Disposeu de jocs de proves al fitxer test-registre_iter_2.txt.
Nota
Trobareu una solució de tot l’exercici al fitxer registres.py.