Циклы for и while в Python: разбор на примерах, как в экзаменационных задачах
Цикл for в Python удобен, когда известно, сколько раз нужно повторить действие, а цикл while - когда повторять нужно, пока выполняется условие. На семи небольших программах ты увидишь, как выбрать нужный цикл, как работает range, как разбирать цифры числа и читать данные с клавиатуры, и какие ошибки в циклах встречаются чаще всего.
Как выбрать цикл: считаем повторения или проверяем условие
Задай себе вопрос: «Я знаю заранее, сколько шагов будет?» Если да (перебрать числа от 1 до 100, обработать n введённых значений), берём for. Если число шагов заранее неизвестно и зависит от данных (делить число, пока оно чётное; читать, пока не введут нуль), берём while.
Оба цикла взаимозаменяемы, но с неподходящим циклом программа получается длиннее и легче ломается. Например, цикл while всегда требует вручную менять переменную в условии, и если забыть это сделать, программа зациклится.
for и range: три формы записи
Функция range задаёт последовательность чисел. Конец диапазона в неё не входит.
| Запись | Какие значения принимает i |
|---|---|
| range(5) | 0, 1, 2, 3, 4 |
| range(2, 6) | 2, 3, 4, 5 |
| range(2, 11, 4) | 2, 6, 10 |
Задача. Выведи числа от 1 до 5 и их квадраты.
Решение. Нужен диапазон от 1 до 5 включительно, значит, второй параметр range равен 6.
for i in range(1, 6):
print(i, i * i)Результат: пять строк: 1 1, 2 4, 3 9, 4 16, 5 25.
Задача. Найди сумму всех чётных чисел от 1 до 50.
Решение. Чётные числа идут с шагом 2, начиная с 2: 2, 4, …, 50. Последнее значение 50 должно попасть в диапазон, поэтому верхняя граница 51.
s = 0
for i in range(2, 51, 2):
s += i
print(s)Ответ: 650.
while: повторяем, пока условие истинно
Перед каждым шагом Python проверяет условие. Если оно ложно, цикл завершается. Поэтому переменные из условия нужно подготовить до цикла и изменять внутри него.
Задача. Найди наибольшую цифру числа 58412.
Решение. Последнюю цифру берём как n % 10, а затем отбрасываем её операцией n //= 10. Цикл идёт, пока в числе остаются цифры.
n = 58412
m = 0
while n > 0:
d = n % 10
if d > m:
m = d
n //= 10
print(m)Ответ: 8.
Задача. Сколько раз число 1000 делится на 2 без остатка подряд и что остаётся в конце?
n = 1000
k = 0
while n % 2 == 0:
n //= 2
k += 1
print(k, n)Результат: 3 125. Действительно, 1000 = 8 · 125, поэтому цикл делает 3 шага: 1000 → 500 → 250 → 125, после чего 125 нечётно.
Данные с клавиатуры: известное число значений и ввод до нуля
Если сначала вводят количество чисел, подходит for:
n = int(input())
s = 0
for i in range(n):
x = int(input())
s += x
print(s)Для ввода 4, 7, −2, 10, 5 (каждое число с новой строки) программа выведет 20. Если же ввод заканчивается особым значением (чаще всего нулём), нужен while:
x = int(input())
s = 0
while x != 0:
if x > 0:
s += x
x = int(input())
print(s)Эта программа складывает только положительные числа. На входе 6, −3, 8, 0 результат равен 14. Обрати внимание, что новое число читается в конце тела цикла, иначе значение x не изменится и цикл не закончится.
Перебор в стиле ЕГЭ: проверяем все подходящие числа
Типичная задача на программирование звучит так: найти количество чисел в диапазоне, обладающих некоторым свойством. Для неё нужен цикл for по всем числам и условие внутри.
Задача. Сколько существует трёхзначных чисел, у которых сумма цифр равна 10?
Решение. Перебираем числа от 100 до 999. Цифры находим так: сотни - n // 100, десятки - n // 10 % 10, единицы - n % 10. Считаем числа, где сумма равна 10.
count = 0
for n in range(100, 1000):
a = n // 100
b = n // 10 % 10
c = n % 10
if a + b + c == 10:
count += 1
print(count)Ответ: 54.
Такой перебор работает быстро: Python успевает проверить миллионы чисел за секунды. Но для задач с огромным диапазоном стоит сначала подумать, нельзя ли решить задачу формулой.
Ошибки в циклах, из-за которых программа «не работает»
- Граница range. Верхняя граница не входит:
range(1, 10)даст числа до 9, а не до 10. - Забытое изменение переменной в while. Если значение в условии никогда не меняется, цикл бесконечный.
- Отступы. Строка внутри цикла должна быть сдвинута на 4 пробела. Если её сдвинуть неверно, она перестанет повторяться или, наоборот, начнёт выполняться лишний раз.
- Тип данных.
input()возвращает строку, поэтому числа нужно преобразовывать функциейint().
Все приёмы можно закрепить на тесте по основам Python. А если интересно, как те же идеи выглядят для школьных исполнителей, прочитай разбор про Робота и Чертёжника.
Проверь себя
Что выведет программа?s = 0for i in range(1, 11, 3): s += iprint(s)
Что выведет программа?n = 3k = 0while n < 100: n *= 2; k += 1print(k)
Сколько чисел выведет программа?for i in range(10, 100): if i % 11 == 0: print(i)
Частые вопросы
Можно ли заменить for на while и наоборот?
Что делать, если программа зациклилась?
Зачем в range три числа?
Чем отличаются операции / и //?
Читай дальше
Материалы подготовлены с помощью ИИ и проверены автоматически: все вычисления пересчитаны программой, а ответы сверены независимым решением. Если нашёл ошибку или неточность, напиши на vortexlearn.offical@gmail.com - исправим.