Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

[Projeto] Minha resposta à essa questão:

Olá a todos, essa é a minha versão do codigo. ficou um pouco diferente da resposta do autor, mas não muito. Eu tendo a sempre pensar sobre UX além do codigo funcional em si, por isso busquei criar alternativas para que a saida no except fosse menos tecnica. Obrigado aos futuros avaliadores pela oportunidade de aperfeiçoamento.

# importing random module

import random

# creating the number guessing game function

def unknown_number_game():
    # generating secret number
    unknown_number = random.randint(1, 100)
    # attempt counter
    users_attempts = 0
    # establishing the infinite loop
    while True:
        try:
            user_attempt = int(input("Enter an integer between 1 and 100: "))

            if not 1 <= user_attempt <= 100:
                raise ValueError(f"Your guess, {user_attempt}, is not within the pre-established range of 1 to 100. Please try again!")
            
            users_attempts += 1

            if user_attempt < unknown_number:
                print("That's a very low guess, try again with a higher number!")
            elif user_attempt > unknown_number:
                print("That's a very high guess, try again with a lower number!")
            else:
                print(f"Congratulations! You guessed the unknown number {unknown_number}, with {users_attempts} attempts!")
                break
            
        except ValueError as e:
            if "invalid literal" in str(e):
                print("Invalid input! Please enter only integer numbers.")
            else:
                print(f"Invalid input! {e}")         
             
unknown_number_game()
1 resposta

Olá, Raul! Como vai?

Parabéns pela resolução da atividade!

Vi que você explorou o tratamento de exceções para tornar a interação mais amigável em Python, utilizou muito bem a validação de intervalo com raise ValueError para garantir entradas corretas e ainda compreendeu a importância da mensagem personalizada no except para melhorar a experiência do usuário.

Continue postando as suas soluções! Além de ganhar pontos de XP na plataforma, você pode ajudar outros estudantes no fórum.

Uma dica interessante para o futuro é encapsular a lógica de mensagens em uma função auxiliar, deixando o código mais limpo e reutilizável. Assim:

def mensagem_erro(e):
    if "invalid literal" in str(e):
        return "Entrada inválida! Digite apenas números inteiros."
    return f"Entrada inválida! {e}"

Isso faz com que o bloco except fique mais enxuto e fácil de manter.

Se quiser aprofundar ainda mais, algumas boas práticas são:

  • Adicionar limite de tentativas: evitar loops infinitos e dar feedback claro.
  • Registrar estatísticas: mostrar ao jogador quantas vezes ele errou antes de acertar.
  • Separar lógica e interação: manter funções de cálculo independentes da interface com o usuário.

Ah, uma pergunta: Você acha que seria mais interessante evoluir esse jogo para incluir um limite máximo de tentativas com mensagem final ou prefere mantê-lo aberto até o jogador acertar o número?

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

Abraço e bons estudos!

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