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

Tracinhos sumindo

Não sei o que está acontecendo, mas aleatoriamente quando inicio o programa os tracinhos não aparecem, somente os colchetes. E aí quando se digita qualquer letra vai direto para o você acertou. Está acontecendo quando acerto a palavra. A próxima janela já vem sem traços, somente colchetes.

A janela está assim:

C:\Users\Fábio\PycharmProjects\pythonProject\venv\Scripts\python.exe C:\Users\Fábio\PycharmProjects\pythonProject\games\Forca.py 
*********************************
***Bem vindo ao jogo da Forca!***
*********************************
[]
QUAL LETRA?

Digito qq letra e vai direto para o você acertou. E quando carrego novamente fica normal, como abaixo:

C:\Users\Fábio\PycharmProjects\pythonProject\venv\Scripts\python.exe C:\Users\Fábio\PycharmProjects\pythonProject\games\Forca.py 
*********************************
***Bem vindo ao jogo da Forca!***
*********************************
['_', '_', '_', '_', '_']
QUAL LETRA?

O código está assim:

import random

def jogar():

    imprime_mensagem_de_abertura()
    palavra_secreta = carrega_palavra_secreta()

    letras_acertadas = inicializa_letras_acertadas(palavra_secreta)
    print(letras_acertadas)

    enforcou = False
    acertou = False
    erros = 0

    while(not enforcou and not acertou):

        chute = pede_chute()

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

        desenha_forca(erros)

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

        print("Restam ", 6 - erros , "Tentativas")

    if(acertou):
        imprime_mensagem_ao_vencedor()

    else:
        imprime_mensagem_ao_perdedor(palavra_secreta)

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_ao_perdedor(palavra_secreta):
    print("Puxa, você foi enforcado!")
    print("A palavra era {}".format(palavra_secreta))
    print("    _______________         ")
    print("   /               \       ")
    print("  /                 \      ")

    print("     \_         _/         ")
    print("       \_______/           ")


def imprime_mensagem_ao_vencedor():
    print("Parabéns, você ganhou!")
    print("       ___________      ")
    print("      '._==_==_=_.'     ")

    print("        '-------'       ")
    print("VOCÊ GANHOU! AÊÊêÊ!!!!")

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

def pede_chute():
    chute = input("QUAL LETRA?")
    chute = chute.strip().upper()
    return chute

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

def imprime_mensagem_de_abertura():
    print("*********************************")
    print("***Bem vindo ao jogo da Forca!***")
    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

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

Cortei parte das imagens pq não cabia. Só deixei os espaços.

Obrigado

2 respostas
solução!

Olá Ricardo, tudo bem com você?

O código apresentado está funcionando conforme o esperado, sem a apresentação de erros.

Com base no log apresentado e por simulações que fiz, a um indício de que no arquivo palavras.txt possui uma ou mais linhas em branco. As linhas em branco fazem com que durante a execução do arquivo Forca.py uma delas possam ser selecionada como a palavra secreta, assim, não correrá o preenchimento com os underlines (_), já que a linha não possui um conteúdo, apresentando apenas o colchete ([ ]) no momento da execução.

  • Peço que verifique se o arquivo palavras.txt possui uma ou mais linhas em branco, caso tenha, remova-as.

  • Salve o arquivo.

  • Logo após execute novamente o arquivo Forca.py verificando se obtém êxito.

Fico à disposição em caso de dúvidas.

Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Resolvido!Obrigado!