Olá, Alex. Como vai?
Parabéns por alcançar o arquivo Alura ex031.py! É muito gratificante acompanhar a sua evolução constante e ver como você está consolidando o uso de funções em Python de maneira tão estruturada.
A lógica da sua função gerar_saudacao ficou excelente. Você utilizou perfeitamente as estruturas condicionais (if, elif e else) para mapear os períodos do dia e tratou muito bem os intervalos de tempo. O encadeamento 12 <= hora <= 18 na linha 5 é um recurso lindo do Python que deixa a leitura do código super natural, parecendo matemática pura. O teste no terminal digitando 15 e recebendo o "Boa tarde!" comprova que o fluxo está impecável!
Para enriquecer ainda mais a sua prática, quero compartilhar um detalhe sutil sobre como os interpretadores de código funcionam quando encontram a palavra-chave return, além de uma dica de validação:
if / elif / else)Como a sua função utiliza a instrução return dentro de cada bloco condicional, você pode simplificar a estrutura do código.
Quando o interpretador do Python executa um return, ele encerra imediatamente a execução daquela função e entrega o valor. Isso significa que, se a hora for menor que 12, ele retorna "Bom dia!" e nem sequer lê o restante das linhas abaixo. Devido a esse comportamento, o uso de elif e else torna-se opcional para o alinhamento.
Veja como o seu código poderia ser reescrito mantendo exatamente o mesmo comportamento, mas de forma ainda mais direta (uma prática de mercado muito associada ao conceito de Clean Code):
def gerar_saudacao(hora):
if hora < 12:
return "Bom dia!"
if hora <= 18:
return "Boa tarde!"
return "Boa noite!"
O que mudou? > No segundo bloco, removemos o
12 <=porque se o código chegou até ali, ele obrigatoriamente já é maior ou igual a 12 (caso contrário, teria entrado no primeiroif). E o "Boa noite!" virou o retorno padrão no fim do bloco, eliminando a necessidade da palavraelse.
No seu input, você colocou uma instrução excelente pedindo para o usuário digitar de 0-23. Mas e se o usuário digitar por engano um número fora desse intervalo, como 25 ou -3? No formato atual, o seu sistema retornará "Boa noite!", o que seria uma inconsistência lógica.
Uma boa prática para tornar o seu programa profissional é adicionar uma pequena camada de validação no início da função:
def gerar_saudacao(hora):
if hora < 0 or hora > 23:
return "Hora inválida! Digite um valor entre 0 e 23."
if hora < 12:
return "Bom dia!"
if hora <= 18:
return "Boa tarde!"
return "Boa noite!"
Dessa forma, seu script fica completamente protegido contra entradas inesperadas.
Seu capricho na separação das etapas (Criação, Entrada, Processamento e Saída) continua exemplar. Parabéns pela constância e pelo excelente código!
Espero que possa ter lhe ajudado!