Цель оператора break
- остановить выполнение цикла.Поэтому язык программирования Python требует, чтобы любой оператор break
находился внутри цикла.Итак, если вы пропустите оператор while True
, ваш break
не будет в цикле, а Python правильно объявит об ошибке.
Существует много причин для использования цикла while True
.Одна из причин заключается в том, чтобы продолжать делать свое дело, пока не произойдет какое-то необычное обстоятельство.Ваша программа может проверить это обстоятельство и остановить при необходимости.Эту проверку может быть сложно выполнить в начале цикла, поэтому использование while True
с одним или несколькими операторами break
позволяет выполнять проверку в любой точке цикла.
Еще одна причина для цикла while True
чтобы избежать повторения утверждения - применение принципа Не повторяйся (СУХОЙ) .Ваша программа может быть сделана по-другому.Вы можете сделать:
value = input("Enter a value:")
while value != "done":
# the body of the loop starting with the "try" statement
value = input("Enter a value:")
Этот формат помещает проверку в начало цикла, поэтому True
или break
не требуется.Это имеет тот недостаток, что теперь у вас есть две input
линии, которые абсолютно одинаковы и должны оставаться одинаковыми.Если вы позже измените свой код, вы можете легко изменить один из этих input
и забыть изменить другой, внося ошибку в ваш код.По этой причине повторение себя считается плохой вещью.Текущее программирование на Python предпочитает избегать повторения и использовать while True
и break
, чтобы избежать его.
Эта трудность возникает из-за того, что программе необходимо выполнить оператор input
еще раз, чем она выполняетпетля.Цикл выполняется для каждого обычного ввода, но оператор input
также необходимо выполнить еще раз, чтобы получить последний ввод done
для остановки цикла.Обработка этого небольшого несоответствия между количеством входов и количеством циклов немного сложна, и не существует идеального решения.Но Python, очевидно, остановился на методе while True...break
.Что бы это ни стоило, мои уроки программирования 40 лет назад научили нас избегать техники break
, поскольку идет вразрез с принципами "структурированного программирования" .Но эти дни, похоже, прошли.