Olá pessoal, estou tentando fazer o tratamento de erros no jogo da forca, porém ele não está executando da forma como deveria. Quero impedir do usuário digitar uma str e forçá-lo a digitar um int e também selecionar uma das categorias da forca, porém o código executa apenas uma vez da forma correta.
Fiz o teste digitando uma str primeiro e depois um int corretamente, o código apresenta o seguinte erro: E se eu fizer o teste digitando um int fora da minha list de categorias, apresenta o mesmo erro abaixo:
PS: A falha está no método selecao_tema
Traceback (most recent call last):
File "/home/alan/PycharmProjects/Jogos/forca.py", line 114, in <module>
jogar()
File "/home/alan/PycharmProjects/Jogos/forca.py", line 6, in jogar
tema = selecao_tema()
File "/home/alan/PycharmProjects/Jogos/forca.py", line 85, in selecao_tema
while selecione_o_tema not in temas:
UnboundLocalError: local variable 'selecione_o_tema' referenced before assignment
Meu Código está assim:
import random
def jogar():
banner_abertura()
tema = selecao_tema()
ler_arquivo = open(tema + ".txt", "r", encoding="utf-8")
palavra = []
for linha in ler_arquivo:
linha = linha.strip()
palavra.append(linha)
ler_arquivo.close()
indice_palavra = random.randrange(0, len(palavra))
palavra_secreta = palavra[indice_palavra].upper()
letras_acertadas = ["_" for _ in palavra_secreta]
letras_erradas = []
print("O Tema é: {}".format(tema.upper()))
print("A Palavra Secreta têm {} letras!".format(len(palavra_secreta)))
print("Dica: Pode ser um nome composto, então '-' entra como caractere!")
enforcou = False
acertou = False
erros = 6
print(letras_acertadas)
while not acertou and not enforcou:
chute = input("Digite uma letra: ")
chute = chute.strip().upper()
if chute in palavra_secreta:
index = 0
for letra in palavra_secreta:
if chute == letra:
letras_acertadas[index] = chute
index += 1
else:
letras_erradas.append(chute)
print("Letras Erradas que você já Chutou: {}".format(letras_erradas))
erros -= 1
print("Você tem Mais {} chances...".format(erros))
enforcou = erros == 0
acertou = "_" not in letras_acertadas
print(letras_acertadas)
if acertou:
print("Você Acertou a Palavra Secreta! Parabéns!")
print("A Palavra Secreta Era: {}".format(palavra_secreta))
else:
print("Você Não Acertou a Palavra Secreta... Tente Novamente")
print("A Palavra Secreta era: {}".format(palavra_secreta))
print("Fim do jogo")
print("\n")
restart()
def banner_abertura():
print('*****************************************')
print('****** Bem-vindo ao jogo da Forca *******')
print('*****************************************')
print("\n")
def selecao_tema():
print("(1) Frutas || (2) Países || (3) Celebridades || (4) Objetos")
temas = [1,2,3,4]
try:
selecione_o_tema = int(input("Selecione um Tema: "))
except ValueError:
print("Isto não é um Número ¬¬")
selecao_tema()
while selecione_o_tema not in temas:
print("Selecione uma das Categorias!")
break
if selecione_o_tema == 1:
abrir_arquivo = "frutas"
elif selecione_o_tema == 2:
abrir_arquivo = "paises"
elif selecione_o_tema == 3:
abrir_arquivo = "celebridades"
elif selecione_o_tema == 4:
abrir_arquivo = "objeto"
else:
print("Selecione um dos Temas Apresentados!")
selecao_tema()
return abrir_arquivo
def restart():
print("(S) SIM || (N) NÃO")
replay = input("Quer Jogar novamente? ").upper()
print("\n")
while replay != "S":
print("Digite S para Sim ou N para Não")
print("Quer Jogar novamente? ")
replay = input().upper()
jogar()
if __name__ == '__main__':
jogar()