Em vez de:

def ask(question):
    return True if input(question) == "y" else False

Poderia ser apenas:

def ask(question):
    return input(question) == "y"

Pois o resultado do operador == é True ou False, então pode retornar o valor da expressão diretamente.


Mas tem uma diferença importante aí. No código original, ele verifica se o que foi digitado é "y" ou "n", e se for qualquer valor diferente disso ("a", "x", ou qualquer outra coisa), ele pede para digitar novamente.

Mas no seu código ele só pergunta uma vez e pronto. E se digitar qualquer coisa diferente de "y" (e que não necessarimente é "n"), ele considera que é False.

Enfim, é uma diferença sutil, mas que muda o comportamento do programa. Claro que por ser um projeto pessoal sem requisitos bem definidos, não precisamos ser tão rígidos. Mas é importante saber que os códigos não são equivalentes.

Saquei mano, muito obrigado pelo comentário, me ajudou ainda mais a consolidar esses conhecimentos :)