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

letras_acertadas [index] = letras gera erro no meu código

No meu código segui a mesma lógica do video com algumas diferneças pequenas, mas sempre seguindo o que foi mostrado. Quando coloco o For para subistituir o chute no letras acertadas, recebo um erro de out of range. O que está errado?

def jogar(): separador = "*************" print(separador, "Bem vindo ao jogo de forca!", separador, sep="\n")

palavra_secreta = "banana"
palavra_secreta = palavra_secreta.lower()
letras_acertadas = []

enforcou = False
acertou = False

for tamanho in range(1, (len(palavra_secreta))):
    letras_acertadas = letras_acertadas + ["_"]
print(letras_acertadas)

while (not enforcou and not acertou):

    chute = input("Qual letra você chuta?")
    chute = chute.lower()
    chute = chute.strip()

    index = 0
    for letra in palavra_secreta:
        if (letra == chute):
            letras_acertadas[index]= letra
        index = index + 1

    print(letras_acertadas)

print("Acabou o jogo")

if (name == "main"): jogar()

1 resposta
solução!

Parece que há um erro na sua lógica de iteração do loop for. O erro "out of range" provavelmente ocorre devido ao uso inadequado da função range() no seu loop for, que exclui o último índice da palavra secreta. Isso faz com que você tente acessar um índice que não existe na lista letras_acertadas.

Aqui está a parte do código que precisa ser corrigida:

for tamanho in range(1, (len(palavra_secreta))):
    letras_acertadas = letras_acertadas + ["_"]

A função range(start, stop) gera números de start até stop - 1. No seu caso, o código acima gera índices de 1 a (len(palavra_secreta) - 1), excluindo o último índice.

Para corrigir isso, você pode usar a função range(len(palavra_secreta)) ou usar um loop for simplificado que itere diretamente pelas letras da palavra secreta:

for _ in palavra_secreta:
    letras_acertadas.append("_")

O underscore _ é usado como uma convenção quando você não precisa usar o valor da variável na iteração.

Além disso, no final do seu código, a condição if (name == "main"): jogar() parece estar incorreta. O correto seria if __name__ == "__main__": jogar() para verificar se o arquivo está sendo executado como um script principal.

Aqui está o código corrigido:

def jogar():
    separador = "*************"
    print(separador, "Bem vindo ao jogo de forca!", separador, sep="\n")

    palavra_secreta = "banana"
    palavra_secreta = palavra_secreta.lower()
    letras_acertadas = ["_" for _ in palavra_secreta]

    enforcou = False
    acertou = False

    while (not enforcou and not acertou):

        chute = input("Qual letra você chuta?")
        chute = chute.lower()
        chute = chute.strip()

        index = 0
        for letra in palavra_secreta:
            if (letra == chute):
                letras_acertadas[index] = letra
            index = index + 1

        print(letras_acertadas)

    print("Acabou o jogo")

if __name__ == "__main__":
    jogar()

Certifique-se de que essas correções resolvam os problemas que você estava enfrentando.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software