Forum >> Principianti >> Ciclo while

Pagina: 1

Ciao a tutti,

sto studiando Python e per svolgere un esercizio ho definito la seguente funzione:

def traduzione(parola):
--indice = 0
--vocali = "aeiou"
--while indice < (len(parola)-2):
----for i in parola:
------if (not i in vocali) and (parola[indice+2]==i):
--------print("if" + str(indice) + i) #ho inserito questo solo per capire
--------indice += 1
------else:
--------print("else" + str(indice) + i) #ho inserito questo solo per capire
--------indice += 1

p = "coco"
traduzione(p)

Compare l'errore: if (not i in vocali) and (parola[indice+2]==i): IndexError: string index out of range

Ma quando indice = 2 non si dovrebbe fermare il ciclo while?

Vi ringrazio,
Valeria

--- Ultima modifica di sedia89 in data 2020-06-05 15:52:27 ---

--- Ultima modifica di sedia89 in data 2020-06-05 15:54:33 ---
sì, ma gli indici partono da zero, e 2 + 2 fa 4, e l'indice "4" nella parola "coco" non esiste.


(poi quello che stai cercando di fare è molto inutilmente aggrovigliato, ma pazienza)

Ok, ho capito: avrei dovuto mettere prima il ciclo for e poi il ciclo while all'interno.



Per curiosità, come avrei potuto farlo in maniera più semplice?




Grazie
> avrei dovuto mettere prima il ciclo for e poi il ciclo while all'interno

uh? Avresti dovuto fermarti in qualsiasi modo prima che "parola[indice+2]" arrivasse a fare "4". Quindi non so, invece di "len(parola)-2" fare "len(parola)-3" o va a sapere... capita spesso di fare errori della staccionata https://it.wikipedia.org/wiki/Off-by-one_error con gli indici Python, e di dover compensare.


> Per curiosità, come avrei potuto farlo in maniera più semplice?


Eh... non ho mica capito che cosa stai cercando di fare.

Ok, ho capito: avrei dovuto mettere prima il ciclo for e poi il ciclo while all'interno.
No, hai combinato un macello. È sufficiente un ciclo for.

def traduzione(parola) :
    indice = 0
    vocali = "aeiou"
    
    for i in parola[: -2] :
        
        if (not i in vocali) and (parola [indice + 2] == i) :
            print("if" + str(indice) + i) #ho inserito questo solo per capire
            indice += 1
        
        else :
            print("else" + str(indice) + i) #ho inserito questo solo per capire
            indice += 1

p = "coco"
traduzione(p)

come avrei potuto farlo in maniera più semplice?
def funzione(p) :
    v = "aeiou"
    for x in range(len(p) - 2) : print("%s%d%s" % ("if" if not p[x] in v and p[x + 2] == p[x] else "else", x, p[x]))
        
parola = "coco"
funzione(parola)
--- Ultima modifica di EL DIABLO in data 2020-06-10 01:20:44 ---


Pagina: 1



Esegui il login per scrivere una risposta.