Olá, Antônio, como vai?
O seu código está consistente com o que a atividade pede. A lógica está clara, a função trata bem cada faixa de horário e o uso do módulo datetime para obter a hora atual está correto.
Um ponto que você pode considerar, caso queira deixar o código um pouco mais enxuto, é simplificar a segunda condição, pois quando o fluxo chega ao segundo bloco o programa já sabe que a hora é maior ou igual a 12. Isso não muda o funcionamento, apenas reduz redundâncias.
Por exemplo, você poderia escrever o segundo teste apenas como elif hora < 18.
Parabéns pelo envio. Continue compartilhando seus códigos e conte com o fórum sempre que precisar.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!