На основе предоставленного вами кода мне пришлось бы попытаться работать в обратном направлении, чтобы создать худший пример, и, не видя того, что вы сделали изначально, это может вызвать больше путаницы, чем помочь. Изрядное количество вещей, о которых я упоминаю, являются субъективными для каждого разработчика, но принципы, как правило, до некоторой степени согласованы между собой (особенно в python).
При этом я постараюсь объяснить, почему это шаблон оптимален:
Интуитивность: при чтении этого кода и взгляде со стороны я могу сказать, что вы выполняете проверку, в первую очередь потому, что вы просто читаете код как простой английский sh Я вижу, вы предполагаете, что ввод недействителен (действителен == False) и не оставит l oop, пока он не будет проверен (действителен == True). Даже без дополнительного контекста знания, что это была игра ti c -ta c -toe, я могу сразу сказать, прочитав код, что это так.
Скорость: в с точки зрения времени, необходимого для выполнения этой функции, она прекратится, как только ввод станет действительным, в отличие от некоторых других способов сделать это, требующих более одной проверки.
Pythoni c: В сообществе python делается упор на код 'pythoni c', в основном это означает, что есть способы делать что-то, что является общим для различных типов кода python. В этом случае существует множество шаблонов проверки ввода (с использованием циклов for, условий завершения, отдельных функций и т. Д. c.), Но, опять же, из-за того, как это написано, я мог бы отлаживать его, не обязательно знать всю вашу кодовую базу . Это также означает, что если вы видите похожий фрагмент кода в большом проекте, вы с большей вероятностью узнаете, что происходит. Он следует принципам zen из python в том, что вы говорите явно, сохраняя при этом удобочитаемость, ошибки не передаются тихо, и вы сохраняете его простоту.