Проверить программы онлайн · файлы остаются в браузере

Ветвления и циклы — практикум

10 класс, углублённый уровень. Занятие четвёртое: выбор между ветками, сложные условия и цикл, у которого число повторений заранее неизвестно.

План на пару. Сначала тренажёр: двенадцать коротких задач, ответ — что напечатает Python. Потом три своих программы: календарь, исполнитель из задания 13 ЕГЭ и расчёт накоплений. Проверяет их оболочка Проверка.bat из общей папки: она запускает программу на семи наборах данных. Интернет не нужен.

Часть 1. Тренажёр: что напечатает Python

Шесть типов задач, по две на каждый. Считать в уме или на бумаге: запустив программу, вы узнаете ответ, но не научитесь. Ответ — ровно то, что появится на экране; если программа печатает несколько строк, перечисли их через пробел. Последний тип — задание 13 ЕГЭ: там кода нет вовсе, исполнителя ведут вручную.

0 верно из 12

Часть 2. Как выбирают и как повторяют

Ветвление: работает ровно одна ветка

фрагмент программы — набери его сам

Ветки проверяются сверху вниз, и выполняется первая подошедшая; остальные даже не вычисляются. Отсюда правило: узкое условие ставят раньше широкого. Поменяй две первые ветки местами — и «больше ста» не напечатается никогда, ведь всё, что больше 100, больше и 10.

Несколько отдельных if подряд — совсем другая конструкция: там проверяется каждый, и сработать может сразу несколько. Это не ошибка сама по себе, но путать их с лестницей — ошибка обычная.

Сложные условия

ОперацияИстинна, когдаПриоритет
not AA ложно1 — раньше всех
A and Bистинны обе2
A or Bистинна хотя бы одна3 — позже всех
фрагмент программы — набери его сам

Короткое замыкание. and не смотрит на правую часть, если левая ложна; or — если левая истинна. Поэтому защитную проверку («знаменатель не ноль», «список не пуст») ставят первой.

Закон де Моргана. not (A and B) — то же, что not A or not B, а not (A or B) — то же, что not A and not B. Проще запомнить словами: «неверно, что оба» значит «хотя бы один — нет».

Две частые ошибки. if x = 5 — это присваивание, Python сразу скажет SyntaxError. А if x == 1 or 2 ошибкой не считается и потому опаснее: or вернёт число 2, которое истинно, и условие сработает всегда. Правильно: if x == 1 or x == 2.

Цикл с условием

фрагмент программы — набери его сам

for берут, когда число шагов известно заранее («перебрать все делители от 1 до n»). while — когда его считает сама задача: «пока число больше 1», «пока не накопили нужную сумму». Два следствия, из которых растут почти все ошибки в этой теме:

ПриёмКак выглядитГде встретится
счётчикk = k + 1 в телесколько шагов до цели
накопительs = s + n % 10сумма цифр числа
перебор цифрwhile n > 0: … n = n // 10задание 25 ЕГЭ
максимумif d > m: m = d внутри цикланаибольшая цифра, элемент

break прекращает весь цикл — так выходят, найдя нужное. continue бросает текущий проход и возвращается к проверке условия — так пропускают ненужные значения. В связке while True: … break условие выхода оказывается в середине тела; это законный приём, а не костыль.

Исполнитель из задания 13 ЕГЭ

На экране число. Команда A («Прибавь 1») увеличивает его на единицу. Команда B («Поменяй местами») меняет местами цифры десятков и единиц, но применяется только к числу, у которого цифра десятков меньше цифры единиц. Программа — последовательность команд, траектория — все промежуточные результаты. Для команд A, B, A и числа 13 траектория такая: 14, 41, 42.

Это ветвление внутри цикла в чистом виде: на каждом шаге сначала решаем, применима ли команда, и только потом выполняем. Обе цифры достаются знакомой арифметикой — n % 10 даёт единицы, n // 10 % 10 — десятки. На экзамене спросят, сколько существует программ с нужным результатом; сегодня учимся выполнять одну — руками и машиной.

Часть 3. Три программы

Задание 1 Календарь

Программа читает год и номер месяца (два целых числа, каждое со своей строки) и печатает, сколько в этом месяце дней, а второй строкой — високосный ли год. Напомним правило: год високосный, если делится на 4 и не делится на 100, а также если делится на 400.

Вход

2024
2

Вывод

Дней: 29
Високосный: да

Проверяется: лестница код, сложное условие с код и код, вложенное ветвление.

Если застрял

Високосность удобно посчитать один раз в отдельную переменную: код — и дальше пользоваться ею. Месяцы делятся на три случая: февраль, короткие (4, 6, 9, 11) и остальные. Проверка на короткий месяц — это одно длинное «или»: код.

Ловушка, ради которой это задание. Правило «делится на 4» — только его первая треть. 1900 год делится на 4, но это век, не кратный 400, и високосным он не был; 2000 — был. Оболочка подаст 1900, 2000, 2100 и 1600: программа, которая проверяет одну делимость на 4, провалится на первом же наборе.

Задание 2 Исполнитель

Тот самый исполнитель из задания 13 ЕГЭ. Программа читает начальное число (от 10 до 300), затем количество команд и сами команды — каждую с новой строки, буквой код или код. Команды выполняются по порядку; неприменимая команда пропускается — она ничего не делает, а исполнитель переходит к следующей. Печатай три строки: траекторию (числа после каждой выполненной команды через пробел), итоговое число и количество пропущенных команд.

