Resolvi tratar os erros e implementar a a possibilidade de repetição do jogo e, também, a parte de tentativas. Se não houverem mais tentativas o jogo acaba.
from random import randint
print("Bem vindo ao jogo de adivinhação")
print("Você tem 3 tentativas")
print("Para começar, digite um numero de 0 a 20")
def tentar_novamente():
print('Deseja tentar novamente?\n1- Sim\n2- Não')
escolha = str(input("> "))
if escolha == '1':
start()
elif escolha == '2':
print("Programa encerrado, obrigado por usar!")
exit()
else:
print("Opção inválida!")
tentar_novamente()
def start():
chances = 3
numero_secreto = randint(0, 20)
try:
chute = int(input("> "))
while chute != numero_secreto:
if chute > 20:
print(f"O numero {chute} é maior do que o permitido!")
chute = int(input("> "))
elif chute < 0:
print(f"O numero {chute} é menor do que o permitido!")
chute = int(input("> "))
elif chute > numero_secreto:
chances = chances - 1
if chances <= 0:
print(f"Você errou e suas chances terminaram, o número secreto era {numero_secreto}. Fim de jogo :(")
tentar_novamente()
else:
print(f"Você errou! Dica: o numero {chute} é maior que o numero secreto")
print(f"Tentativas restantes: {chances}")
chute = int(input("> "))
else:
chances = chances - 1
if chances <= 0:
print(f"Você errou e suas chances terminaram, o número secreto era {numero_secreto}. Fim de jogo :(")
tentar_novamente()
else:
print(f"Você errou! Dica: o numero {chute} é menor que o numero secreto")
print(f"Tentativas restantes: {chances}")
chute = int(input("> "))
else:
print(f"Você acertou! O numero era {chute} (chances restantes: {chances})")
tentar_novamente()
except ValueError:
print("Erro: Você deve usar apenas numeros inteiros!")
tentar_novamente()
start()