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

[Dúvida] Erro decrementar tentativas

As tentativas (7) fazem o contrário, não se relaciona com o desenha_forca()


import random


def jogar():
    imprime_msg_abertura()
    palavra_secreta = carrega_palavra_secreta()

    palavras_acertadas = inicializa_letras_acertadas(palavra_secreta)
    print(palavras_acertadas)


    #acertou = False

    tentativas = 7
    print(f"Você tem {tentativas} tentativas para encontrar a palavra")
    #while (not acertou and not enforcou):
    while (tentativas > 0):

        chute = pede_chute()

        if (chute in palavra_secreta):
            marca_chute_correto(chute, palavra_secreta, palavras_acertadas)

        else:
            print(f"Letra não existe na palavra, você ainda possui {tentativas - 1} tentativas")
            tentativas -= -1
            desenha_forca(tentativas)

        print(palavras_acertadas)

    if ("_" not in palavras_acertadas):
        msg_vencedor()
    elif(tentativas == 0):
        msg_perdedor(palavra_secreta)


# FUNÇÕES

def imprime_msg_abertura():
    print('-=-' * 20)
    print('#' * 7, "Bem vindo ao jogo da Forca!", '#' * 7)
    print('-=-' * 20)


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()
    print("A palavra tem {} letras".format(len(palavra_secreta)))

    return palavra_secreta


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


def pede_chute():
    chute = input("DIGITE UMA LETRA: ")  # ENTRADA LETRA
    chute = chute.strip().upper()
    return chute


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


def msg_vencedor():
    print("Parabéns, você ganhou!")
    print("       ___________      ")
    print("      '._==_==_=_.'     ")
    print("      .-\\:      /-.    ")
    print("     | (|:.     |) |    ")
    print("      '-|:.     |-'     ")
    print("        \\::.    /      ")
    print("         '::. .'        ")
    print("           ) (          ")
    print("         _.' '._        ")
    print("        '-------'       ")


def msg_perdedor(palavra_secreta):
    print("Puxa, você foi enforcado!")
    print("A palavra era {}".format(palavra_secreta))
    print("    _______________         ")
    print("   /               \       ")
    print("  /                 \      ")
    print("//                   \/\  ")
    print("\|   XXXX     XXXX   | /   ")
    print(" |   XXXX     XXXX   |/     ")
    print(" |   XXX       XXX   |      ")
    print(" |                   |      ")
    print(" \__      XXX      __/     ")
    print("   |\     XXX     /|       ")
    print("   | |           | |        ")
    print("   | I I I I I I I |        ")
    print("   |  I I I I I I  |        ")
    print("   \_             _/       ")
    print("     \_         _/         ")
    print("       \_______/           ")


def desenha_forca(tentativas):
    print("  _______     ")
    print(" |/      |    ")

    if (tentativas == 1):
        print(" |      (_)   ")
        print(" |            ")
        print(" |            ")
        print(" |            ")

    if (tentativas == 2):
        print(" |      (_)   ")
        print(" |      \     ")
        print(" |            ")
        print(" |            ")

    if (tentativas == 3):
        print(" |      (_)   ")
        print(" |      \|    ")
        print(" |            ")
        print(" |            ")

    if (tentativas == 4):
        print(" |      (_)   ")
        print(" |      \|/   ")
        print(" |            ")
        print(" |            ")

    if (tentativas == 5):
        print(" |      (_)   ")
        print(" |      \|/   ")
        print(" |       |    ")
        print(" |            ")

    if (tentativas == 6):
        print(" |      (_)   ")
        print(" |      \|/   ")
        print(" |       |    ")
        print(" |      /     ")

    if (tentativas == 7):
        print(" |      (_)   ")
        print(" |      \|/   ")
        print(" |       |    ")
        print(" |      / \   ")

    print(" |            ")
    print("_|___         ")
    print()


if (__name__ == "__main__"):
    jogar()
1 resposta
solução!

Oi amigo, boa noite!

Estava passando pelo fórum...acabei de ver seu post. No caso, o seu problema aí, é porque, para que a função do desenho da forca funcione, você precisa de uma váriavel de controle que some um, a medida que você erre, e não que diminua. Observe que o valor de "tentativa" é sempre maior, para que o desenho evolua. Então no caso você precisaria de mais uma variável de controle no seu código para que essa linha:

print(f"Você tem {tentativas} tentativas para encontrar a palavra")

e essa:

print(f"Letra não existe na palavra, você ainda possui {tentativas - 1} tentativas")

funcionem da forma que você quer.

Crie mais uma variável para passar como parâmetro para a função desenha_forca, e sempre some um a medida que você errar. Veja como fica:

def jogar(): imprime_msg_abertura() palavra_secreta = carrega_palavra_secreta()

palavras_acertadas = inicializa_letras_acertadas(palavra_secreta)
print(palavras_acertadas)


#acertou = False

tentativas = 7
erros = 0
print(f"Você tem {tentativas} tentativas para encontrar a palavra")
#while (not acertou and not enforcou):
while (tentativas > 0):

    chute = pede_chute()

    if (chute in palavra_secreta):
        marca_chute_correto(chute, palavra_secreta, palavras_acertadas)

    else:
        print(f"Letra não existe na palavra, você ainda possui {tentativas - 1} tentativas")
        tentativas -= 1
        erros += 1
        desenha_forca(erros)

    print(palavras_acertadas)

if ("_" not in palavras_acertadas):
    msg_vencedor()
elif(tentativas == 0):
    msg_perdedor(palavra_secreta)

Assim funciona beleza. E lembra de criar todas as funções antes de chamar a def jogar(), para que ele já rode conhecendo as outras, senão você também pode ter erros de execução.

Espero ter te ajudado. Um abraço!