Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Errore es3 aggiungi attore

DRDLCN (8070 points)
27 68 104
in Es3 by (8.1k points)

self.assertEqual(attore.films(),    set(),
>                        f"I film dell'attore all'inizio devono essere un insieme vuoto")
E       AssertionError: Items in the first set but not the second:
E       'The Misfits'
E       'All About Eve'
E       'The Seven Year Itch'
E       'Niagara'
E       'The Asphalt Jungle'
E       'Some Like It Hot'
E       'Monkey Business'
E       'Gentlemen Prefer Blondes' : I film dell'attore all'inizio devono essere un insieme vuoto

il test mi ritorna questo errore, perchè dice che quando chiama attore.films() il set non è vuoto all'inizio...

prima cosa io costruisco un set vuoto prima di tutto nel metodo films()

e poi ritorno l'insieme riempito...cosa sbaglio?

528 views
closed

2 Answers

Best answer
_andrea_ (45670 points)
11 42 297
by (45.7k points)
selected by
Penso che il test richiami il metodo films su un attore appena creato, e quando è appena creato deve ritornare un insieme vuoto, a cui poi verranno aggiunti i film. Come aggiungi tu i film e quando?
DRDLCN (8070 points)
27 68 104
by (8.1k points)
io li aggiungo solo quando viene chiamato il metodo

quando crea un attore nuovo nel costruttore non ho messo nessuna specifica a riguardo...

io li aggiungo iterando sul catalogo_films e con dei controlli riempio il set
_andrea_ (45670 points)
11 42 297
by (45.7k points)
Hai provato a creare un'istanza Attore alla console e chiamare il metodo films() e vedere cosa ti ritorna?
DRDLCN (8070 points)
27 68 104
by (8.1k points)
mi ritorna i film in cui lavora, mentre dove tornare un set()

forse sbaglio nella creazione del set...

io lo creo iterando il catalogo_film ma forse nel test il catalogo film viene creato dopo questo test e quindi basta un controllo?
_andrea_ (45670 points)
11 42 297
by (45.7k points)
Un attore appena creato, proprio nell'istante in cui viene creato non può aver lavorato in nessun film. Ti deve per forza tornare un insieme vuoto
DRDLCN (8070 points)
27 68 104
by (8.1k points)
continuo a non capire..ahaha(scusami)

il test per creare un attore prende il relativo dizionario dal file json e lo passo al programma e l'attore si crea...

inizialmente l'istanza attore deve avere 0 film e ok! e per riempire il set poi? devo prima creare il catalogo attori no?
_andrea_ (45670 points)
11 42 297
by (45.7k points)
Si, ma tu il set di film quando lo crei?
DRDLCN (8070 points)
27 68 104
by (8.1k points)
edited by
in che senso quando lo creo?  io lo creo quando viene richiamato il metodo films(), sicuramente sto sbagliando qualche logica stupida!

ho messo dei controlli nel metodo: se la len del catalogo attori è diversa da 0 allora creami il set con tutti i film! senno restituisci set() , ma non va perchè i primi 2 test a quanto pare creano tutti i cataloghi

Edit:

ma le possiamo usare le funzioni leggi archivio ecc ecc per completare i metodi no?
_andrea_ (45670 points)
11 42 297
by (45.7k points)
Ok non sto capendo quindi forse hai usato un metodo completamente diverso da quello che penso si debba usare. Comunque, nelle prime due funzioni (che in teoria vengono eseguite con i primi test) tu devi creare i famosi dizionari per gli attori i film e i registi, e tutte le istanze che ne derivano. Poi, sempre lì dentro, come anche specificato dal testo, devi fare in modo che ogni film abbia gli attori che ci hanno lavorato e ogni attore abbia i film in cui ha lavorato, e ancora che ogni film abbia i registi e che ogni regista abbia i film. Tutto avviene nelle due funzioni iniziali. Ora la domanda è: tu dici che quando viene chiamato il metodo Attore.films() crei prima un set vuoto e poi fai qualche magheggio che non ho capito, ma in teoria il metodo films() non dovrebbe fare altro che ritornare un insieme contenente i film in cui ha lavorato l'attore. E quando dico "nom dovrebbe far altro" intendo proprio "non dovrebbe far altro". Nel senso che dovrebbe essere una cosa tipo

def films(self):
    return qualcosa

Dove quel qualcosa è proprio l'insieme di film. Solo questo serve. Non so cos'altro fai, ma ti assicuro che è quello che ti fa sbagliare
DRDLCN (8070 points)
27 68 104
by (8.1k points)

OK hai ragione sto sbagliando modo di vedere l'esercizio, il main dell'es sono quindi le due funzioni esterne..io stavo programmando forse qualcosa di molto piu' complesso, 

Ad esempio: con la funzione leggi_archivio_Attori io creo un dizionario di questo genere : nome(attore) : oggetto_attore relativo

devi fare in modo che ogni film abbia gli attori che ci hanno lavorato e ogni attore abbia i film in cui ha lavorato

e' questo che non ho capito allora, che si intende? 

_andrea_ (45670 points)
11 42 297
by (45.7k points)
Dentro ogni attore crei un set inizialmente vuoto che diventerà proprio quel set in cui metti i film. Nel metodo films ritorni quel set. Man mano che scorri i film aggiungi il film a ogni attore che ci ha lavoraroz così quando ti chiede attore.films() il metodo ritorna proprio quel set, che all'inizio era vuoto, ma dopo cu aggiungi i film. Lo stesso lo fai con i film e i registi, ci metti i set che ti servono
DRDLCN (8070 points)
27 68 104
by (8.1k points)
okay ho ricominciato, quando dici man mano che scorri i film intendi dentro la funzione leggi archivio film?
_andrea_ (45670 points)
11 42 297
by (45.7k points)
Si. Le due funzioni sono le uniche cose che scegli tu, e vengono eseguite. Dentro quelle devi aver fornito a ogni oggetto tutto quelll che gli serve per ottenere i risultati giusti ai test successivi
DRDLCN (8070 points)
27 68 104
by (8.1k points)
edited by

sei stato di grande aiuto! 

EDIT:

def attori(self):
        '''torna l'insieme di istanze di tipo Attore che hanno lavorato al film'''
       

anche qui dentro ogni film inizialmente devo creare un set vuoto attori?

_andrea_ (45670 points)
11 42 297
by (45.7k points)
Si anche lì e in quello dei registi
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
Visto che l'archivio degli attori/film potrebbe essere diverso, un nuovo Attore appena istanziato non può sapere in quali film ha lavorato, e quindi Attore.films() deve tornare un insieme vuoto.

Solo dopo aver creato gli attori del catalogo_attori, quando creo i film (dal file che voglio io), allora puoi aggiungere gli attori ai loro film ed i film ai loro attori.