Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Projeto] Faça como eu fiz: saudação personalizada

Fui um pouco além incluindo validação e não apenas criação da função, sei que não pediu, mas estou aproveitando o momento para ir treinando.

def saudacao(horadodia):
  if horadodia < 12:
    print("Bom dia!")
  elif horadodia <= 18:
    print("Boa tarde!")
  else:
    print("Boa noite!")

try:
  horaatual = int(input("Digite a hora atual (0-23): "))
  if horaatual < 0 or horaatual > 23:
    raise ValueError
  else:  
    saudacao(horaatual)
except ValueError:
  print('Informe somente numeros inteiros')
2 respostas
solução!

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:

  1. Se o usuário digitar um texto ou uma letra (gerando um ValueError nativo do int()).
  2. 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!

Bem observado, grato pelo feedback.