Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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!