Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Localização da criação da variável index

Olá! Gostaria de entender qual a diferença entre criar a variável index antes e dentro do while.

Eu havia criado a variável no começo do código, fora do while:

def jogar():

    palavra_secreta = 'banana'
    letras_acertadas = ["_", "_", "_", "_", "_", "_"]
    enforcou = False
    acertou = False
    index = 0  ##AQUI!

    print(letras_acertadas)

    while(not enforcou and not acertou):
        chute = input("Digite uma letra: ")
        chute = chute.strip()

        #index = 0  ##NÃO AQUI!
        for letra in palavra_secreta:
            if(chute.upper() == letra.upper()):
                letras_acertadas[index] = letra
            index = index + 1
        print(letras_acertadas)

    print("Fim do jogo")

if(__name__ == "__main__"):
    jogar()

Mas depois de 1 letra acertada, o programa dava erro de IndexError: list assignment index out of range Imagino que esse erro ocorra quando o programa está tentando acessar uma posição inexistente da lista, mas não entendi a diferença da variável ter sido criada antes e depois do while.

Depois que alterei e criei a variável dentro do while, não tive mais esse problema.

1 resposta
solução!

Se vc coloca fora do while acontece o seguinte:

  • Index é 0
  • 1) Entra no laço while
    • 2) Usuario entra input
    • 3) Entra no laço for (procurar letra na palavra secreta)
      • Para cada iteração, o index é acrescido de 1
    • 4) Qndo sai do for, o index = 5 (banana tem 6 letras, mas começa no 0)
    • 5) Finaliza o ciclo do while. Como a condição do while continua válida (not enforcou and not acertou), volta para o passo 2 e index = 5.
      • Quando entrar no for de novo para outra entrada do usuário, vai tentar acessar o index 6 de banana, que não existe.

Se vc coloca dentro do while acontece o seguite:

  • 1) Entra no laço while
    • 2) Index é 0
    • 3) Usuario entra input
    • 4) Entra no laço for (procurar letra na palavra secreta)
      • Para cada iteração, o index é acrescido de 1
    • 5) Qndo sai do for, o index = 5 (banana tem 6 letras, mas começa no 0)
    • 6) Finaliza o ciclo do while. Como a condição do while continua válida (not enforcou and not acertou),volta para o passo 2 e index = 0, porque o passo 2 reseta o index para 0.