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

Do you need help?

TypeError: string index out of range

anon3 (10560 points)
20 66 138
in HW4 by (10.6k points)
closed by

Stavo perfezionando il mio codice (HW4), ma sono incappato in un problema che da almeno 2 ore non riesco a risolvere.

In pratica ho usato una funzione ausiliaria che prende in input due elementi: una lista (composta dalle stringhe presenti in tutti i file) e un index generico (formato int, ovviamente).

Questa funzione ausiliaria raggiunge il suo scopo senza problemi, ovvero mi ritorna il carattere di frequenza massima, come richiesto dall'esercizio.

Prendendo l'esempio di "hareennt", mi restituisce:

-) se inserisco manualmente index 0 ottengo "h"

-) con index 1 "a"

-) con index 2 "r"

-) ecc.

Poi ho implementato questa funzione in most_frequen_chars e qui sorge il problema. Ottenere la stringa desiderata non è un problema, basta concatenare i diversi caratteri ("h"+"a"+"r", ecc.).

Il problema è rendere generico l'index che la mia funzione ausiliaria prende come input:

ho provato un for index in range(len(parola_più_lunga)), ma il problema è che nella lista ci sono stringhe dalla lunghezza diversa.

Quindi se ho due parole, come "angel" e "portrait", mi ritorna index error (giustamente), dato che procede l'iterazione fino a quando non nota che l'index 5 di "portrait" non esiste in angel, che al massimo arriva a index 4.

Come si potrebbe deviare questo problema? In soldoni, come faccio ad evitare "string index out of range", mantenendo intatta la mia funzione ausiliaria?

398 views
closed

1 Answer

Best answer
x
xkMATT (760 points)
0 0 2
by (760 points)
selected by
Potresti aggiungere un if al ciclo in cui, se la parola che stai considerando non contiene l’indice poiché troppo corta, questa viene passata
anon3 (10560 points)
20 66 138
by (10.6k points)
Ci ho pensato, ma se la passo poi è come se non la prendessi in considerazione per l'esito finale. Nell'esempio di sopra, se scartassi "angel" perché troppo corta mi verrebbe un risultato sbagliato. O forse ho male interpretato il tuo suggerimento?
x
xkMATT (760 points)
0 0 2
by (760 points)
No, la passi solamente nel caso in cui stessi controllando un indice superiore alla lunghezza della stringa. Mi spiego meglio: nel caso di angel e portrait, finché il tuo ciclo arriva all’indice 4 (ultima lettera di angel) questa viene considerata e non ti reca nessun errore, nel momento in cui il ciclo si trova a considerare l’indice 5 (che non si trova in angel) puoi impostare un if in cui angel viene saltata perché è più corta e non contiene l’indice 5. In questo caso bypasseresti l’index error
anon3 (10560 points)
20 66 138
by (10.6k points)

surprise Ma certo! Grazie mille!