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

Do you need help?

Aiuto errore es3 hw3bis

FrancescoMauto (1000 points)
5 14 20
in HW3bis by (1.0k 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...

694 views

2 Answers

andrea.sterbini (207920 points)
750 1267 2373
by (208k points)
Ciascun personaggio a sua volta deve avere la sua casata.

Quell'errore indica che non ce l'hai inserita
FrancescoMauto (1000 points)
5 14 20
by (1.0k 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 (8170 points)
75 155 224
by (8.2k 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
by (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 (8170 points)
75 155 224
by (8.2k points)
edited by

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)
11 34 53
by (9.1k 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 (207920 points)
750 1267 2373
by (208k 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)