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

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 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 2023-24 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.

IndexError: list index out of range HW2

M
MatteoB (1690 points)
10 16 21
in HW2 obbligatorio by (1.7k points)

Durante l'esecuzione dei test riesco a passare alcuni test senza problemi, me tre su altri mi riporta la dicitura:

IndexError: list index out of range

E mi dice che la  lista che devo tornare è una lista di interi(come è possibile mi chiedo se altri test li passo ad occhi chiusi)... Ma io ho fatti vari test mandando a debug e fancedo prove anche su liste di parole e mi riorna ogni volta una lista di interi con il risultato che mi aspetto

Come posso risolvere questa cosa?

1.3k views

9 Answers

lwcs (1380 points)
5 16 26
by (1.4k points)

L' errore IndexError: list index out of range di solito riguarda la posizione dell elemento della lista che stai esaminando.E' possibile che nel tuo codice venga cercata una posizione nella lista che però non è presente perchè è una posizione che va oltre le posizioni presenti nella lista stessa. Un errore del genere può capitare ad esempio se stai usando un ciclo for con range(10) e dentro il ciclo richiami la posizione dell elemento di una lista.

In questo caso range scandisce 10 elementi,cioè ti fa 10 cicli con posizioni che vanno da 0 a 9,se la lista ha 9 elementi ti restituisce quell errore.

Romitoskj (8920 points)
5 8 40
by (8.9k points)
L'errore che ti dà non riguarda il valore di ritorno della funzione ma indica che, durante l'esecuzione della funzione, stai cercando di accedere ad elementi oltre la lunghezza della lista. Ad esempio nella lista l = [1, 2, 3] se accedessi all'elemento l[10] mi restituirebbe quell'errore, dato che l'ultimo indice valido è 2.
M
MatteoB (1690 points)
10 16 21
by (1.7k points)
però non capisco perchè su alcuni test va bene li passo tranquillamente

quelli che non passo provo a farli nel debug funzionano ma appunto nel test mi riporta quell'errore... Più che altro non saprei come risolvere
Romitoskj (8920 points)
5 8 40
by (8.9k points)
Evidentemente le condizioni per cui bisogna incrementare gli indici non sono corrette e vengono incrementati anche quando non dovrebbero.
d
digiorgioalessio (560 points)
0 0 3
by (560 points)
Probabilmente l'errore riguarda una lista e il ciclo che hai usato per il programma: se hai usato un while o un for per contare gli elementi della lista, la variabile di questi due cicli ,che sarà inserita nell'indice della lista, è maggiore della lunghezza della lista. Ad esempio se abbiamo una lista di 2 elementi la variabile che verrà usata per leggere la lista avrà valori di: 0 (il primo elemento) e 1 (il secondo elemento). Se la variabile sarà maggiore di 1 il programma andrà in "out of range" perché andando a controllare il numero due, il programma controllerà il terzo elemento della lista che, in questo esempio, non esiste.
AdSum (16290 points)
9 20 134
by (16.3k points)
Senza l'intero corpo dell'errore posso fare solo supposizioni. Comunque ciò che è certo che il problema riguarda una lista, nella quale stai cercando di accedere ad un indice non presente in quest'ultima  i>len(lista).

Il mio consiglio è di controllare i vari cicli, in particolare i for. Ricorda che una lista con x elementi inizia ad indice 0 ma finisce ad indice x-1!
F
Figara93 (560 points)
1 2 7
by (560 points)
Stai richiamando un elemento che non è presente nella lista i>len(Lista), come già detto dal collega, non conoscendo il tuo codice posso presumere che sia composto da cicli while for, potresti controllare anche l' indentazione/posizione delle variabili temporanee e non utilizzate.
M
MatteoB (1690 points)
10 16 21
by (1.7k points)
ha due cicli for
twgever (17470 points)
8 29 105
by (17.5k points)
è possibile che tu stia estendendo le liste con un elemento non adatto? magari i test che ti passano, sono quelli dove vince g4, quindi tutti i giocatori avranno lo stesso numero di parole, e il programma non ti estende nessuna lista. Invece, metti caso vince g3, il programma ti aggiunge magari un elemento a g4 vuoto (di tipo str) dove magari andrebbe aggiunto uno 0, per non cambiare i risultati. Oppure hai qualche condizione che ti assegna al punteggio un str, piuttosto che un punteggio. Ricontrolla bene!
M
MatteoB (1690 points)
10 16 21
by (1.7k points)
ho un carattere che estendo a tutte le liste che sono minori a quella di lunghezza max e quando vedo quel carattere/numero esco perchè so che cono arrivato alla fine della lista e poi da li faccio tutte le altre operazioni per il calcolo del punteggio
Hatlas (5340 points)
1 2 7
by (5.3k points)
Potresti provare a gestire l'errore con il Try e l'Except.
Loriv3 (7970 points)
11 21 84
by (8.0k points)
Prova a rivedere meglio i controlli che fai riguardo a len di lista, potrebbe essere che i test che passi hanno liste con la stessa dimensione e quindi ti fa errore
M
MatteoB (1690 points)
10 16 21
by (1.7k points)
Ora avevo inizializzato la lista dei punteggi con [0,0,0,0] e negli ultimi test mi dice che sto ritornando questa lista... Mentre nei primi li passo tranquillamente.

Però ripeto... Non capisco perchè in fase di debug la lista viene riportata tranquillamente con i giusti valori e nei test no
M
MatteoB (1690 points)
10 16 21
by (1.7k points)
Cioè io mi sono fatto una funzione esterna per il calcola del punteggio e mi salvo il ritorno della funzione (che ritorna una lista di interi per l'appunto) all'interno di una variabile e dopo mi ritorno quella variabile tranquillamente
andrea.sterbini (207880 points)
745 1264 2372
by (208k points)
Sembra che tu torni una lista vuota.

Infatti passi il test che il risultato sia una lista ma fallisci quello che ne estrae il primo elemento e controlla che sia un int
M
MatteoB (1690 points)
10 16 21
by (1.7k points)
mi scusi professore... Ma se io mi calcolo il punteggio di ogni singolo giocatore e poi lo inserisco in una lista non mi diventa una lista di interi?
andrea.sterbini (207880 points)
745 1264 2372
by (208k points)
Certamente. Ma tieni conto che tra quello che pensi che faccia il tuo programma e quello che FA potrebbe esserci differenza

(tra il dire e il fare c'è di mezzo "e il")