A idéia é deixar com que o programador tenha a liberdade de utilizar a função "gerar_saudacao" com mais liberdade, podendo ajustar os horários de corte para tarde e noite (na prática estabelece horários para manha, tarde e noite) e também permitir a utilização personalizada de saudação para cada horário de corte.
from datetime import datetime
def horario_str_para_segundos(horario_str: str) -> int:
"""
Recebe uma string de horário (HH:MM:SS), valida-a e, se for válida,
converte o horário do dia para o total de segundos desde a meia-noite (00:00:00).
Args:
horario_str: A string contendo o horário a ser convertido (ex: "18:53:47").
Returns:
Um número inteiro representando o total de segundos desde 00:00:00.
Raises:
ValueError: Se a string não for um horário 24h válido (HH:MM:SS).
"""
try:
horario_obj = datetime.strptime(horario_str.strip(), '%H:%M:%S').time()
except ValueError as e:
raise ValueError(
f"Formato de horário inválido: '{horario_str}'. "
"Esperado HH:MM:SS com valores válidos (00:00:00 à 23:59:59)."
) from e
total_segundos = (
horario_obj.hour * 3600 +
horario_obj.minute * 60 +
horario_obj.second
)
return total_segundos
def gerar_saudacao(
horario_str: str,
horario_corte_tarde: str = '12:00:00',
horario_corte_noite: str = '18:00:00',
msg_manha: str = 'Bom dia!',
msg_tarde: str = 'Boa tarde!',
msg_noite: str = 'Boa noite!'
) -> str:
"""
Gera uma saudação com base em um horário de entrada e horários de corte.
Args:
horario_str: O horário a ser avaliado (HH:MM:SS).
horario_corte_tarde: Horário a partir do qual começa a 'tarde'.
horario_corte_noite: Horário a partir do qual começa a 'noite'.
msg_manha, msg_tarde, msg_noite: Mensagens de saudação personalizadas.
Returns:
A string de saudação apropriada ('Bom dia!', 'Boa tarde!', ou 'Boa noite!').
Raises:
ValueError: Se algum dos horários (entrada ou corte) for inválido,
ou se os horários de corte estiverem na ordem errada.
"""
try:
segundos_corte_tarde: int = horario_str_para_segundos(horario_corte_tarde)
segundos_corte_noite: int = horario_str_para_segundos(horario_corte_noite)
except ValueError as e:
raise ValueError(f"Erro na conversão dos horários de corte. {e}") from e
if segundos_corte_tarde >= segundos_corte_noite:
raise ValueError(
f"Horários de corte inválidos: '{horario_corte_tarde}' (tarde) "
f"deve ser anterior a '{horario_corte_noite}' (noite)."
)
segundos_atuais: int = horario_str_para_segundos(horario_str)
if segundos_atuais < segundos_corte_tarde:
return msg_manha
elif segundos_atuais < segundos_corte_noite:
return msg_tarde
return msg_noite
def main() -> None:
"""
Função principal do programa.
Solicita ao usuário a entrada de um horário no formato HH:MM:SS,
valida o formato e, em caso de sucesso, exibe uma saudação apropriada
('Bom dia!', 'Boa tarde!', 'Boa noite!') com base no horário.
O programa é encerrado com código de erro (exit(1)) se ocorrer uma
falha na lógica de saudação (ex: horários de corte mal configurados).
"""
horario_entrada_str: str = ''
while True:
horario_entrada_str = input(
'\nDigite a hora atual (formato 24 horas HH:MM:SS): '
).strip()
try:
horario_str_para_segundos(horario_entrada_str)
break
except ValueError as e:
print(f"{e}")
try:
print(f'\n{gerar_saudacao(horario_entrada_str)}')
except ValueError as e:
print(f"Erro ao gerar a saudação. Detalhes: {e}")
exit(1)
if __name__ == '__main__':
main()