2
respostas

[Solução] Saudação personalizada

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()

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
2 respostas

Ola amigo.
Excelente aplicação.
Obrigado por compartilhar.

Opa, agradeço!
É sempre um prazer poder ajudar a comunidade!