Цикл while в Python

В этом посте рассказываю о цикле while в Python

Видео на YouTube

Кому проще и понятнее разобраться в формате видео — выложил на YouTube:

Цикл while в Python

В этом видео поговорим о второй из важнейших конструкций в программировании — цикле while. Именно с его помощью программы выполняют повторяющиеся действия.

Что делает цикл while

Цикл while используется для повторения выполнения кода, пока заданное условие остаётся истинным (True).

Рассмотрим пример: найдём первую степень двойки, которая больше 1000.

n = 1
i = 0
target = 1000
while n < target:
    n *= 2
    i += 1

n  # 1024
i  # 10
2 ** i  # 1024

После ключевого слова while записывается условие цикла. Цикл выполняется, пока n < target.

Двоеточие означает конец условия и начало блока кода. Оператор *= — это сокращённая форма n = n * 2, а += аналогична i = i + 1.

Переменная i хранит количество итераций, за которые условие перестало выполняться. Мы нашли первую степень двойки, большую тысячи — это 1024, десятая степень двойки.

Ключевое слово break

break используется для прерывания выполнения цикла досрочно.

Найдём первую нечётную степень двойки, большую 1000:

n = 1
i = 0
target = 1000
while True:
    if n > target and i % 2 == 1:
        break
    n *= 2
    i += 1

n  # 2048
i  # 11
2 ** i  # 2048

Здесь используется бесконечный цикл while True — он всегда истинный. Чтобы остановить его, применяется break. Цикл завершается, когда n > target и i нечётное.

Ключевое слово continue

continue предназначено для пропуска текущей итерации и перехода к следующей.

Посчитаем сумму всех чётных чисел меньше 15:

n = 1
sum = 0
while n < 15:
    if n % 2 != 0:
        n += 1
        continue
    sum += n
    n += 1

sum  # 56
# 2 + 4 + 6 + 8 + 10 + 12 + 14 = 56

Ключевое слово else

После цикла while можно добавить блок else, который выполнится, когда условие цикла станет ложным. Однако если в цикле был выполнен break, блок else пропускается.

i = 1
while i > 0:
    i -= 1
else:
    result = "else сработал"

result  # 'else сработал'
i  # 0

Здесь result определена, потому что цикл завершился естественным образом, когда i стало равно 0.

while True:
    break
else:
    no_result = "else не сработал"

# NameError: name 'no_result' is not defined

В этом случае else не сработал, потому что цикл был прерван с помощью break.

Вложенные циклы

Как и другие блоки кода, цикл while можно использовать внутри другого цикла while.