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.

dubbio hw2.2

G
Giacomozm (1440 points)
19 59 68
in Es2 by (1.4k points)
closed by
Come posso effettuare un controllo di un elemento successivo all'elemento analizzato in una lista evitando un IndexError
723 views
closed with the note: answered

3 Answers

Best answer
LeonardoEmili (35740 points)
14 65 155
by (35.7k points)
selected by

Ciao!

Ci sono diversi metodi per fare questo. Immagino che tu voglia iterare su di una lista o di una stringa e fare il controllo su x e su x+1. Pertanto per evitare il classico IndexError potresti fare un controllo 1-a-1 sull'elemento dell'indice e fare la stessa cosa sull'elemento successivo incrementando l'indice/contatore di 1, tuttavia devi ricordarti di farlo fermare alla lunghezza da te prefissata -1 altrimenti incapperesti in questo errore! Se vuoi infine fare un controllo anche sull'ultimo elemento potresti anche aggiungere un elemento "fittizio" che tu utilizzi quindi solo per far analizzare il tuo pseudo-ultimo elemento (dunque il penultimo) .

Spero di esserti stato d'aiuto, per qualsiasi cosa non esitare a chiedere

Buona giornata

Leonardo Emili

G
Giacomozm (1440 points)
19 59 68
by (1.4k points)
Quindi mettere due contatori?
G
Giacomozm (1440 points)
19 59 68
by (1.4k points)
non ho capito benissimo quello che devo fare
LeonardoEmili (35740 points)
14 65 155
by (35.7k points)
Quello che ti ho suggerito di fare nel caso generico, dato che non conosco nello specifico la soluzione da te adottata, è di fare il controllo dell'elemento +1 (quindi il successivo) fino alla lunghezza della tua struttura -1, es. ciao dovresti far fermare il ciclo alla lettera 'a', quindi se supponiamo di voler iterare in base alla lunghezza di ciao, ovvero 4, per evitare IndexError dovremo iterare fino alla lunghezza-1 , ovvero fino a indice 3, che corrisponde proprio alla lettera a.
Ti ho  suggerito poi nel caso in cui tu voglia controllare anche l'ultimo elemento, dato che così si fermerebbe al penultimo, di aggiungere un elemento in coda per procedere col controllo senza nessun errore. Es. supponiamo di voler iterare su una lista ['c','i','a','o'] se gli aggiungiamo un elemento alla fine ['c','i','a','o','x'] il controllo sull'elemento successivo andrà a buon fine senza restituirci alcun errore!
LeonardoEmili (35740 points)
14 65 155
by (35.7k points)
Chiaramente la 'x' era un esempio per indicare un carattere/stringa/stringa vuota utilizzato per comodità per gestire tale processo.
G
Giacomozm (1440 points)
19 59 68
by (1.4k points)
capito. grazie mille!!!
francesco.dev (33560 points)
22 51 129
by (33.6k points)
Ottima risposta! :)
LeonardoEmili (35740 points)
14 65 155
by (35.7k points)
Grazie! Di nulla :D
A
Alessio.Luc (3920 points)
6 16 25
by (3.9k points)
Buongiorno,

potresti direttamente gestire l'eccezione con un blocco try/except in modo che quando il programma si troverà di fronte ad un IndexError "saprà come comportarsi" ;)
francesco.dev (33560 points)
22 51 129
by (33.6k points)
Esattamente! Ci sono diversi approcci, o si usa un controllo di questa eccezione oppure si restringe semplicemente il range.
Bella risposta! :)
A
Alessio.Luc (3920 points)
6 16 25
by (3.9k points)
Esatto, grazie!
E
ErCzech (550 points)
1 8 17
by (550 points)

Penso che l'opzione più semplice sia creare una variabile ALLA FINE del ciclo dove metti l'elemento corrente. In questo modo nel ciclo successivo hai una variabile in cui hai l'elemento del ciclo precedente fino alla fine del ciclo wink.