Booleanos
PERFECT=True escolhe o tipo de labirinto (perfeito ou tabuleiro de Pac-Man) e chega ao
programa como texto. Ele precisa virar o booleano True ou False, o tipo do Python que só
tem esses dois valores. Esta página mostra o conversor to_bool do ValueParser, a classe de
conversores começada na página 3.
A armadilha do bool()
O jeito óbvio não funciona:
.venv/bin/python -c 'print(bool("False"))'
True
Para o Python, todo texto não vazio é verdadeiro, inclusive o texto "False". bool() só
diz se o texto tem algum caractere. É o erro clássico de converter booleano a partir de texto.
to_bool: comparar com as duas palavras
lowered = value.lower()
if lowered == "true":
return True
if lowered == "false":
return False
raise ValueError(value)
value.lower()passa o texto para minúsculas:True,TRUEetrueviram todostrue.- Duas comparações decidem; qualquer outro texto levanta
ValueError, como noto_int.
O enunciado escreve PERFECT=True. Aceitar qualquer caixa (maiúsculas ou minúsculas) é escolha
do projeto, porque é natural alguém escrever true.
O que não é aceito: yes, 1, sim, on. Cada um é a convenção de outro programa; aceitar
uns e recusar outros seria arbitrário, e aceitar todos não teria fim. True e False são as
palavras do enunciado e do próprio Python.
O último conversor, o de coordenadas, e o arquivo completo do ValueParser estão na
próxima página.