Проверь себя: угадай вывод программы и обойди типичные ловушки

Тренажёрыобновлено 07.10.20269 мин чтенияесть тренажёр

Квиз по Python на этой странице — 10 коротких программ, для каждой нужно угадать, что она выведет. Темы смешаны: строки, деление, срезы, списки, сравнения и отступы. Сначала пройдите квиз, не запуская код, а потом прочитайте разбор ловушек ниже: так станет ясно, какие правила языка вы знаете твёрдо, а какие — только на глаз.

Загружаем…

Как устроен квиз по Python

Квиз — это 10 вопросов, в каждом показан код и 4 варианта вывода. После клика сразу видно «Верно» или «Не совсем» и короткое объяснение, кнопка «Дальше» открывает следующий вопрос, а в конце появляется счёт.

Все программы в квизе по Python настоящие: каждую можно скопировать в окно Python на сайте и убедиться, что вывод совпадает с правильным ответом. Если вариант звучит как «ошибка IndexError», значит, программа не печатает ничего полезного, а останавливается с этой ошибкой. Результаты сохраняются только в вашем браузере и видны на странице прогресса. Код в вопросах оформлен по руководству PEP 8: отступ в 4 пробела и понятные имена, чтобы глаза цеплялись за смысл, а не за оформление.

Главное правило квиза — не запускать код до ответа. Ценность вопроса «что выведет программа» в том, что вы сами выполняете её в голове, строка за строкой. Если сначала запустить, а потом выбрать вариант, тренировки не будет: вы просто сравните две строчки текста. Квиз по Python готовит и к школьным проверкам. Похожий формат есть на экзаменах: в материалах ФИПИ к ОГЭ по информатике есть задания, где нужно понять результат работы короткой программы.

Как читать код глазами: трассировка

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

Возьмём программу из последнего вопроса, которым заканчивается квиз по Python. В ней переменная total копит сумму, а print стоит внутри цикла. Таблица показывает, что происходит на каждом шаге.

Шагitotal после строки total += iЧто напечатано
до цикла—0ничего
1111
2233
3366

Чтобы трассировка работала, соблюдайте 3 правила. Первое: двигайтесь строго по одной строке, не перепрыгивая через «очевидные». Второе: после каждой строки записывайте новое значение, а не держите его в голове. Третье: отдельно отмечайте, что попадает на экран, — ведь вывод и значение переменной не одно и то же. Через несколько недель такой практики таблица становится не нужна, но привычка читать код медленно остаётся.

Ловушка 1: строки и числа

Если значение стоит в кавычках, это строка, даже когда внутри цифры. Для строк операторы + и * работают иначе, чем для чисел: + склеивает, а * повторяет.

print("5" + "7")
print(5 + 7)
print("ха" * 3)
57
12
хахаха

Отсюда ответы на первый и четвёртый вопросы квиза. Особенно коварна эта ловушка в программах с вводом: функция input() всегда возвращает строку, поэтому два введённых числа без int() склеятся. А вот сложить строку с числом, например "5" + 7, не получится вовсе: Python остановится с ошибкой TypeError. Подробнее о типах и их преобразовании рассказывает статья про типы данных Python.

Ловушка 2: три вида деления

В Python 3 оператора деления 3: / даёт дробный результат, // — целую часть, а % — остаток. Путаница между ними — частая причина неверного ответа в квизе.

Выражение 10 / 2 даёт 5.0, а не 5: результат обычного деления всегда имеет тип float, даже если числа делятся нацело. Это поведение описано в официальной документации Python[1], и оно отличается от Python 2, который давно не поддерживается. Пара 17 // 5 и 17 % 5 даёт 3 и 2, потому что 17 = 5 · 3 + 2. Остаток удобно проверять так: умножьте частное на делитель, прибавьте остаток и сравните с исходным числом. Деление на ноль любым из трёх операторов приводит к ошибке ZeroDivisionError. Все операторы с приоритетами собраны в статье про операторы Python с таблицей.

Ловушка 3: индексы, срезы и границы

Индексы в Python начинаются с 0, а правая граница среза и range не входит в результат. Эти 2 правила объясняют больше половины ошибок «на единицу».

s = "питон"
print(s[0], s[-1])
print(s[1:3])
print(list(range(2, 6)))
п н
ит
[2, 3, 4, 5]

Отрицательный индекс считает с конца: -1 — последний символ, -2 — предпоследний. Срез [1:3] берёт элементы с номерами 1 и 2. В списке из трёх элементов последний индекс равен 2, поэтому обращение к items[3] заканчивается ошибкой IndexError — это девятый вопрос квиза. Удобный приём: длина среза [a:b] равна b - a, то есть в [1:3] ровно два символа.

Ловушка 4: что меняет объект, а что нет

Строки в Python неизменяемы, а списки можно менять на месте. Поэтому s.upper() не трогает исходную строку, а b.append(3) меняет список, на который ссылаются сразу два имени.

s = "кот"
s = s.upper()
print(s)

a = [1, 2]
b = a[:]
b.append(3)
print(a, b)

