Olá pessoal, estou tentando fazer o tratamento de erros no jogo da forca, porém ele não está executando da forma como deveria.
Consegui implementar um Try/Catch para impedir o usuário de digitar uma string e também, ao mesmo tempo forçá-lo a selecionar uma das categorias apresentadas.
Se a seleção da categoria é feita de imediato, o código roda e o jogo executa normalmente. Pelo trycatch também, se o usuário digita alguma str e depois seleciona uma categoria correta, o jogo inicia normalmente e executa ok.
Porém se o usuário insere um número fora do range da categoria, ao inserir um número correto, o código da erro e não executa.
Podem me ajudar em como posso resolver esse erro?
Segue meu código
import random
def jogar_forca():
banner_inicial()
banner_temas()
index_temas = selecionar_tema()
tema = analise_categoria(index_temas)
jogo(tema)
def banner_inicial():
print("########################################")
print("########################################")
print("###### BEM VINDO AO JOGO DE FORCA ######")
print("########################################")
print("########################################")
print("\n")
def banner_temas():
print("(1) Frutas || (2) Países || (3) Celebridades || (4) Objetos")
def selecionar_tema():
temas = (1, 2, 3, 4)
global numero_tema
try:
numero_tema = int(input("Selecione um Tema: "))
except ValueError as err:
print("Tente com Números!")
banner_temas()
selecionar_tema()
if numero_tema not in temas:
print("Digite o número correspondente aos temas apresentados")
banner_temas()
selecionar_tema()
else:
index_tema = numero_tema
return index_tema
def analise_categoria(indice):
global abrir_arquivo
if indice == 1:
abrir_arquivo = "frutas"
elif indice == 2:
abrir_arquivo = "paises"
elif indice == 3:
abrir_arquivo = "celebridades"
elif indice == 4:
abrir_arquivo = "objeto"
return abrir_arquivo
def jogo(categoria):
ler_arquivo = open(categoria + ".txt", "r", encoding="utf-8")
palavras_no_arquivo = []
for linha in ler_arquivo:
linha = linha.strip()
palavras_no_arquivo.append(linha)
ler_arquivo.close()
indice_palavra = random.randrange(0, len(palavras_no_arquivo))
palavra_secreta = palavras_no_arquivo[indice_palavra].upper()
letras_acertadas = ["_" for _ in palavra_secreta]
letras_erradas = []
print("O Tema é: {}".format(categoria.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 restart():
print("(S) SIM || (N) NÃO")
replay = input("Quer Jogar novamente? ").upper()
if replay == "S":
jogar_forca()
elif replay == "N":
print("Até Mais!")
exit()
else:
print("Digite S para SIM ou N para NÃO!!")
restart()
if __name__ == "__main__":
jogar_forca()