Перейти к основному содержимому
Модуль 2 · Урок 2 из 46/36 в курсе~8 min
Уроки модуля (2/4)

пока циклы

Цикл while повторяет блок до тех пор, пока условие остается истинным. Использование while, когда вы заранее не знаете, сколько итераций вам понадобится: количество раундов зависит от того, что меняется внутри цикла.

Синтаксис

Python
n = 1
while n < 1000:
    n = n * 2
n  # 1024

Блок с отступом выполняется повторно. Перед каждой итерацией Python оценивает условие: как только оно становится ложным, цикл завершается и выполнение продолжается после блока.

Общие шаблоны

Ручной счетчик — эквивалент классическому for на других языках:

Python
i = 0
while i < 5:
    print(i)
    i = i + 1

Бесконечный цикл + внутреннее условие выхода — полезно, когда условие оценивается после выполнения чего-либо:

Python
acc = 0
while True:
    acc = acc + 1
    if acc * acc > 100:
        break
acc  # 11   (11*11 = 121 is the first square > 100)

break немедленно выходит из самого внутреннего цикла (мы увидим это в следующем урок).

Классическая ошибка: бесконечный цикл

Если переменная в условии не меняется внутри цикла, программа никогда не завершается. Это ошибка номер один в while:

Python
n = 0
while n < 10:
    print(n)   # n is never modified → infinite loop!

В наших упражнениях есть таймаут выполнения, поэтому бесконечный цикл завершится неудачно. с четким сообщением вместо зависания браузера. Но в производстве бесконечный цикл — серьезная ошибка.

Риск бесконечных циклов и условия завершения

Цикл while выполняется до тех пор, пока его условие принимает значение True. Если вы забудете обновить переменные, влияющие на условие, ваш цикл будет работать бесконечно, останавливая время выполнения. Всегда следите за тем, чтобы тело цикла продвигалось к условию выхода.

Попробуйте сами

Упражнение#python.m2.l2.e1
Попыток: 0Загрузка…

Найдите наименьшее целое число `n >= 1` такое, что 2**n превышает один миллион. Присвойте его результату и оцените (оно должно быть 20).

Загрузка редактора…
Показать подсказку

2**20 = 1 048 576 — первое число, превышающее 1 000 000.

Решение доступно после 3 попыток

Обзор упражнения

Упражнение#python.m2.l2.e2
Попыток: 0Загрузка…

Начиная с `n = 1000`, делите n пополам целочисленным делением (n // 2), пока оно не станет 0. Подсчитайте, сколько итераций это занимает в `шагах`. Оцените «шаги».

Загрузка редактора…
Показать подсказку

1000 → 500 → 250 → 125 → 62 → 31 → 15 → 7 → 3 → 1 → 0: десять шагов.

Решение доступно после 3 попыток

Дополнительная задача

Упражнение#python.m2.l2.e3
Попыток: 0Загрузка…

Given the variable `n = 32`, write a `while` loop to count how many times you can divide `n` by 2 (using floor division `//`) before `n` becomes less than or equal to 1. Store the count in `divisions` and evaluate it.

Загрузка редактора…
Показать подсказку

The while condition is n > 1. Inside the loop, divide n by 2 and increment divisions by 1.

Решение доступно после 3 попыток