Здесь обе ловушки обезврежены. Результат upper() сохранён обратно в s, и программа печатает «КОТ». А список скопирован срезом a[:], поэтому добавление в b не задевает a: выводится [1, 2] [1, 2, 3]. В квизе было наоборот: b = a не создаёт копию, а лишь даёт тому же списку второе имя. Методы строк подробно разобраны на странице про строки в Python.

Ловушка 5: цепочки сравнений и отступы

Запись 3 < 5 < 4 — это не ошибка, а цепочка сравнений: Python читает её как «3 меньше 5 и 5 меньше 4». Вторая часть ложна, поэтому результат False.

Цепочки удобны для проверки диапазона: 0 <= x <= 100 читается так же, как в математике. Но стоит помнить, что сравнения выполняются попарно, и каждая пара должна быть истинной. Вторая часть ловушки — отступы. Строка с отступом под for выполняется на каждом шаге цикла, строка без отступа — один раз после него. В десятом вопросе print стоит внутри цикла, поэтому на экране три числа, а не одно. Сдвиньте его влево на 4 пробела, и программа напечатает только 6.

Как тренироваться, чтобы был толк

Чтобы вопросы действительно учили, проходите их несколько раз с перерывами в 1–3 дня. Повторная самопроверка закрепляет знания лучше, чем перечитывание объяснений.

Так показали исследования памяти. Roediger и Karpicke обнаружили, что попытка вспомнить ответ сохраняет материал в памяти надёжнее, чем повторное чтение того же текста[2]. Обзор Cepeda и соавторов показал пользу распределённой практики: занятия с паузами между ними дают более прочный результат, чем одно длинное занятие[3]. Отсюда простой план. Пройдите все 10 заданий, выпишите вопросы с ошибками, через день решите их снова без подсказок. Для каждого неверного ответа найдите в разборе выше правило, которое вы нарушили, и придумайте свою программу с тем же подвохом. Ещё 10 вопросов по основам — на странице «Что выведет программа?».

Миф: «Если ответил правильно, значит, тема понятна». Это не подтверждается: правильный ответ можно угадать с вероятностью один к четырём. Проверка простая — объясните вслух, почему остальные три варианта неверны.

Когда такая тренировка не поможет

Вопросы на вывод не помогут научиться писать программы с нуля: он тренирует чтение кода, а не его сочинение. В этих 4 случаях нужен другой формат.

  • Ребёнок ещё не написал ни одной программы. Сначала 2–3 занятия с print, input и переменными, потом вопросы на вывод.
  • Нужно готовиться к заданию 16 ОГЭ. Там пишут программу целиком, поэтому нужны задачи с автопроверкой, а не выбор из 4 вариантов.
  • Ответ выбирают за 1–2 секунды наугад. Без пошагового чтения выбор превращается в лотерею.
  • Ученику 7–9 лет, и он учится в Scratch. Текстовый код пока рано читать, лучше блочные задания.

Чего делать нельзя

Нельзя превращать проверку себя в соревнование на скорость: смысл в медленном и точном чтении. Шесть правил помогут извлечь из вопросов максимум.

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

Миф: «Читать чужой код — пустая трата времени, надо сразу писать своё». Этому нет подтверждения: чтобы найти ошибку в собственной программе, нужно уметь мысленно выполнять код. Вопросы на этой странице тренируют именно это умение.

Источники

[1] The Python Tutorial (официальная документация Python 3). Python Software Foundation.

[2] Roediger H. L., Karpicke J. D. Test-enhanced learning: Taking memory tests improves long-term retention // Psychological Science. 2006. Vol. 17, № 3. P. 249–255.

[3] Cepeda N. J., Pashler H., Vul E., Wixted J. T., Rohrer D. Distributed practice in verbal recall tasks: A review and quantitative synthesis // Psychological Bulletin. 2006. Vol. 132, № 3. P. 354–380.

[4] ФИПИ. Методические рекомендации для обучающихся по организации индивидуальной подготовки к ОГЭ 2026 года. Информатика. М., 2026.

Вопросы и ответы

Сколько времени занимает квиз по Python?

Обычно 10–15 минут, если честно выполнять каждую программу в голове. Быстрее не нужно: скорость придёт сама.

С какого класса подходят эти вопросы?

С того момента, когда ученик знаком с переменными, циклом for, строками и списками. По школьной программе это темы 8–9 классов, но многие дети доходят до них раньше.

Почему вывод в браузере и в IDLE может выглядеть по-разному?

Для вопросов этого квиза вывод одинаковый. Отличаться может только текст сообщения об ошибке: в IDLE он длиннее и содержит полный Traceback.

Что делать, если ответил неверно на половину?

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

Можно ли придумать свои вопросы?

Да, и это отличное упражнение. Напишите программу на 3–5 строк с подвохом, предскажите вывод, затем запустите и проверьте себя.

Сохраняется ли результат?

Счёт пройденных тестов хранится в браузере и показывается на странице прогресса. На другом устройстве его не будет.