Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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!