2
respostas

Erro no código do Jogo de Forca

Olá! Meu jogo de forca está dando um erro. Ele coloca uma casa a mais de '_' do que deveria, impossibilitando o jogador de acertar a palavra secreta.

Conferi passo a passo o meu código com o código do Nico três vezes mas parece igual (com exceção de alguns nomes que estão diferentes). Enfim, não encontro o erro. Estou usando o .split() para tirar o \n do final de cada palavra, será que ele não está funcionando?

Se alguém puder dar uma conferida no meu código agradeço.

Abraços

import random


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

    letras_acertadas = iniciliza_letras_acertadas(palavra_secreta)
    imprime_letras_acertadas(letras_acertadas)

    enforcou = False
    acertou = False
    erros = 0

    while not enforcou and not acertou:

        chute = pede_chute()

        if chute in palavra_secreta:
            chute_na_posicao_correta(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 desenha_forca(erros):
    print("  _______     ")
    print(" |/      |    ")

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

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

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

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

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

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

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

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

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

def imprime_mensagem_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 pede_chute():
    chute = input("Tente acertar uma letra: ")
    chute = chute.strip().lower()
    return chute

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

def mensagem_abertura():
    print("*" * 40)
    print("Bem vindo ao jogo de Forca!")
    print("*" * 40)

def carrega_palavra_secreta():
    arquivo = open("frutas.txt", "r")
    frutas = []
    for fruta in arquivo:
        fruta.strip()
        frutas.append(fruta)
    arquivo.close()

    numero = random.randrange(0, len(frutas))
    palavra_secreta = frutas[numero].lower()
    return palavra_secreta

def iniciliza_letras_acertadas(palavra_secreta):
     return ['_' for letra in palavra_secreta]

def imprime_letras_acertadas(letras_acertadas):
    print(f"A palavra secreta tem {(len(letras_acertadas))} letras.")


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

Olá Jaqueline,

Tem um pequeno detalhe faltando na sua função carrega_palavra_secreta().

Aqui você está utilizando o .strip() para remover o espaço no final (a quebra de linha), mas o seu valor não está sendo salvo, onde tem fruta.strip() o correto seria fruta = fruta.strip(), pois o strip não altera o valor de fruta ele retorna um novo valor alterado.

Qualquer dúvida é só falar!

for fruta in arquivo: fruta.strip() frutas.append(fruta) arquivo.close()

Nessa parte o fruta.strip() não está sendo atribuido a variável fruta. Faça: fruta = fruta.strip()

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