Разбор, Информатика

Циклы for и while в Python: разбор на примерах, как в экзаменационных задачах

Цикл for в Python удобен, когда известно, сколько раз нужно повторить действие, а цикл while - когда повторять нужно, пока выполняется условие. На семи небольших программах ты увидишь, как выбрать нужный цикл, как работает range, как разбирать цифры числа и читать данные с клавиатуры, и какие ошибки в циклах встречаются чаще всего.

ОГЭ и ЕГЭчитать около 5 минобновлено 4 октября 2026

Как выбрать цикл: считаем повторения или проверяем условие

Задай себе вопрос: «Я знаю заранее, сколько шагов будет?» Если да (перебрать числа от 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 = 0
for i in range(1, 11, 3): s += i
print(s)

Что выведет программа?
n = 3
k = 0
while n < 100: n *= 2; k += 1
print(k)

Сколько чисел выведет программа?
for i in range(10, 100):
    if i % 11 == 0: print(i)

Частые вопросы

Можно ли заменить for на while и наоборот?
Да, любой цикл for можно переписать через while и наоборот. Но для заранее известного числа повторений for короче и надёжнее, потому что счётчик меняется автоматически.
Что делать, если программа зациклилась?
Остановить её сочетанием клавиш в среде разработки, а потом проверить, меняется ли внутри цикла переменная из условия. Чаще всего ошибка именно там.
Зачем в range три числа?
Первое число задаёт начало, второе - границу, до которой идут значения (она не включается), а третье - шаг. Шаг может быть отрицательным, тогда числа убывают.
Чем отличаются операции / и //?
Операция / даёт дробное число, а // - целую часть от деления. Для отбрасывания последней цифры числа нужна именно операция //.

Читай дальше

Материалы подготовлены с помощью ИИ и проверены автоматически: все вычисления пересчитаны программой, а ответы сверены независимым решением. Если нашёл ошибку или неточность, напиши на vortexlearn.offical@gmail.com - исправим.