1
resposta

[Projeto] Jogo de adivinhar o número

import random
import os

NUMERO_MINIMO = 1
NUMERO_MAXIMO = 100

gerar_numero = lambda min, max: random.randrange(min, max + 1, 1)

def verificar_numero(numero_escolhido, numero_cpu):
    if numero_cpu == numero_escolhido:
        print(f"\nParabéns! Você acertou o número {numero_escolhido}")
    elif numero_cpu < numero_escolhido:
        numero_escolhido = receber_entrada("\nMuito alto! Tente novamente: ") 
        verificar_numero(numero_escolhido, numero_cpu)
    else:
        numero_escolhido = receber_entrada("\nMuito baixo! Tente novamente: ")
        verificar_numero(numero_escolhido, numero_cpu)

def receber_entrada(mensagem):
    try:
        numero_escolhido = int(input(f"{mensagem}"))
    except:
        return receber_entrada(f"Entrada inválida: invalid literal for int() with base 10: 'abc12. Digite um número entre {NUMERO_MINIMO} e {NUMERO_MAXIMO}: ")
    else:
        if numero_escolhido >= NUMERO_MINIMO and numero_escolhido <= NUMERO_MAXIMO:
            return numero_escolhido
        else:
            return receber_entrada(f"Entrada inválida: Número fora do intervalo! Digite um número entre {NUMERO_MINIMO} e {NUMERO_MAXIMO}: ")

def main():
    os.system("cls")
    numero_escolhido = receber_entrada(f"Tente adivinhar o número ({NUMERO_MINIMO}-{NUMERO_MAXIMO}): ")
    numero_cpu = gerar_numero(NUMERO_MINIMO, NUMERO_MAXIMO)
    verificar_numero(numero_escolhido, numero_cpu)

if __name__ == "__main__":
    main()
1 resposta

Olá, Christian! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o uso de funções lambda para gerar números aleatórios, utilizou muito bem a recursividade para validar entradas e ainda compreendeu a importância do tratamento de erros para manter o programa funcional e interativo.

Uma dica interessante para o futuro é evitar recursividade em funções de entrada, substituindo por laços de repetição. Assim:

def receber_entrada(mensagem):
    while True:
        try:
            numero_escolhido = int(input(mensagem))
            if NUMERO_MINIMO <= numero_escolhido <= NUMERO_MAXIMO:
                return numero_escolhido
            else:
                print(f"Entrada inválida: Número fora do intervalo! Digite um número entre {NUMERO_MINIMO} e {NUMERO_MAXIMO}.")
        except ValueError:
            print(f"Entrada inválida: Digite apenas números entre {NUMERO_MINIMO} e {NUMERO_MAXIMO}.")

Isso evita chamadas infinitas e torna o código mais eficiente.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!