IndexError: list index out of range HW2

M
MatteoB (1690 points)
8 16 21
asked Oct 31, 2020 in HW2 obbligatorio by MatteoB (1,690 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?

393 views

9 Answers

lwcs (1380 points)
4 15 26
answered Oct 31, 2020 by lwcs (1,380 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)
4 8 40
answered Oct 31, 2020 by Romitoskj (8,920 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)
8 16 21
commented Oct 31, 2020 by MatteoB (1,690 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)
4 8 40
commented Oct 31, 2020 by Romitoskj (8,920 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
answered Oct 31, 2020 by digiorgioalessio (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
answered Oct 31, 2020 by AdSum (16,290 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
answered Oct 31, 2020 by Figara93 (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)
8 16 21
commented Oct 31, 2020 by MatteoB (1,690 points)
ha due cicli for
twgever (15190 points)
7 27 105
answered Nov 1, 2020 by twgever (15,190 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)
8 16 21
commented Nov 1, 2020 by MatteoB (1,690 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
answered Nov 1, 2020 by Hatlas (5,340 points)
Potresti provare a gestire l'errore con il Try e l'Except.
Loriv3 (7970 points)
10 20 84
answered Nov 2, 2020 by Loriv3 (7,970 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)
8 16 21
commented Nov 2, 2020 by MatteoB (1,690 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)
8 16 21
commented Nov 2, 2020 by MatteoB (1,690 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 (172780 points)
513 935 1789
answered Nov 2, 2020 by andrea.sterbini (172,780 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)
8 16 21
commented Nov 2, 2020 by MatteoB (1,690 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 (172780 points)
513 935 1789
commented Nov 3, 2020 by andrea.sterbini (172,780 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")