2
respostas

[Bug] Forca.py se aberto fora do pycharm não funciona

O meu "Jogos.py" tá perfeito, o "Advinhacao.py" tbm, mas se tento abrir o Forca.py pelo File Explorer ele simplismente fica ou com a tela preta ou abre e fecha rápido.

import random
def play():
    # Abertura do Game
    print("**************")
    print("Jogo da forca!")
    print("**************\n")

    # Palavra aleatória
    arquivo = open("palavras.txt", "r")
    palavras = []
    for linha in arquivo:
        palavras.append(linha.strip())
    arquivo.close()
    sorte = random.randint(0, len(palavras)-1)

    # Formata a palavra aleatória e
    palavra_secreta = palavras[sorte].upper()
    letras_acertadas = ["_" for letras in palavra_secreta]

    # Variáveis
    enforcou = False
    acertou = False
    erros = 0

    # Número de letras da palavra aleatória
    print(' '.join(letras_acertadas))

    # Enquanto não esgotar as tentativas e acertar a palavra, repetir a sequencia dentro do while
    while(not enforcou and not acertou ):
        chute = input("Qual letra? ")
        chute = chute.strip().upper()

        # Uso do for baseado em número de tentativas para que sejam recebidos os chutes, possuindo o index como local das letras em sequência
        if (chute in palavra_secreta):
            index = 0
            for letra in palavra_secreta:
                if(chute == letra):
                    letras_acertadas[index] = letra
                index += 1
        else:
            erros += 1
            print("Ops, você errou! Faltam {} tentativas.".format(6 - erros))

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


        print("Jogando...")

    if(acertou):
        print("Você ganhou!!!")

    else:
        print("Você perdeu!")

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

Shell todo preto

2 respostas

Olá, Vinícius!

Pelo que entendi, o seu código da forca.py está funcionando corretamente quando você o executa no PyCharm, mas quando tenta abrir o arquivo fora do PyCharm, ele não funciona corretamente, ficando com a tela preta ou abrindo e fechando rapidamente.

Isso pode estar acontecendo porque o programa está sendo executado no prompt de comando e, quando termina a execução, o prompt fecha automaticamente. Para resolver esse problema, você pode adicionar um input no final do código, para que o prompt não feche até que você pressione alguma tecla.

Você pode adicionar o seguinte código no final do seu arquivo forca.py:

input("Pressione Enter para sair...")

Dessa forma, o prompt de comando ficará aberto após a execução do código, permitindo que você veja a saída do programa.

Bons estudos!

Boa noite amigo, tentei mas não deu certo :( Sabe outra possível solução?

import random

def play():

    # Abertura e sorteio da palavra
    imprime_abertura()
    palavra_secreta = carrega_palavra_secreta()

    #Número de caracteres da forca
    letras_acertadas = ["_" for letras in palavra_secreta]
    print(' '.join(letras_acertadas))

    # Variáveis
    enforcou = False
    acertou = False
    erros = 0


    # Enquanto não esgotar as tentativas e acertar a palavra, repetir a sequencia dentro do while
    while(not enforcou and not acertou ):

        chute = pede_chute()

        # Uso do for baseado em número de tentativas para que sejam recebidos os chutes, possuindo o index como local das letras em sequência
        if (chute in palavra_secreta):
            marca_acerto(chute,letras_acertadas,palavra_secreta)
        else:
            erros += 1
            print("\nOps, você errou! Faltam {} tentativas.\n".format(7 - erros))
            boneco_forca(erros)

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

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

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

    input("\npressione enter")

# Abertura do Game
def imprime_abertura():
    print("**************")
    print("Jogo da forca!")
    print("**************\n")

# Carrega palavra aleatória
def carrega_palavra_secreta():
    arquivo = open("palavras.txt", "r")
    palavras = []
    for linha in arquivo:
        palavras.append(linha.strip())
    arquivo.close()
    sorte = random.randint(0, len(palavras) - 1)
    palavra_secreta = palavras[sorte].upper()
    return palavra_secreta

def pede_chute():
    chute = input("Qual letra? ")
    chute = chute.strip().upper()
    return chute

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

def boneco_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()

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