15
respostas

ajuda! meu código roda de começo, mas quando digito alguma letra ele da erro.

import random


def jogar():
    imprime_mensagem_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_correto(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)


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

def carrega_palavra_secreta():
    arquivo = open(r"C:\Users\arthu\PychamProjects\jogos\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()
15 respostas

Dei um ctrl+c e um ctrl+v no codigo que foi passado no final do curso, pois o meu n estava funcionando. Eu arrumei a palavra.txt que no meu nao funcionava tambem e mesmo assim esta dando erro nesse codigo, n =ao sei o que fazer.

Olá Fillipe, tudo bem com você?

Realizando o teste com o código postado, ele funcionou corretamente quando informado as letras das palavras não apresentou erro. Deixo abaixo algumas perguntas com o objetivo de conhecer melhor o que está acontecendo e assim poder te auxiliar da melhor forma possível.

  • O código do arquivo jogos.py está conforme apresentado na aula?

    • O proposto na aula o arquivo forca.py será executado a partir do arquivo jogos.py, você pode baixar nesse link os arquivos do curso, para que possa ser realizado a conferência.
  • O nome do arquivo está correto?

    • No código é buscado o arquivo palavras.txt, na sua segunda mensagem foi informado que o arquivo possuia o nome palavra.txt, peço que confirme o nome do arquivo buscado, deixando igual nos dois locais.
  • Qual o erro apresentado?

    • No momento em que aparece o erro poderia me enviar a mensagem de erro? No Python por padrão os erros possuirão o sufixo Error, por exemplo: IndentationError.
  • Poderia enviar uma print da tela completa no momento do erro?

    • Assim podemos analisar com mais detalhes como está sendo realizada a execução do código.

Relembrando que os pontos abordados acima possuem o objetivo de conhecer um pouco mais do que está acontecendo, para que eu possa te auxiliar.

Fico no aguardo e à disposição.

Abraços e bons estudos.

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

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeEsses são os erros que aparecem.

antes esse r"C:\Users\arthu\PychamProjects\jogos\palavras.txt", "r" estava funcionando normalmente, mas depois que eu copiei o código passado no final do curso ele não funciona mais.

Olá Fillipe, tudo bem com você?

Agradeço pelo retorno com os detalhes do que está acontecendo.

O erro (FileNotFoundError) apresentado está aparecendo por não ter sido encontrado o arquivo para ser aberto pela não existência do arquivo ou o Pycharm devido a erro interno não consegue reconhecer o caminho.

  • Peço que troque as contrabarras () utilizadas para informar o caminho por barras (/). Utilizando o caminho da seguinte forma.
arquivo = open(r"C:/Users/arthu/PychamProjects/jogos/palavras.txt","r")

Faça o teste do código após efetuar a troca.

Caso a abordagem acima não obtenha sucesso. Podemos recriar o arquivo palavras.txt no mesmo diretório do arquivo forca.py e modificar o código informando que o arquivo está no mesmo diretório.

Criando o arquivo palavras.txt

  • Copie as palavras que estão salvas dentro do arquivo palavras.txt atual.

  • Exclua o arquivo palavras.txt.

  • Dentro do Pycharm, clique com o botão direito no arquivo forca.py e coloque o ponteiro do mouse em New e clique em File.

  • Na janela que será aberta, escreva o nome do arquivo com a extensão, nesse caso escreva palavras.txt e pressione enter.

  • O arquivo será aberto dentro do Pycharm, cole as palavras nesse arquivo.

    Início da transcrição. Imagem da tela do Pycharm com cores em tons de cinza, nessa imagem temos a esquerda da tela o menu de contexto que é aberto após clicarmos com o botão direito em cima do arquivo forca.py; nesse menu de contexto temos um destaque utilizando um retângulo vermelho, destacando a primeira opção do menu de contexto de nome New e destacando no menu de contexto aberto a partir da opção New a opção File. Final da transcriçã.

Modificação do arquivo forca.py

  • No arquivo forca.py iremos modificar o uso da função open() presente na função carrega_palavra_secreta, informaremos apenas o nome do arquivo, sem informar o caminho completo. Como apresentado abaixo:

    def carrega_palavra_secreta():
      arquivo = open(r"palavras.txt", "r")
      palavras = []

Peço que teste o proposto acima, dessa forma criaremos o arquivo com as palavras no mesmo diretório que está o arquivo Python que faz seu uso. Por isso não informamos o caminho completo para o arquivo.

Caso continue apresentando erro, peço que envie uma print com a tela completa do Pycharm, para que possa ser analisado a disposição dos arquivos no seu projeto

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

Abraços e bons estudos.

Boa tarde! Fiz as mudanças sugeridas, mas mesmo assim continua o erro.


import random


def jogar():
    imprime_mensagem_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_correto(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)


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

def carrega_palavra_secreta():
    arquivo = carrega_palavra_secreta(r"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()

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Fiz as alterações que me foi pedido em ralação ao código: arquivo = open(r"C:/Users/arthu/PychamProjects/jogos/palavras.txt","r"), porem mesmo assim não funcionou então eu exclui e criei uma nova para a palavras.txt e mesmo assim não funcionou. Consegue me ajudar novamente?

Olá Fillipe, tudo bem com você?

O erro apresentado é um erro de tipo (TypeError) é um erro novo, ele está acontecendo devido a chamada da função carrega_palavra_secreta no lugar da função open. Pela minha referência, a mudança deverá ocorrer na linha 148.

Na função carrega_palavra_secreta troque a seguinte linha:

  • arquivo = carrega_palavra_secreta(r"palavras.txt", "r")

Por:

  • arquivo = open(r"palavras.txt", "r")

A função open será responsável por abrir o arquivo palavras.txt.

A função carrega_palavra_secreta deverá ficar conforme abaixo:

def carrega_palavra_secreta():
    arquivo = open(r"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

Fico à disposição.

Abraços e bons estudos.

Mesmo depois desse ajuste o erro continua. O que eu acho estranho é que ele estava funcionando, mas logo depois deu um erro e eu copiei o que vocês passam no final no projeto, em seguida nunca mais funcionou.

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeO problema é que aparece 3 erros e continua nisso.

Acabei de testar algo. Tentei executar o código no console pelo pycharm e funcionou, vocês saberiam o motivo?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade E se eu colocar no jogos que aparece para escolher o jogo, entre "Forca" ou "Adivinhação" ele roda normalmente também.

Oii Fillipe!

Fico feliz que esteja funcionando. Como teve diversas alterações no código, e no seu ambiente, é incerto dizer o motivo que levou a resolução. Mas fique tranquilo, não será a primeira vez que o código se corrigirá "automaticamente" ou para de funcionar "do nada", isso realmente pode acontecer no dia a dia de nós programadores, e quando acontecer, tentamos investigar a causa, refazer o código em outra pasta, excluir temporariamente algum arquivo, reiniciar a IDE ou até mesmo refatorar certos trechos para chegar a uma solução.

Continue contando com a comunidade do fórum.

Abraços!

Obrigado pelo apoio!