1
resposta

Uso de clusures: Saudação personalizada

Vi no vídeo a função closures e quis aplicar, fiz o código dessa forma e aparentemente deu certo, essa é a melhor forma de fazer o uso de closures ? Se tiver uma forma mais limpa/melhor, poderiam me mostrar? Admito que ainda é um pouco confuso, mas depois de ficar a tarde inteira quebrando a cabeça, acho que entendi um pouco. hahahaha

def saudacao(hora):
    if hora < 12:
        msg = 'Bom dia'
    elif hora >= 12 and hora < 18:
        msg = 'Boa tarde'
    elif hora >= 18:
        msg = 'Boa noite'
    def saudar(nome):
        print(f'{msg}, {nome}')
    return saudar

try:
    nome = input('Digite seu nome: ')
    hora_atual = int(input('Digite a hora atual: '))
    saudar_usuario = saudacao(hora_atual)
    saudar_usuario(nome)


except ValueError:
    print('Digite um inteiro para hora')
1 resposta

Olá William! Tudo bem?

Que legal que você está explorando o uso de closures em Python! O seu código está funcionando bem para o que você se propôs a fazer. No entanto, podemos deixá-lo um pouco mais limpo e organizado. Aqui estão algumas sugestões:

  1. Simplificação das Condições: Você pode simplificar as condições elif removendo a comparação redundante. Por exemplo, se já sabemos que hora < 12 não é verdadeiro, não precisamos verificar novamente hora >= 12.

  2. Uso de Funções Lambda: Embora não seja necessário para o seu caso, é sempre bom saber que funções lambda podem ser usadas para criar funções pequenas e anônimas.

  3. Melhoria na Mensagem de Erro: Podemos melhorar a mensagem de erro para que o usuário saiba exatamente o que está errado.

Aqui está uma versão ligeiramente modificada do seu código:

def saudacao(hora):
    if hora < 12:
        msg = 'Bom dia'
    elif hora < 18:
        msg = 'Boa tarde'
    else:
        msg = 'Boa noite'
    
    def saudar(nome):
        print(f'{msg}, {nome}!')
    return saudar

try:
    nome = input('Digite seu nome: ')
    hora_atual = int(input('Digite a hora atual (0-23): '))
    if 0 <= hora_atual <= 23:
        saudar_usuario = saudacao(hora_atual)
        saudar_usuario(nome)
    else:
        print('Por favor, digite um valor de hora entre 0 e 23.')
except ValueError:
    print('Por favor, digite um número inteiro para a hora.')

Espero que essas dicas ajudem a tornar o seu código ainda mais claro! Continue praticando e explorando, pois é assim que a gente aprende de verdade.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.