Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

porque list index out of range

Fiz um método que verificava se tinha letras repetidas em sequencia em uma palavra, achei que se fizesse um ciclo while do tamanho da palavra que comparasse as letras iria dar certo. Porem quando coloco while i <= len(word) da list index out of range, tentei até usar while i <= len(word)-1 e ainda dava erro, para minha surpresa o programa só funciona com while i <= len(word)-2 e não faço ideia o pq

def double_letters(word):
    word = list(word)
    i=0
    verdade=0
        while i <= len(word)-2: #PQ NÃO SÓ while i <= len(word)
        i+=1
        if word[i] == word[(i-1)]:
            verdade+=1
    if verdade != 0:
        print('yes')
    else:
        print('no')

double_letters('abcdee')
2 respostas

Olá Gabriel,

tente isso, basicamente o index da lista começa com 0 já o len() começa com 1 isso por isso do erro

def double_letters(word):
    word = list(word)
    i=0
    verdade=0
    final = len(word)
    print(len(word))
    while i < final:
        if (word[i] == word[(i-1)]):
            verdade+=1
        i = i + 1 
    if verdade != 0:
        print('yes')
    else:
        print('no')

double_letters('abcdee')
solução!

Você tá verificando se i é menor ou igual ao tamanho da palavra, isso já não é bom, já que adiciona um número a mais. Em seguida, assim que o loop é executado, você adiciona mais 1 ao i, modificando o valor dele antes de trabalhar com o valor atual. Por isso, seu i iria até o 7, já que >= ao tamanho dessa palavra é 6 e adicionando mais um fica 7, resultando em IndexError já no 6.

O recomendado é alterar o valor do i só depois de trabalhar com ele, quando um novo loop começar:

def double_letters(word):
    word = list(word)
    i=0
    verdade=0
    while i < len(word): # python usa indexes baseados em 0
        if word[i] == word[(i-1)]:
            verdade+=1
        if verdade != 0:
            print('yes')
        else:
            print('no')
        i+=1

double_letters('abcdee')