Olá Bruno! Tudo joia?
A ideia de encapsular o processo de compra dentro da função "comprar" é uma boa prática, pois ajuda a organizar o código e torná-lo mais legível e reutilizável. No entanto, é importante manter a função coesa, ou seja, focada em realizar uma única tarefa.
No código que você forneceu, a função "comprar" está realizando várias tarefas diferentes, o que pode torná-la menos coesa e mais difícil de manter e depurar. Isso quando pensamos em um projeto em larga escala, então você não terá muitos problemas em projetos mais simples, contudo é importante ter isso mente.
Espero ter ajudado e bons estudos!