>>> 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 --fi-enunciat # Operacions segures sobre projectes inexistent/no actiu >>> e.desassigna('noexisteix', 'x') # no ha de produir error >>> e.esborra_projecte('noexisteix') # no ha de produir error >>> e['noexisteix'] [] # Conjunt_persones amb projectes múltiples >>> e.assigna('p1', 'anna') >>> e.assigna('projA', 'x') >>> e.assigna('projB', 'y') >>> e.assigna('projC', 'z') >>> e.conjunt_persones() == {'anna', 'x', 'y', 'z'} True # Desassignar persona que no està al projecte no fa res >>> e.desassigna('projA', 'jaume') >>> sorted(e['projA']) ['x'] # Esborrar deixa les persones desassignades (ja no apareixen) >>> e.esborra_projecte('projB') >>> 'y' in e.conjunt_persones() False # Comprovació final: cada persona com a màxim en un projecte >>> # Construïm un conjunt de totes les persones i comptem aparicions >>> aparicions = {} >>> for p, s in e.projectes.items(): ... for pers in s: ... aparicions[pers] = aparicions.get(pers, 0) + 1 ... >>> all(v == 1 for v in aparicions.values()) True >>> e.assigna('projC', 'z') # repetir assignació no ha de fallar >>> e['projC'] ['z'] >>> e.desassigna('projC', 'z') # repetir desassignació no ha de fallar >>> e.desassigna('projC', 'z') >>> e['projC'] [] # Neteja i comprovació que no queden projectes >>> len(e) 2 >>> for pid in list(e.projectes): ... e.esborra_projecte(pid) ... >>> len(e) 0 >>> e.conjunt_persones() set()