1Зачем программе нужны циклы?
Первое занятие: for и range; while можно прочитать для сравнения. Второе: счётчик и накопитель, затем if внутри цикла. Третье: ввод до сигнала и работа с цифрами.
Перед новой задачей выполни короткое упражнение в соответствующем разделе. break, continue и вложенные циклы оставь на следующий этап.
В теме 1 команды выполнялись по порядку. В теме 2 программа выбирала действие с помощью if. Теперь научим её повторять действия: печатать номера, обрабатывать измерения, читать данные, пока они не закончатся.
Представь, что нужно вывести слово «Старт» три раза. Три одинаковые команды пока выглядят терпимо. Но если повторений сто или их число вводит пользователь, перечисление команд перестаёт быть удобным. Цикл позволяет записать повторяемую часть один раз.

print("Старт")
print("Старт")
print("Старт")for attempt in range(3):
print("Старт")while — «пока»
Повторяем тело, пока условие истинно. Удобен, когда заранее неизвестно число проходов: например, ввод данных до сигнала.
for — «для каждого»
Берём элементы последовательности по очереди. Удобен для заданного числа повторений или перебора диапазона номеров.
Подумай: if и while проверяют условие. Чем они отличаются?
if выбирает ветку один раз. while после тела возвращается к проверке и может выполнить тело снова.
2Цикл while: условие перед телом
Слово while означает «пока». Сначала программа проверяет условие. При значении True выполняет всё тело и возвращается к проверке. При False пропускает тело и продолжает выполнять команды после цикла.
Условие записывается после while, строка заканчивается двоеточием. Команды тела имеют одинаковый отступ. Для каждого уровня используем четыре пробела, как в теме об условиях.
while условие:
команда_тела
другая_команда_тела
команда_после_циклаnumber = 1
while number <= 3:
print(number)
number += 1
print("Конец")Переменная number хранит текущий номер. Запись number += 1 — сокращение для number = number + 1: прочитать старое значение, прибавить единицу и сохранить новое.
Обрати внимание: print("Конец") стоит без отступа. Он выполняется один раз после завершения всего цикла, а не после каждого номера.
| Проверка | Условие number ≤ 3 | Действие | number после тела |
|---|---|---|---|
| 1 | 1 ≤ 3 → True | Напечатать 1, увеличить | 2 |
| 2 | 2 ≤ 3 → True | Напечатать 2, увеличить | 3 |
| 3 | 3 ≤ 3 → True | Напечатать 3, увеличить | 4 |
| 4 | 4 ≤ 3 → False | Тело не выполняется | 4 |
number равен 4, хотя внутри тела печатались только 1, 2, 3.Подумай: Что изменится, если начальное number равно 7?
Условие 7 ≤ 3 сразу ложно. Ни одного номера напечатано не будет, но команда после цикла напечатает «Конец».
Проследи за указателем строки и значением number: три прохода тела, четыре проверки условия и выход из цикла.
Прочитай код сверху вниз. Назови напечатанные числа и значение number после цикла.
number = 1
while number <= 3:
number += 1
print(number)Проверить рассуждение
Вывод: 2, 3, 4 — каждое число с новой строки. После цикла number равен 4. Увеличение стоит перед print, но условие проверяется до увеличения.
3Тренажёр while: программа под микроскопом
Не запускай весь цикл в уме сразу. Отдельно отслеживай проверку, вывод и изменение переменной. В тренажёре каждая кнопка выполняет одну строку, а таблица хранит историю.
Перед опытом предскажи вывод и число проходов. Потом проверь старт 1, старт 3 и старт 5. Последний вариант помогает увидеть, что тело может не выполниться.
Подумай: Что изменится, если увеличить number перед print, а не после?
В этом коде сначала проверка, затем print, затем увеличение. Если переставить команды, изменится вывод: например, увеличение перед print даст другие напечатанные числа. Всегда читай тело сверху вниз.
4Цикл for: берём значения по очереди
for не означает «прибавляй единицу». Он означает «для каждого элемента». На каждом проходе переменная получает следующий элемент последовательности. В этой теме последовательность чисел задаёт range.
for repeat_number in range(4):
print("Проверка")
print("Все повторы завершены")range(4) предоставляет числа 0, 1, 2, 3. Тело выполнится четыре раза. Переменная repeat_number в этом примере не используется в выводе: она нужна, чтобы получать элементы диапазона.
Если текущий номер нужен, его можно использовать прямо в теле. Имя переменной выбираешь сам: i, attempt, floor. Короткое имя i — обычная договорённость, а не специальное слово Python.
for floor in range(1, 4):
print("Этаж", floor)| Проход | floor | Что печатает программа |
|---|---|---|
| 1 | 1 | Этаж 1 |
| 2 | 2 | Этаж 2 |
| 3 | 3 | Этаж 3 |
floor += 1 внутри тела не меняет последовательность, которую подготовил range. Такая запись часто делает код непонятным.Подумай: Сколько раз напечатается сообщение при range(0)?
Ни разу: диапазон пуст. Команды после цикла всё равно выполнятся.
5Функция range: старт, стоп и шаг
range задаёт целочисленный диапазон. У него три формы записи. Главная граница: stop не входит в диапазон. Это правило действует и при движении вперёд, и при движении назад.
| Форма | Значение параметров | Пример |
|---|---|---|
range(stop) | Старт 0, шаг +1 | range(5) → 0, 1, 2, 3, 4 |
range(start, stop) | Старт задан, шаг +1 | range(2, 6) → 2, 3, 4, 5 |
range(start, stop, step) | Старт и шаг заданы | range(2, 9, 3) → 2, 5, 8 |
range(2, 6)
Чтобы вывести числа от 1 до n включительно, стопом задают n + 1. Чтобы идти назад, нужен отрицательный шаг. При отрицательном шаге значения продолжаются, пока они больше стопа.
n = int(input())
for number in range(1, n + 1):
print(number)for number in range(6, 0, -2):
print(number)| Диапазон | Результат | Почему |
|---|---|---|
range(5, 2) | Пусто | Шаг +1 не ведёт от 5 к 2 |
range(2, 5, -1) | Пусто | Отрицательный шаг не ведёт от 2 к 5 |
range(3, 3) | Пусто | Старт уже равен исключённому стопу |
range(0, 5, 0) | Ошибка ValueError | Шаг 0 запрещён |
print(range(5)) покажет range(0, 5), а не все его элементы. Чтобы вывести числа, перебери диапазон циклом.Подумай: Как задать 9, 6, 3 без включения 0?
range(9, 0, -3). Следующее значение было бы 0, но оно совпадает со стопом и не включается.
Нужно напечатать 5, 4, 3, 2, 1. Какие аргументы range нужны?
for number in range(...):
print(number)Проверить рассуждение
range(5, 0, -1): старт 5, стоп 0 исключён, шаг −1.
6Как выбрать между while и for
Один и тот же результат нередко можно получить разными циклами. Отличается то, где хранится правило повторения. В while ты описываешь условие и изменение данных. В for задаёшь последовательность элементов.
number = 1
while number <= 3:
print(number)
number += 1for number in range(1, 4):
print(number)| Ситуация | Обычно удобнее | Объяснение |
|---|---|---|
| Нужно 10 повторений | for | Число проходов задано |
| Нужно перебрать номера от a до b | for | Есть числовой диапазон |
| Читать значения до сигнала | while | Число вводов заранее неизвестно |
| Менять число, пока оно больше 0 | while | Продолжение определяется текущим состоянием |
1. Напечатать сообщение 8 раз. 2. Читать измерения до первого −999. 3. Удваивать запас, пока он меньше цели.
Проверить рассуждение
1. Обычно for с range(8). 2. Обычно while: заранее неизвестно, когда придёт сигнал. 3. Обычно while: продолжение зависит от текущего запаса. Другой цикл допустим, если ты можешь объяснить его работу.
7Счётчик, сумма и произведение
В задачах на обработку данных обычно нужно не просто повторить команду, а сохранять результат предыдущих проходов. Для этого переменную создают до цикла и обновляют внутри.
Счётчик хранит количество событий: например, сколько измерений было положительными. Накопитель хранит общий результат: сумму значений или произведение.
| Роль | Начало | Обновление |
|---|---|---|
| Счётчик | count = 0 | count += 1 при нужном событии |
| Сумма | total = 0 | total += value |
| Произведение | product = 1 | product *= value |
total = 0
for sample in range(3):
value = int(input())
total += value
print(total)Пусть вводятся 4, −2, 7. После первого прохода сумма 4, после второго — 2, после третьего — 9. Переменная sample считает проходы, value хранит новое измерение, а total — сумму уже обработанных значений.
| Проход | Новое value | total до сложения | total после |
|---|---|---|---|
| 1 | 4 | 0 | 4 |
| 2 | −2 | 4 | 2 |
| 3 | 7 | 2 | 9 |
total = 0 внутрь цикла, на каждом проходе потеряется предыдущая сумма. Итог окажется равен последнему значению.Подумай: Почему произведение начинают с 1, а не с 0?
При умножении на 0 любой результат станет 0. Единица сохраняет первый множитель. Начальные значения выбираются по смыслу операции, а не по привычке.
Вводятся 4, −2, 7. Программа должна вывести 9, но выводит 7. Какую строку нужно перенести и куда?
for sample in range(3):
total = 0
value = int(input())
total += value
print(total)Проверить рассуждение
Перенеси total = 0 перед for, без отступа. Внутри тела она стирает накопленную сумму на каждом проходе. Проверь оба режима в анимации выше.
8Условие внутри цикла
Цикл может обрабатывать много значений, а if — выбирать, какие из них учитывать. На каждом проходе условие проверяется заново для текущего значения.
Дано число измерений n. Затем вводятся сами измерения. Посчитаем, сколько из них строго больше нуля.
n = int(input())
count = 0
for sample in range(n):
value = int(input())
if value > 0:
count += 1
print(count)| Строка | Отступ | Когда выполняется |
|---|---|---|
for sample in range(n): | 0 пробелов | Начинает перебор |
value = int(input()) | 4 пробела | На каждом проходе |
if value > 0: | 4 пробела | Для каждого нового value |
count += 1 | 8 пробелов | Только при value > 0 |
print(count) | 0 пробелов | Один раз после цикла |
Подумай: Если n равно 0, что выведет программа?
0. Измерения не запрашиваются: range(0) пуст, счётчик остаётся нулевым.
9Ввод до сигнала: число повторений неизвестно
Иногда количество данных не передают заранее. Ввод заканчивается специальным значением, например нулём. Его называют сигналом окончания. Это часть формата ввода, а не ошибка пользователя.
Чтобы проверить сигнал, сначала надо получить первое число. После обработки нужен новый ввод: иначе цикл будет проверять одно и то же значение. Сам сигнал не входит в сумму.
total = 0
value = int(input())
while value != 0:
total += value
value = int(input())
print(total)| Ввод | Роль | Новая сумма |
|---|---|---|
| 5 | Первое данное | 5 |
| −2 | Следующее данное | 3 |
| 8 | Следующее данное | 11 |
| 0 | Сигнал: тело не выполняется | 11 |
Подумай: Почему данные после первого 0 остаются непрочитанными?
На 0 проверка value != 0 становится ложной. Тело и находящийся в нём новый input больше не выполняются.
Ввод: 5, −2, 0. Какие два места должны содержать input, чтобы сумма стала 3 и цикл завершился?
total = 0
value = ...
while value != 0:
total += value
value = ...
print(total)Проверить рассуждение
В обоих местах нужно int(input()). Первый ввод нужен для первой проверки; ввод в конце тела даёт следующее значение. Без него условие всё время проверяет прежнее число.
10Арифметический цикл: работа с цифрами
Цикл может завершаться не только после ввода сигнала. Иногда на каждом проходе меняется само число. Для неотрицательного целого числа number % 10 даёт последнюю цифру, а number // 10 убирает её.
Пример ниже вычисляет сумму цифр. Здесь нас интересует процесс постепенного уменьшения числа: когда все цифры убраны, число становится нулём.
number = int(input())
digit_sum = 0
while number > 0:
digit = number % 10
digit_sum += digit
number //= 10
print(digit_sum)| number до прохода | Последняя цифра | Новая сумма | number после //= 10 |
|---|---|---|---|
| 407 | 7 | 7 | 40 |
| 40 | 0 | 7 | 4 |
| 4 | 4 | 11 | 0 |
Подумай: Почему нельзя заменить //= 10 на /= 10?
Обычное деление создаёт дробное число. Здесь нужны целые числа с отброшенной последней цифрой; эту операцию выполняет целочисленное деление // .
11Отладка: почему цикл ведёт себя неправильно
При ошибке полезнее восстановить несколько проходов на бумаге, чем случайно менять числа. Запиши начальные значения, результат условия, выполненные строки и состояние после тела. Начинай с маленьких входных данных.
number = 1
while number <= 3:
print(number)| Симптом | Вероятная причина | Полезная проверка |
|---|---|---|
| Тело не выполнилось | Условие сразу ложно / диапазон пуст | Проверь первое состояние |
| Одно число потерялось | Стоп range исключён / знак < вместо ≤ | Возьми n = 1 |
| Итог печатается много раз | Итоговый print внутри тела | Посмотри уровень отступа |
| Сумма равна последнему числу | Обнуление накопителя в теле | Запиши сумму после двух проходов |
| while не заканчивается | Нет изменения данных / выхода | Меняется ли условие по смыслу? |
| Вывод начинается не с того числа | Изменение стоит перед print | Проверь порядок команд |
| IndentationError / SyntaxError | Отступы / пропущенное двоеточие | Проверь заголовок и границы тела |
Создай файл в IDLE
File → New File. Введи код с одинаковыми отступами; не смешивай табуляцию и пробелы.
Сохрани и запусти
File → Save, имя с расширением .py. Run → Run Module или F5. Ввод появляется в окне Shell.
Проверь границы
Пустой диапазон, одно значение, крайняя граница; для последовательности — сразу сигнал, отрицательные числа и нули по условию.
12Дополнительно: break, continue и вложенные циклы
Этот раздел можно изучить после базовой практики. Для первых задач достаточно обычных while, for и if.
break завершает ближайший цикл сразу. continue пропускает оставшиеся команды текущего прохода: в while дальше проверяется условие, в for берётся следующий элемент.
for number in range(1, 7):
if number == 4:
break
print(number)Вывод: 1, 2, 3. На значении 4 команда break завершит цикл раньше print.
for number in range(1, 5):
if number == 2:
continue
print(number)Вывод: 1, 3, 4. Цикл не завершён: только проход со значением 2 не дошёл до print.
for row in range(2):
for column in range(3):
print(row, column)Будет шесть строк: 0 0; 0 1; 0 2; 1 0; 1 1; 1 2. Сначала внутренний цикл заканчивает все свои значения для row = 0, затем начинается новый внутренний перебор для row = 1.
Подумай: Если внутренний цикл имеет 4 прохода, а внешний 3, сколько раз выполнится команда внутреннего тела?
12 раз: для каждого из трёх внешних проходов происходит четыре внутренних. Это верно для показанной формы, где диапазоны фиксированы и досрочного выхода нет.
13Самопроверка: 10 вопросов с объяснениями
Сначала выбери ответ самостоятельно. Пояснение относится именно к выбранному варианту; можно сбросить вопрос и попробовать ещё раз.
number = 1
while number <= 3:
number += 1Ответов пока нет.
14Практика и источники
Теория рассчитана на несколько занятий. Для первого блока достаточно for, range, счётчика и накопителя. Во втором блоке добавляются while, сигнал окончания и арифметическая обработка числа. Дополнительные задачи требуют совместить несколько идей.
Практика открыта: 12 задач C1–C12. Сохраняй решения в отдельных файлах .py, проверяй их на примерах, собственных тестах и в сервисе проверки.
- Информатикс: while, Python 3.
- Информатикс: for и range.
- Python 3: управление выполнением, for, range, break и continue.
Изложение, визуальные разборы и задачи адаптированы для этого школьного курса. Синтаксис соответствует Python 3.
Следующая тема: строки
После циклов переходим к обработке текста: методы строк, примеры применения и задачи.