Цикл while
(“пока”) позволяет выполнить
одну и ту же последовательность действий, пока проверяемое условие истинно.
Условие записывается до тела цикла и проверяется до выполнения тела цикла.
Как правило, цикл while
используется, когда невозможно
определить точное значение количества проходов исполнения цикла.
Синтаксис цикла while
в простейшем случае выглядит так:
while условие: блок инструкций
При выполнении цикла while
сначала проверяется условие.
Если оно ложно, то выполнение цикла прекращается и управление
передается на следующую инструкцию после тела цикла while
.
Если условие истинно, то выполняется инструкция, после чего условие
проверяется снова и снова выполняется инструкция.
Так продолжается до тех пор, пока условие будет истинно.
Как только условие станет ложно, работа цикла завершится и
управление передастся следующей инструкции после цикла.
Например, следующий фрагмент программы напечатает на экран всех целые числа, не превосходящие n:
a = 1 while a <= n: print(a) a += 1
Общая схема цикла while
в данном случае для перебора
всех всех подходящих значений такая:
a = начальное значение while а является подходящим числом: обработать a перейти к следующему a
Вот еще один пример использования цикла while
для определения количества цифр натурального числа n
:
n = int(input()) length = 0 while n > 0: length += 1 n //= 10
В этом цикле мы отбрасываем по одной цифре числа, начиная с конца,
что эквивалентно целочисленному делению на 10 (n //= 10
),
при этом считаем в переменной length
, сколько раз это было сделано.
В языке Питон есть и другой способ решения этой задачи:
.
После тела цикла можно написать слово else:
и после него блок операций, который будет
выполнен один раз после окончания цикла, когда проверяемое
условие станет неверно:
i = 1 while i <= 10: print(i) i += 1 else: print('Цикл окончен, i =', i)
Казалось бы, никакого смысла в этом нет, ведь эту же инструкцию можно
просто написать после окончания цикла. Смысл появляется только
вместе с инструкцией break
, использование которой внутри цикла
приводит к немедленному прекращению цикла, и при этом не исполняется ветка
else
. Разумеется, инструкцию break
осмыленно
вызывать только из инструкции if
, то есть она должна выполняться
только при выполнении какого-то особенного условия.
Другая инструкция управления циклом —
continue
(продолжение цикла). Если эта инструкция
встречается где-то посередине цикла, то пропускаются все оставшиеся
инструкции до конца цикла, и исполнение цикла продолжается
со следующей итерации.
Инструкции break
, continue
и ветка
else:
можно использовать и внутри цикла for
.
Тем не менее, увлечение инструкциями break
и continue
не поощряется, если можно обойтись без их использования. Вот типичный пример
плохого использования инструкции break
.
while True: length += 1 n //= 10 if n == 0: break