Olá, Marcelo. Como vai?
Ir além do que foi pedido e propor novos desafios para si mesmo é um dos melhores jeitos de consolidar o aprendizado na programação! O uso da estrutura try/except para capturar erros e o disparo manual de exceções com o raise ValueError mostram que você já está dominando conceitos bem avançados de controle de fluxo e robustez de código.
A sua lógica para validar se a hora está entre 0 e 23 está perfeita. No entanto, analisando o bloco except ValueError, há um pequeno detalhe sobre como o Python lida com exceções que pode deixar a sua validação ainda mais precisa.
Do jeito que o código está estruturado, a mensagem "Informe somente numeros inteiros" será exibida em duas situações diferentes:
- Se o usuário digitar um texto ou uma letra (gerando um
ValueError nativo do int()). - Se o usuário digitar um número válido, mas fora do intervalo (como
25), disparando o seu raise ValueError.
Para o usuário que digitou 25, ler a mensagem de que ele deveria informar apenas números inteiros pode ser um pouco confuso, já que 25 é um número inteiro. Para deixar seu código com um feedback impecável, você pode separar essas duas validações ou personalizar a mensagem.
Uma boa prática para enriquecer o seu projeto é colocar a entrada de dados dentro de um laço while. Assim, se o usuário errar, o programa não fecha; ele apenas avisa o erro e pede para digitar novamente até que uma hora válida seja informada.
Veja esta sugestão de implementação:
def saudacao(horadodia):
if horadodia < 12:
print("Bom dia!")
elif horadodia <= 18:
print("Boa tarde!")
else:
print("Boa noite!")
# Laço para continuar repetindo até o usuário acertar a entrada
while True:
try:
horaatual = int(input("Digite a hora atual (0-23): "))
# Tratando o número fora do intervalo separadamente
if 0 <= horaatual <= 23:
saudacao(horaatual)
break # Sai do laço while se a hora for válida
else:
print("Erro: A hora deve estar estritamente entre 0 e 23.")
except ValueError:
# Este bloco agora cuida apenas de entradas que não são números inteiros (letras, símbolos)
print("Erro: Entrada inválida. Por favor, informe somente números inteiros.")
Note que, ao usar if 0 <= horaatual <= 23, você simplifica a leitura da condição e consegue dar uma resposta específica para cada tipo de erro que o usuário possa cometer.
Parabéns pela iniciativa de implementar validações e pela excelente estrutura de código que você apresentou!
Espero que possa ter lhe ajudado!