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

Um help, please!

Vejam...algo de errado no meu código? Sei que sim, kkkkkkkk , mas já torrei meu único neurônio disponível aqui, assisti 2 vezes a aula, mas não tô conseguindo identificar... já até coloquei (palavra_secreta) na def incicializa_letras_acertadas(): pra ver se sumia o erro que de fato sumiu, mas o programa não roda direito, afinal não é o lugar da palavra secreta :D. Help me. Segue após o print da tela

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Código:

import random

def jogar():

    imprime_abertura()
    palavra_secreta = carrega_palavra_secreta()

    letras_acertadas = inicializa_letras_acertadas(palavra_secreta)
    print(letras_acertadas)

    enforcou = False
    acertou = False
    erros = 0

    while (not acertou and not enforcou):

        chute = pede_chute()

        if(chute in palavra_secreta):
            marca_chute_correto(chute, letras_acertadas, palavra_secreta)
        else:
            erros += 1
            desenha_forca(erros)

        enforcou = erros == 7
        acertou = "_" not in letras_acertadas
        print(letras_acertadas)

    if(acertou):
        imprime_mensagem_vencedor()
    else:
        imprime_mensagem_perdedor(palavra_secreta)

    print("Fim do jogo")


def imprime_abertura():

    print("*****************************")
    print("***Bem vindo ao jogo forca***")
    print("*****************************")
    print("                             ")
    print("______________________")
    print("  |", "               |")
    print("  |", "               ()")
    print("  |")
    print("  |")
    print("  |")
    print("______")


def carrega_palavra_secreta():

    arquivo = open("palavras.txt", "r")
    palavras = []

    for linha in arquivo:
        linha = linha.strip()
        palavras.append(linha)

    arquivo.close()

    numero = random.randrange(0, len(palavras))
    palavra_secreta = palavras[numero].upper()

    return palavra_secreta

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

def inicializa_letras_acertadas():
    return ["_" for letra in palavra_secreta]

2 respostas
solução!

Tirando adicionar o resto dos métodos faltantes (imprime_mensagem_vencedor, imprime_mensagem_perdedor, desenha_forca e pede_chute), fiz duas correções e o seu código funcionou aqui:

def inicializa_letras_acertadas(palavra_secreta):
    return ["_" for letra in palavra_secreta]

para eliminar o erro que você anexou.

E:

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

para corrigir a marcação da letra. Nessa parte o erro estava no alinhamento do index += 1, que estava dentro do bloco if.

Puuuuuutz, safado esse index kkkkkk, muito obrigado queridão!Até tinha dito sobre adicionar a palavra secreta lá no def, mas achei que tava errado! Obrigadão