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

[Dúvida] Erro na inicialização do jogo

Olá, boa tarde! Tudo bem?

Meu código esta dando erro ele apresenta o seguinte erro:

Traceback (most recent call last):
  File "/Users/frois/Library/CloudStorage/GoogleDrive-juan.frois9@gmail.com/Meu Drive/Estudos/JuanFrois/Cursos/Alura/BackEnd/Python/CriandoJogos/Jogos/JogoForca/JogoForca.py", line 126, in <module>
    jogar()
  File "/Users/frois/Library/CloudStorage/GoogleDrive-juan.frois9@gmail.com/Meu Drive/Estudos/JuanFrois/Cursos/Alura/BackEnd/Python/CriandoJogos/Jogos/JogoForca/JogoForca.py", line 26, in jogar
    arquivo = open('JogoForca/PalavrasSecrestas/Infantil.txt', "r")
FileNotFoundError: [Errno 2] No such file or directory: 'JogoForca/PalavrasSecrestas/Infantil.txt'

Veriquei novamente o código e não estou conseguindo identificar o erro, coloco abaixo todo o meu código:

import random
import PalavrasSecrestas

def jogar():
    print("********************************")
    print("Seja bem-vindo ao jogo da forca!")
    print("********************************")

    chances = 0

    # Dificuldades:
    infantil = 1
    facil = 2
    media = 3
    dificil = 4

    print("Por favor informe a dificuldade que deseja jogar - Basta informar o número")
    nivel = int(input("(1) Infantil/Criança (2) Fácil  (3) Medio (4) Dificil: "))

    if (nivel == 1):
        chances = 100
        arquivo = open(JogoForca/PalavrasSecrestas/Infantil.txt, "r")
        Infantil = []
        for linha in arquivo:
            linha = linha.strip()
            infantil.append(linha)
        arquivo.close()
        numero = random.randrange(0, len(infantil))
        palavra_secreta = infantil[numero].upper()

        print("Você seleciou a dificuldade fácil e terá {} chances".format(chances))

    elif (nivel == 2):
        chances = 25
        with open("Faceis.txt", "r") as arquivoFacil:
            palavra = []
            for palavra in arquivoFacil:
                linha = linha.strip()
                palavra.append(linha)
        numero = random.randrange(0, len(palavra))
        palavra_secreta = palavra[numero].upper()
        print("Você seleciou a dificuldade fácil e terá {} chances".format(chances))

    elif (nivel == 3):
        chances = 20
        with open("Media.txt", "r") as arquivoMedia:
            palavra = []
            for palavra in arquivoMedia:
                linha = linha.strip()
                palavra.append(linha)
        numero = random.randrange(0, len(palavra))
        palavra_secreta = palavra[numero].upper()
        print("Você seleciou a dificuldade média e terá {} chances".format(chances))

    elif (nivel == 4):
        chances = 15
        with open("PalavrasSecrestas.Dificeis.txt", "r") as arquivoDificil:
            palavra = []
            for palavra in arquivoDificil:
                linha = linha.strip()
                palavra.append(linha)
        numero = random.randrange(0, len(palavra))
        palavra_secreta = palavra[numero].upper()
        print("Você seleciou a dificuldade difícil e terá {} chances".format(chances))

    else:
        print("Você digitou uma dificuldade diferente das opções, por favor digite novamente!")

    letras_acertadas = ["_" for letra in palavra_secreta]

    enforcou = False
    acertou = False
    erros = 0
    print(letras_acertadas)

    while (not enforcou and not acertou):
        chute = input("Informe a letra que gostaria de jogar:")
        chute = chute.strip().upper()

        if (chute in palavra_secreta):
            index = 0
            for letra in palavra_secreta:
                if (chute.upper() == letra.upper()):
                    letras_acertadas[index] = letra

                index += 1
        else:
            chances -= 1
            print("Você errou, esta letra não pertence a palavra, você possui {} chances".format(chances))
        enforcou = chances == 0
        acertou = "_" not in letras_acertadas

        print(letras_acertadas)

        ##if(chances != 0):
        ##print("Continue tentando")

        ##else:(chances != 0):

        ##else:
        ##print("Não foi dessa vez")

        if (enforcou):
            print("Você perdeu, tente de novo")

        elif (acertou):
            print("Continue jogando")

        else:
            print("Você ganhou")

    print("************")

    print("Fim de jogo!")

    print("************")


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

