Aiuto errore es3 hw3bis

FrancescoMauto (1000 points)
1 13 20
asked Jan 27, 2019 in HW3bis by FrancescoMauto (1,000 points)

 if len(casata) >0:
>           self.assertEqual(type(personaggio.casata[0]), Casata,f"Gli elementi dell'attributo casata del personaggio non sono istanze di Casata")
E           IndexError: list index out of range

Non riesco a capire perche` mi dice list index out of range. Io ho creato una lista ed inserito al suo interno le istanze di classe Casata...

349 views

2 Answers

andrea.sterbini (172780 points)
513 935 1789
answered Jan 27, 2019 by andrea.sterbini (172,780 points)
Ciascun personaggio a sua volta deve avere la sua casata.

Quell'errore indica che non ce l'hai inserita
FrancescoMauto (1000 points)
1 13 20
commented Jan 27, 2019 by FrancescoMauto (1,000 points)
Io ho inserito come attributo casata una lista degli ogfetti di casate, così come era richiesto nel testo. Ovviamente, solo le casate che risultano nella chiave del dizionario nel json "houseName". Sbaglio?
angelo.spognardi (4680 points)
37 62 96
commented Jan 28, 2019 by angelo.spognardi (4,680 points)
Ciao, no non sbagli. Ma come ha scritto il prof., probabilmente non l'hai fatto in maniera corretta, poiché l'errore che ricevi dice che l'oggetto (probabilmente lista) che hai associato all'oggetto personaggio testato è vuoto, poiché non ha nemmeno un elemento. Il test verifica che ci sia almeno un elemento e che quell'elemento sia di tipo casata. Quindi, ti consiglio di controllare bene quando crei un personaggio se aggiungi correttamente la sua casata nell'attributo casata.
l
leonclementi (330 points)
0 1 3
answered Feb 18, 2019 by leonclementi (330 points)
Io anche sto avendo lo stesso problema, ma credo che si tratti di un problema del Test "test_10_new_Personaggio", dove viene inizializzata la variabile c={} e poi non viene riaggiornata con la lista ricavata.

Secondo me manca l'istruzione c=Test.casate;

Professore può confermare?
angelo.spognardi (4680 points)
37 62 96
commented Feb 18, 2019 by angelo.spognardi (4,680 points)
edited Jun 30, 2019 by andrea.sterbini

No, non manca nulla. Ogni volta che si crea un nuovo personaggio, si deve considerare il dizionario delle casate (ovvero "catalogo_casate", ricevuto come argomento dal costruttore), che va opportunamente modificato se il personaggio appartiene ad una casata:

  • se la casata non esiste, la si deve aggiungere ed inserire il personaggio come un nuovo membro,
  • se la casata esiste già, si deve soltanto inserire il personaggio come un nuovo membro

Quindi, state attenti ad implementare correttamente il costruttore della classe Personaggio!

D
Deacoon (9100 points)
3 33 53
commented Jun 28, 2019 by Deacoon (9,100 points)
Ma io non capisco a che serve prendere in input nel costruttore di Personaggio "catalogo_casate" se tanto la casata la trovi nel campo data["housename"]?

e poi come fa a prenderla se ancora non l'hai definita?
andrea.sterbini (172780 points)
513 935 1789
commented Jun 30, 2019 by andrea.sterbini (172,780 points)
Ogni Personaggio deve contenere gli oggetti Casata di cui fa parte (non stringhe, oggetti) ed ogni casata deve contenere gli oggetti Personaggio (non stringhe, oggetti) che ne sono membri. Per lo stesso nome di casata deve esiste UNA SOLA istanza di Casata con quel nome. Per ogni nome di personaggio deve esistere UNA SOLA istanza di Personaggio con quel nome.

Nel JSON ci sono i NOMI delle casate, per ogni nome nuovo va costruito un nuovo oggetto Casata e va aggiunto al dizionario catalogo_casate, per ogni nome vecchio, si può trovare nel dizionario l'oggetto che corrisponde a quel nome in modo da inserirci il personaggio e in modo da inserire la casata nel personaggio.

In questo modo esisterà una sola Casata per ogni nome di casata (invece che tante istanze di Casata con lo stesso nome)