1. La classe EquipsONG (4 punts)¶
Una ONG vol mantenir la informació dels projectes que està desenvolupant i de les persones que hi treballen. Implementareu la classe EquipsONG en un mòdul anomenat ong (fitxer ong.py). Cal tenir en compte el següent:
Tant els projectes com les persones s’identifiquen amb un
string.Cada persona només pot estar assignada a un sol projecte.
Un projecte és actiu si té almenys una persona assignada.
La representació interna serà un únic atribut públic, un diccionari on les claus són identificadors de projectes actius i els valors són conjunts (
set) amb les persones assignades.
Especificació de la classe:
- class ong.EquipsONG¶
Col·lecció de projectes actius d’una ONG. Inicialment no contindrà cap projecte.
Atributs públics:
- projectes:
Diccionari amb els projectes actius; cada clau té associat el conjunt de persones assignades al projecte. Conté només projectes actius.
Mètodes:
- conjunt_persones()¶
Retorna el conjunt persones assignades als projectes actius
- assigna(idproj, idpers)¶
Afegeix la persona idpers al projecte idproj. Si el projecte idproj no existeix, l’afegeix. Si la persona idpers ja estava assignada a un altre projecte, no fa res.
- esborra_projecte(idproj)¶
Elimina completament el projecte idproj, tant si estava actiu com si no (i per tant les persones del projecte queden desassignades).
- desassigna(idproj, idpers)¶
Desassigna la persona idpers del projecte idproj. Si idproj no està actiu o bé si idpers no està assignada al projecte idproj, no fa res. Si després de fer la desassignació el projecte queda sense persones assignades, deixa d’estar actiu i per tant cal eliminar-lo.
Operacions:
Operació
Resultat
len(e)Nombre de projectes actius de la ONG
e[idp]Llista ordenada de persones assignades al projecte idp. Llista buida si el projecte no està actiu
Exemples d’ús:
>>> from ong import EquipsONG
--ini-enunciat
>>> e = EquipsONG()
>>> e.projectes
{}
>>> len(e)
0
>>> e['p1']
[]
>>> e.assigna('p1', 'ana')
>>> e.assigna('p1', 'joan')
>>> e['p1']
['ana', 'joan']
>>> e.assigna('p2', 'marta')
>>> len(e)
2
>>> sorted(e.projectes.keys())
['p1', 'p2']
>>> e.conjunt_persones() == {'ana', 'joan', 'marta'}
True
>>> e.assigna('p3', 'ana') # 'ana' ja era a 'p1'
>>> 'p3' in e.projectes
False
>>> 'ana' in e['p1']
True
>>> e.assigna('p1', 'ana') # Assignar la mateixa persona al mateix projecte no canvia res
>>> e['p1']
['ana', 'joan']
>>> e.desassigna('p1', 'ana') # Desassignar persona existent
>>> e['p1']
['joan']
>>> e.desassigna('p1', 'joan') # Desassignar última persona elimina el projecte
>>> e['p1']
[]
>>> len(e) # només queda p2
1
>>> e.esborra_projecte('p2') # Esborrar l'únic projecte existent
>>> len(e)
0
Disposeu de jocs de prova al fitxer tests-equips.txt