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

[Bug] jogo quebrou não consigo achar o erro

depois de definir as funções o jogo não roda

import random

def jogar():

    imprime_mensagem_abertura()
    palavra_secreta = carrega_palavra_secreta()
    letras_acertadas = inicializa_letras_acertadas(palavra_secreta)

    enforcou = False
    acertou = False
    erros = 0

    print(letras_acertadas)

    while (not enforcou and not acertou):

        chute = input("Qual a letra?")
        chute = chute.strip().upper()

        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)
    if(acertou):
        print("Você ganhou!!")
    else:
        print("Você perdeu!!")
    print("Fim do jogo!")


def imprime_mensagem_abertura():
    print("*********************************")
    print("***Bem vindo ao jogo de forca!***")
    print("*********************************")

def carrega_palavra_secreta():
    with open("palavras.txt", "r", encoding="utf-8") as arquivo:
        palavras = []

    for linha in arquivo:
        linha = linha.strip()
        palavras.append(linha)

    numero = random.randrange(0, len(palavras))
    palavra_secreta = palavras[numero].upper()
    return palavra_secreta

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

if(__name__ == "__main__"):
    jogar()
3 respostas
solução!

Localizei, era um erro de indentação no with

Diego,

Descobri o problema! O "for" está em uma concatenção anterior, então ele fica fora do laço do "with open", sacou?

O correto é assim:

def carrega_palavra_secreta():
    with open("palavras.txt", "r", encoding="utf-8") as arquivo:
        palavras = []

        for linha in arquivo:
            linha = linha.strip()
            palavras.append(linha)

    numero = random.randrange(0, len(palavras))
    palavra_secreta = palavras[numero].upper()
    return palavra_secreta

Veja aqui

===============================================================

Como corrigir “ValueError: operação de E/S em arquivo fechado” em Python

Atualizado em 22 de setembro de 2023 ⤳ 4 min de leitura

O erro Python “ValueError: operação de E/S em arquivo fechado” acontece quando você tenta realizar operações de E/S (leitura, gravação, etc.) em um arquivo que já foi fechado.

Esta é a aparência do erro:

Esta é a aparência do erro

Este guia rápido explica por que esse erro ocorre e como corrigi-lo rapidamente.

https://www.decodingweb.dev/python-valueerror-io-operation-on-closed-file-fix#:~:text=The%20Python%20error%20%22ValueError%3A%20I,after%20the%20I%2FO%20operations.

===============================================================

Ei! Por favor, se seu problema foi resolvido não esqueça de fechar o tópico e me pontuar, tá okay? Valew!!!

[]'s,

Fabio I.

Putz... fui lerdo... KKKKK!!!