Adiciono também imagens do meu projeto, de como esta organizado as pastas: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Em cada arquivo dentro da pasta "PalavrasSecretas", possui informações dentro dela. Podem me ajudar?

Atenciosamente.,

8 respostas

Olá, Juan! Espero que esteja tudo bem.

Analisando o erro e o código que você compartilhou, parece que o problema está no caminho do arquivo que você está tentando abrir. O erro FileNotFoundError indica que o Python não conseguiu encontrar o arquivo no caminho especificado.

No trecho do seu código:

arquivo = open('JogoForca/PalavrasSecrestas/Infantil.txt', "r")

Você está tentando abrir o arquivo Infantil.txt dentro da pasta JogoForca/PalavrasSecrestas, mas pelo que posso ver na imagem que você compartilhou, a estrutura das pastas está um pouco diferente. A pasta JogoForca está dentro de Jogos, que por sua vez está dentro de CriandoJogos.

Para corrigir o problema, você precisa ajustar o caminho do arquivo para refletir a estrutura correta das pastas. Além disso, você precisa adicionar aspas no caminho do arquivo para que o Python interprete como uma string. Veja como ficaria o caminho correto:

arquivo = open('Jogos/JogoForca/PalavrasSecrestas/Infantil.txt', "r")

Além disso, reparei que você importou um módulo chamado PalavrasSecrestas, mas ele não é utilizado no código. Se você tiver funções ou dados nesse módulo que deseja usar, lembre-se de chamá-los corretamente no seu código.

Por fim, após realizar essas correções, seu código deve funcionar corretamente. Lembre-se de ajustar os caminhos para os outros níveis de dificuldade também, seguindo a mesma lógica.

Espero ter ajudado e bons estudos!

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

Olá Armano, boa tarde!

Agradeço pelo retorno.

Realizei os ajustes dentro do meu código, contudo o erro persiste tive mais um erro, segue abaixo:

  File "/Users/frois/Library/CloudStorage/GoogleDrive-juan.frois9@gmail.com/Meu Drive/Estudos/JuanFrois/Cursos/Alura/BackEnd/Python/CriandoJogos/Jogos/EscolhaJogo.py", line 29, in <module>
    escolha_jogo()
  File "/Users/frois/Library/CloudStorage/GoogleDrive-juan.frois9@gmail.com/Meu Drive/Estudos/JuanFrois/Cursos/Alura/BackEnd/Python/CriandoJogos/Jogos/EscolhaJogo.py", line 20, in escolha_jogo
    JogoForca.JogoForca.jogar()
  File "/Users/frois/Library/CloudStorage/GoogleDrive-juan.frois9@gmail.com/Meu Drive/Estudos/JuanFrois/Cursos/Alura/BackEnd/Python/CriandoJogos/Jogos/JogoForca/JogoForca.py", line 26, in jogar
    arquivo = open('Jogos/JogoForca/PalavrasSecrestas/Infantil.txt', "r")
FileNotFoundError: [Errno 2] No such file or directory: 'Jogos/JogoForca/PalavrasSecrestas/Infantil.txt'

Seguem restante dos códigos:

  1. Escolha o jogo:
import JogoForca.JogoForca


def escolha_jogo():

    print("Bem-vindo ao menu incial!")

    print("Por favor, escolha seu jogo:")

    forca = 1
    adivinhacao = 2

    jogo = int(input("(1) Forca (2) Adivinhação - Informe apenas o número: "))

    print("Jogo selecionado foi: {}" .format(jogo))

    if(jogo == 1):
        print("Jogo da forca:")
        JogoForca.JogoForca.jogar()
    elif(jogo == 2):
        print("Jogo adivinhação:")
        JogoAdivinhacao.JogoAdivinhacao.jogar()

    else:
        print("O número selecionado não corresponde aos jogos disponíveis")

if (__name__ == "__main__"):
    escolha_jogo()
  1. Jogo adivinhação:
import random

