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

Erro na linha 58

Olá pessoal! Estou com problemas na linha da função "marca_chute_correto" dentro da condição if(chute in palavra_secreta). Ele diz que os valores que passo dentro dos parenteses não são necessários mas ele são.

import random

def jogar ():

# DECLARAÇÃO DE FUNÇÕES:
    def imprime_mensagem_abertura():
        print("-" * 40)
        print("Bem vindo(a) a forca!!!")
        print("-" * 40)

    def carrega_palavra_secreta():
        palavras = []
        with open("palavras.txt") as arquivo:
            for linha in arquivo:
                linha = linha.strip()
                palavras.append(linha)
            numero = random.randrange(0, len(palavras))
            palavra_secreta = palavras[numero].upper()
            return palavra_secreta

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

    def pede_chute():
        chute = input("Letra: ")
        chute = chute.upper().strip()
        return chute

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

    def imprime_mensagem_vencedor():
        print("Você Ganhou!")

    def imprime_mensagem_perdedor():
        print("Você Perdeu!")
#=====================================================CÓDIGO===========================================================

    imprime_mensagem_abertura()
    palavra_secreta = carrega_palavra_secreta()

    letras_acertadas = inicializa_letras_acertadas()
    print(letras_acertadas)

    acertou = False
    enforcou = False
    erros = 0

    while(not enforcou and not acertou):

        chute = pede_chute()

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

        enforcou = erros == 6
        acertou = "_" not in letras_acertadas

        print(letras_acertadas)

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


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

Ah! Não sei pq se eu colocar as funções na parte de baixo do script, elas não funcionam.. Elas estão corretas com relação a posição da chamada da função "if(name == "main"): jogar()". Estou usando o py 3.8 Alguém pode me dar uma luz? Desde já, agradeço :)

3 respostas
solução!

O problema é que na definição da função, você não disse que estava esperando esses valores. Veja:

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

E dentro da função, você está usando o que passa. Então , a função deveria ser declarada assim:

    def marca_chute_correto(palavra_secreta, chute, letras_acertadas):

Obrigado Leandro! Deu certo (Y)

Então marca como respondido aí que eu ganho pontos! :)