Вход

55
3
B
A
B

Вывод

Траектория: 56 65
Результат: 65
Пропущено: 1

Проверяется: цикл с условием, ветвление внутри цикла, цифры числа через код и код. Заготовка к заданию 13 ЕГЭ.

Если застрял

Команды читаются по одной — ровно так же, как в прошлый раз читались километры: код, а дальше в цикле код. Считай проходы сам: код, код, в конце тела код.

Цифры: код — единицы, код — десятки. Условие применимости строгое: десятки меньше единиц, при равных цифрах команда не выполняется. Меняются только два младших разряда, старшие остаются на месте: 104 превращается в 140, а не в 401. Собрать новое число можно так: код.

Траекторию не печатай по ходу — в IDLE она перемешается с вводом команд. Копи её в строке: перед циклом код, после каждой выполненной команды код, а после цикла одной командой код. Число к строке само не приклеится — нужен код. Разбери на бумаге пример из ЕГЭ: число 13 и команды код, код, код дают 14, 41, 42.

Задание 3 Накопления

Вклад раз в год вырастает на код процентов, копейки отбрасываются: за год прибавляется код рублей. Программа читает три целых числа — сумму вклада, процент и цель — и печатает, через сколько лет сумма станет не меньше цели, а второй строкой — какой она к этому моменту будет. Если цель достигнута уже сейчас, ответ — ноль лет.

Вход

1000
20
2000

Вывод

Лет: 4
Сумма: 2073

Проверяется: код со счётчиком, условие выхода, проверка условия перед первым проходом.

Если застрял

Схема обычная: код, внутри начисляем проценты и увеличиваем счётчик лет. Обрати внимание: проценты считаются от текущей суммы, а не от начальной, — иначе вклад будет расти слишком медленно.

Ловушка, ради которой это задание. Оболочка подаст набор, где цель уже достигнута: 20000 рублей при цели 19999. Верный ответ — код, и обычный код даёт его сам собой, потому что проверяет условие до первого прохода. А вот код с проверкой в конце насчитает лишний год.

Часть 4. Сдача

  1. Файлы zadanie1.py … zadanie3.py лежат в твоей папке, отладочные print из них убраны.
  2. В общей папке двойной щелчок по Проверка.bat.
  3. «Найти мои файлы» → «Проверить всё».
  4. Покажи учителю два экрана: тренажёр наверху этой страницы и итог оболочки.
Если вместо окна открылся текст программы — файл открылся в IDLE как код. Нажми F5, окно появится.

Оболочка показывает, на каких данных программа ошиблась и что должна была вывести. Это подсказка: исправляй и проверяй снова, попыток сколько угодно.

Подсказка: ветвления, условия и циклы

Ветвление

В лестнице if / elif / else выполняется первая подошедшая ветка, остальные не проверяются. Узкое условие ставят раньше широкого: если сначала написать x > 10, то ветка x > 100 недостижима. Несколько отдельных if — другая конструкция: там сработает каждый подошедший. Ветка может не печатать, а менять переменную. Вложенный else относится к ближайшему if — по отступу.

Сложные условия

операцияистинна, когдаприоритет
not AA ложно1 — раньше всех
A and Bистинны обе2
A or Bистинна хотя бы одна3 — позже всех

x > 0 or x < −5 and x % 2 == 0 читается как x > 0 or (x < −5 and x % 2 == 0). Двойное неравенство пишется как в математике: 1 < x < 10. Короткое замыкание: and не смотрит правую часть при ложной левой, or — при истинной; поэтому защитную проверку (x != 0) ставят первой. Де Морган: not (A and B) = not A or not B; not (A or B) = not A and not B.

Две ошибки: if x = 5 — присваивание вместо сравнения (SyntaxError); if x == 1 or 2 — синтаксис верный, а смысл нет: or вернёт 2, условие истинно всегда. Правильно: x == 1 or x == 2.

Цикл с условием

while проверяет условие ПЕРЕД каждым проходом, поэтому тело может не выполниться ни разу. Переменную двигает сам программист — иначе вечный цикл (в IDLE прерывается Ctrl+C). for берут, когда число шагов известно заранее, while — когда его определяет сама задача.

приёмкак выглядит
счётчикk = k + 1 в теле цикла
накопительs = s + n % 10
перебор цифрwhile n > 0: … n = n // 10
максимумif d > m: m = d внутри цикла

break прекращает весь цикл, continue — только текущий проход. После выхода переменная хранит уже НЕподошедшее значение: while i * i < 50 закончится при i = 8.

Високосный год

код. Одной делимости на 4 мало: 1900 и 2100 — обычные годы, 1600 и 2000 — високосные. В феврале 29 дней, если год високосный, иначе 28; по 30 дней в апреле, июне, сентябре и ноябре, в остальных месяцах 31.

Исполнитель (задание 13 ЕГЭ)

Команда A прибавляет 1. Команда B меняет местами цифры десятков и единиц и применима, только если десятки строго меньше единиц; меняются лишь два младших разряда: 104 → 140. Цифры: n % 10 — единицы, n // 10 % 10 — десятки. Для команд A, B, A и числа 13 траектория 14, 41, 42. Неприменимая команда пропускается, а не останавливает программу.

Материалы подготовлены с использованием технологий искусственного интеллекта.