def jogar():
    print("******************************************************************************")
    print("Boas vinda ao nosso jogo de adivinhação, aqui você terá uma experiência única)")
    print("******************************************************************************")

    numeroSorteado = random.randrange(1, 101)
    chances = 0
    pontos = 1000

    print("Por favor informe o nível que você gostaria de jogar:")
    print("(1) Fácil (2) Médio (3) Difícil - Basta digitar o número que deseja!")
    nivel = int(input("Informe o nível: "))

    if (nivel == 1):
        chances = 20
    elif (nivel == 2):
        chances = 10
    else:
        chances = 5
        
    for rodada in range(1, chances + 1):
        print("Tentativa {} de {}".format(rodada, chances))
        tentativa = int(input("Por favor digite seu número entre 1 e 100: "))
        print("Você digitou: ", tentativa)

        if (tentativa < 1 or tentativa > 100):
            print("Você digitou um número diferente do pedido, por favor digite um número entre 1 e 100")
            continue
        
        acertou = tentativa == numeroSorteado
        maior = tentativa > numeroSorteado
        menor = tentativa < numeroSorteado

        if (acertou):
            print("Você acertou! Meus parabéns! Você ganhou {} pontos!)".format(pontos))
            break
        else:
            if (maior):
                print("O número digitado foi maior que o número da sorte definido")
            elif (menor):
                print("O número digitado foi menor que o número da sorte definido")

            calculo_pontuacao = abs(numeroSorteado - tentativa)
            pontos = pontos - calculo_pontuacao

    print("Fim do jogo meus queridos!")

if (__name__ == "__main__"):
   jogar()
  1. Coloco novamente o código do Jogo da forca:
import random

def jogar():
    print("********************************")
    print("Seja bem-vindo ao jogo da forca!")
    print("********************************")

    chances = 0

    infantil = 1
    facil = 2
    media = 3
    dificil = 4

    print("Por favor informe a dificuldade que deseja jogar - Basta informar o número")
    nivel = int(input("(1) Infantil/Criança (2) Fácil  (3) Medio (4) Dificil: "))

    if (nivel == 1):
        chances = 100
        arquivo = open('Jogos/JogoForca/PalavrasSecrestas/Infantil.txt', "r")
        Infantil = []
        for linha in arquivo:
            linha = linha.strip()
            infantil.append(linha)
        arquivo.close()
        numero = random.randrange(0, len(infantil))
        palavra_secreta = infantil[numero].upper()

        print("Você seleciou a dificuldade fácil e terá {} chances".format(chances))

    elif (nivel == 2):
        chances = 50
        arquivo = open('Jogos/JogoForca/PalavrasSecrestas/Faceis.txt', "r")
        Faceis = []
        for linha in arquivo:
            linha = linha.strip()
            Faceis.append(linha)
        arquivo.close()
        numero = random.randrange(0, len(Faceis))
        palavra_secreta = infantil[numero].upper()
        print("Você seleciou a dificuldade fácil e terá {} chances".format(chances))

    elif (nivel == 3):
        chances = 45
        arquivo = open('Jogos/JogoForca/PalavrasSecrestas/Media.txt', "r")
        Media = []
        for linha in arquivo:
            linha = linha.strip()
            Media.append(linha)
        arquivo.close()
        numero = random.randrange(0, len(Media))
        palavra_secreta = infantil[numero].upper()
        print("Você seleciou a dificuldade média e terá {} chances".format(chances))

    elif (nivel == 4):
        chances = 30
        arquivo = open('Jogos/JogoForca/PalavrasSecrestas/Dificeis.txt', "r")
        Dificeis = []
        for linha in arquivo:
            linha = linha.strip()
            Dificeis.append(linha)
        arquivo.close()
        numero = random.randrange(0, len(Dificeis))
        palavra_secreta = infantil[numero].upper()
        print("Você seleciou a dificuldade difícil e terá {} chances".format(chances))

    else:
        print("Você digitou uma dificuldade diferente das opções, por favor digite novamente!")


    letras_acertadas = ["_" for letra in palavra_secreta]

    enforcou = False
    acertou = False
    erros = 0
    print(letras_acertadas)

    while (not enforcou and not acertou):
        chute = input("Informe a letra que gostaria de jogar:")
        chute = chute.strip().upper()

        if (chute in palavra_secreta):
            index = 0
            for letra in palavra_secreta:
                if (chute.upper() == letra.upper()):
                    letras_acertadas[index] = letra

                index += 1
        else:
            chances -= 1
            print("Você errou, esta letra não pertence a palavra, você possui {} chances".format(chances))
        enforcou = chances == 0
        acertou = "_" not in letras_acertadas

        print(letras_acertadas)

        if (enforcou):
            print("Você perdeu, tente de novo")

        elif (acertou):
            print("Continue jogando")

        else:
            print("Você ganhou")

    print("************")

    print("Fim de jogo!")

    print("************")


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

