Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2021-22 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2021-22 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

VIDEOLEZIONI DEL CORSO DI FONDAMENTI DI PROGRAMMAZIONE AA20-21

PROGRAMMING COURSE VIDEOCONFERENCES AY20-21

Aiuto errore es3 hw3bis

FrancescoMauto (1000 points)
1 13 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...

355 views

2 Answers

andrea.sterbini (173640 points)
516 941 1795
by (174k 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
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 (4720 points)
37 65 99
by (4.7k 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 (4720 points)
37 65 99
by (4.7k 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)
3 33 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 (173640 points)
516 941 1795
by (174k 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)