La classe `EquipsONG` (4 punts) =============================== .. py:module:: ong Una ONG vol mantenir la informació dels projectes que està desenvolupant i de les persones que hi treballen. Implementareu la classe :py:class:`EquipsONG` en un mòdul anomenat :py:mod:`ong` (fitxer :file:`ong.py`). Cal tenir en compte el següent: * Tant els projectes com les persones s'identifiquen amb un :py:class:`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 (:py:class:`set`) amb les persones assignades. Especificació de la classe: .. py:class:: EquipsONG Col·lecció de projectes actius d'una ONG. Inicialment no contindrà cap projecte. .. rubric:: Atributs públics: .. py:attribute:: projectes: Diccionari amb els projectes actius; cada clau té associat el conjunt de persones assignades al projecte. **Conté només projectes actius.** .. rubric:: Mètodes: .. py:method:: conjunt_persones() Retorna el conjunt persones assignades als projectes actius .. py:method:: 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. .. py:method:: esborra_projecte(idproj) Elimina completament el projecte `idproj`, tant si estava actiu com si no (i per tant les persones del projecte queden desassignades). .. py:method:: 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. .. rubric:: 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: .. literalinclude:: tests-equips.txt :language: pycon :end-before: --fi-enunciat Disposeu de jocs de prova al fitxer :download:`tests-equips.txt`