O erro só acontece quando testo o jogo da forca, quando rodo o teste com o "EscolhaJogo" e seleciono "JogoAdivinhacao" ele roda normalmente. Pode me ajudar?

Obrigado pela atenção e disponibilidade.

Atenciosamente.,

Opa, Juan! Peço desculpa pela demora em respondê-lo.

Fiz alguns testes com os códigos que você compartilhou e identifiquei porque o problema apenas ocorria quando você testava o código do Jogo da Forca.

Como a função open trabalha diretamente com o sistema do seu computador, para a leitura, escrita e atualização de arquivos, ela também tem que seguir a estruturação interna do sistema de pasta, e no Windows, o caminho de pastas tem como separador o contra-barra "" e não o barra "/".

Além disso, para esse tipo de método acaba sendo necessário passar a referência do caminho absoluto para o arquivo. Você pode encontrar essa caminho absoluto clicando no arquivo com o botão direito do mouse e procurando pela opção "copy path/reference" e depois selecionando "Absolute Path", como no gif abaixo:

Gif que mostra os passos comentados anteriormente

Por fim, acaba sendo necessário adicionar mais um contra-barra acada caminho de pasta, pois um contra-barra juntamente com algumas letras podem ser reconhecidos como uma expressão regular, então o seu link na função open deve estar mais ou menos assim:

arquivo = open('C:\\Users\\YouUser\\Documents\\Python\\CriandoJogos\\Jogos\\JogoForca\\PalavrasSecrestas\\Infantil.txt', "r")

Imagino que após fazer esse ajuste para a leitura dos 3 arquivos de texto o seu código para o Jogo Forca deve funcionar sem mais problemas.

Espero ter ajudado e caso precise de mais algum auxílio estarei à disposição.

Abraços,

solução!

Olá, boa noite!

Sem problemas!

Refiz o cógido e consegui seguir sem esse problema de "encontrar" a pasta, porém mesmo assim tive erro com a def jogar() e o typeError, pode me ajudar?

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

import random


def jogar():
    mensagemInicial()
    PalavraSecreta = selecaoPalavraSecreta()

    letras_acertadas = acertos(PalavraSecreta)
    print(letras_acertadas)

    print(PalavraSecreta)

    enforcou = False
    acertou = False
    erros = 0

    while (not enforcou and not acertou):
        chute = tentativa

        if (chute in PalavraSecreta):
            tentativaCorreta(chute, letras_acertadas, PalavraSecreta)
        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(PalavraSecreta)


def mensagemInicial():
    print("********************************")
    print("Seja bem-vindo ao jogo da forca!")
    print("********************************")


def selecaoPalavraSecreta():
    arquivo = open(
        '/Users/frois/Library/CloudStorage/GoogleDrive-juan.frois9@gmail.com/Meu Drive/Estudos/JuanFrois/Cursos/Alura/BackEnd/Python/CriandoJogos/Jogos/JogoForca/PalavrasSecrestas/PalavrasSecretas.txt',
        "r")
    Palavra = []
    for linha in arquivo:
        linha = linha.strip()
        Palavra.append(linha)
    arquivo.close()

    numero = random.randrange(0, len(Palavra))
    PalavraSecreta = Palavra[numero].upper()
    return PalavraSecreta


def tentativa():
    chute = input("Informe a letra que gostaria de jogar:")
    chute = chute.strip().upper()
    return chute


def acertos(Palavra):
    return ["_" for letra in Palavra]


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


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


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

Opa Juan! Estou feliz que deu tudo certo no carregamento do arquivo de texto.

Agora sobre o problema que você está recebendo nesse código.

O mesmo está acontecendo por que no trecho de código que você está atribuindo valor à variável chute você está passando o nome da função que recebe esse valor, mas, não está fechando os parênteses afrente do nome, logo, a sua variável chute acabou virando uma função.

Para resolver esse problema basta adicionar os parênteses a frente:

chute = tentativa()

Faça essa modificação que seu código voltará a funcionar sem mais problemas.

Abraço,