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

цикли while

Цикл 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 спроб