Executando verificação de segurança...
3

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.

Carregando publicação patrocinada...
1
0

Se fosse um if convencional, funcionaria perfeitamente sem o else, mas esse tipo de expressão pythonic equivale ao operador ternário return input(question) == "y" ? true : false em linguagens baseadas em C, tais como C++, Java, Javascript, Typescript, entre outras.

Pode testar: se você retirar o else False provocará um erro do tipo SyntaxError: expected 'else' after 'if' expression.

Em relação à não detecção do caractere "n", partimos do "princípio da boa fé", ou seja, de que o usuário só digitaria "y" ou "n", e não outros caracteres diferentes, ou dígitos, e nem especiais CTRL + C, por exemplo, que precisariam de um tratamento adequado.

Em plataformas de desafios de programação (Topcoder, HackerRank, Leetcode, entre outras), esse princípio da boa fé se aplica. Quando um problema enuncia que as entradas são "y" ou "n", não é necessário se preocupar com outro valor.

Contudo, concordo que na vida real, fora de ambientes de testes, temos que estar preparados para tratar e testar todos os erros possíveis.