True и false, break и continue
Логический тип данных
Если a и b — числа (допустим, действительные), то у выражения a + b есть какое-то значение (зависящее от значений a и b) и тип — тоже действительное число. Как вы думаете, можно ли сказать, что у выражения a == b есть значение и тип? Или это просто конструкция, которая всегда должна стоять в условии if или while?
На самом деле такое выражение имеет и тип под названием bool, и значение: True (истина) или False (ложь). По-русски bool — это булев тип, или булево значение (в честь математика Джорджа Буля), иногда его еще называют логический тип. Логический тип может иметь только два значения, а над переменными логического типа можно выполнять логические операции not, and, or.
Также для приведения к логическому типу можно использовать функцию bool, которая для ненулевого значения вернет истину.
Или вот еще пример:
Использование флагов
Обычно переменные с булевым значением используются в качестве флагов. Изначально флаг устанавливается в False, потом программа как-то работает, а при наступлении определенного события флаг устанавливается в True. После идет проверка, поднят ли флаг. В зависимости от ее результата выполняется то или иное действие. Иными словами, флаг — это переменная с булевым значением, которая показывает, наступило ли некое событие.
В программе имеется флаг said_forbidden_word, который означает «сказал ли пользователь запретное слово „синхрофазотрон“». Флаг равен True, если сказал, и False, если нет. В самом начале пользователь еще ничего не успел сказать, поэтому флаг установлен в False. Далее на каждой итерации цикла, если пользователь сказал запретное слово, флаг устанавливается в True и остается в таком состоянии (при необходимости флаг можно и «опустить»). Как только флаг оказывается равен True, поведение программы меняется: перед каждым вводом выдается предупреждение, а в конце выдается другое сообщение.
Переменным-флагам особенно важно давать осмысленные имена (обычно — утверждения вроде said_forbidden_word, found_value, mission_accomplished, mission_failed), ведь флагов в программе бывает много. Стоит пресекать попытки подобно if found == True. Это демонстрирует непонимание того, что любое условие обычного вида «что-то == чему-то» само по себе равняется либо True, либо False, и дополнительное сравнение избыточно. Решать эти задачи вообще без использования флагов — нормально и допустимо.
Операторы break и continue. Бесконечные циклы
Если нужно прекратить работу цикла, как только случится некое событие, то, кроме флага, есть и другой способ — оператор разрыва цикла break (он работает и для цикла for). Это не функция и не заголовок блока, а оператор, который состоит из одного слова. Он немедленно прерывает выполнение цикла for или while.
Впрочем злоупотреблять этой конструкцией и вообще оператором break не стоит. Когда программист читает ваш код, он обычно предполагает, что после окончания цикла while условие в заголовке этого цикла ложно. Если же из цикла можно выйти по команде break, то это уже не так. Логика кода становится менее ясной.
Оператор continue немедленно завершает текущую итерацию цикла и переходит к следующей.
Часто использовать break и continue не рекомендуют, поскольку они приводят к произвольному перемещению точки выполнения программы по всему коду, что усложняет понимание и следование логике. Тем не менее разумное использование этих операторов может улучшить читабельность циклов в программе, уменьшив при этом количество вложенных блоков и необходимость в сложной логике выполнения цикла. Выход из цикла с помощью оператора break не является штатным завершением цикла, поэтому else-часть в этом случае не выполнится