Введение
В этой статье мы рассмотрим важную конструкцию для программирования — цикл. Ты узнаешь, как избежать дублирования кода в условиях неопределённого количества повторов.
Термины, которые будем использовать: цикл while, бесконечный цикл, итерация.
Что такое цикл?
Цикл — это многократное повторение одних и тех же действий.
В языках программирования выделяют две разновидности циклов, сегодня мы рассмотрим одну из них.
Цикл while
Цикл while — это цикл, который выполняет блок кода до тех пор, пока заданное условие истинно.
В отличие от цикла for, который действует по последовательности элементов, цикл while повторяется неопределённое количество раз, пока условие не станет ложным.
Простыми словами:
Представь, что ты моешь посуду. Ты продолжаешь мыть тарелки ПОКА они есть в раковине. Как только тарелки заканчиваются — ты останавливаешься. Цикл while работает точно так же: он выполняет код ПОКА условие верно.
Когда выбирать while вместо for:
Используй for, когда знаешь точное количество повторов или перебираешь коллекцию.
Используй while, когда количество повторов зависит от условий, которые меняются во время выполнения.
| Цикл for | Цикл while |
|---|---|
| Известно количество повторов | Неизвестно, сколько повторов |
| Перебор коллекций, диапазонов | Ожидание события, условия |
| for i in range(5): | while x > 0: |
| Счётчик (переменная цикла) управляется автоматически | Условие нужно менять вручную |
Используй while, когда количество повторений зависит от динамических условий, которые могут измениться только во время выполнения программы. Это цикл для «неопределённости» — когда ты не знаешь, сколько шагов потребуется, но точно знаешь, когда нужно остановиться.
Структура цикла
while условие:
блок кода
while — ключевое слово, описывающее начало цикла
условие — любое выражение, результатом которого может стать одно из значений: True или False.
Вложенный блок кода внутри цикла будет выполняться на каждой его итерации.
Важно!
Итерация — выполнение блока кода из тела цикла ровно 1 раз.
Проверь себя. Что выведет код?
x = 3
while x > 0:
print(x)
x -= 1
3
2
1
Необходимо отметить, что условие для выполнения цикла должно зависеть от внутренней логики кода, то есть оно не должно быть статичным всегда, рано или поздно должна произойти итерация, которая сделает условие ложным и цикл прервётся.
Например, следующий код:
a = 5
while a > 0:
print(a)
Будет бесконечно выводить 5 в консоль, поскольку выражение 5 > 0 истинно, и остаётся таковым на каждой итерации.
Код выше эквивалентен этому:
a = 5
while True:
print(a)
Мы написали конструкцию бесконечного цикла, что не должно применяться на практике.
Чтобы цикл не был бесконечным, нужно изменять состояние условия:
a = 5
while a > 0:
print(a, end = “ “)
a -= 1
Тогда код выведет: 5 4 3 2 1. Как только a станет равно 0, условие 0 > 0 примет значение False и цикл прервётся.
Проверь себя. Как исправить бесконечный цикл?
y = -10
while y < 0:
print(y)
Добавить изменение переменной y такое, чтобы значение когда-нибудь стало неотрицательным.
Практика
Задача 1: Обратный отсчёт
Программа запрашивает целое положительное число N. Используя цикл while, выведите числа от N до 1 включительно в обратном порядке.
N = int(input())
while N > 0:
print(N)
N -= 1
Задача 2: Сумма вводимых чисел до нуля
Программа должна запрашивать у пользователя числа по одному. Суммируйте все введённые числа. Ввод продолжается до тех пор, пока пользователь не введёт 0. После этого выведите полученную сумму.
total = 0
num = int(input())
while num != 0:
total += num
num = int(input())
print(«Сумма:», total)
Задача 3: Поиск степени двойки
Программа запрашивает целое положительное число X. Найдите наименьшую степень двойки (2ⁿ), которая больше или равна X. Используйте цикл while. Выведите найденную степень и значение 2 в этой степени через пробел.
X = int(input())
power = 0
value = 1 # 2^0
while value < X:
power += 1
value *= 2 # удваиваем значение
print(power, value)
Задача 4: Деление на 2
Программа запрашивает целое положительное число. Пока число чётное, делите его на 2. Выведите, сколько раз пришлось делить число и конечный результат через пробел.
num = int(input())
count = 0
while num % 2 == 0 and num > 0:
num //= 2 # целочисленное деление
count += 1
print(count, num)
Задача 5: Квадраты чисел
Программа запрашивает число M. Выводите квадраты натуральных чисел (1², 2², 3², …) с новой строки, пока квадрат не превысит M. Выведите последнее выведенное число и его квадрат через пробел.
M = int(input())
n = 1
while n * n <= M:
print(n**2)
n += 1
print(n-1, (n-1)**2)
Автор:
Быкова Оксана, методист «100балльного репетитора» по информатике ЕГЭ