Чтение кода в уме: десять задачек на вывод и как их решать

Практикумобновлено 07.10.202610 мин чтенияесть тренажёр

«Что выведет программа?» — задание, в котором нужно предсказать результат кода, не запуская его. Ниже квиз из 10 вопросов по основам Python с объяснениями, а в статье — как вести трассировку, какие ловушки встречаются чаще всего и как тренировать чтение кода по 10 минут в день.

Загружаем…

Как решать задачи «что выведет программа»

Решение всегда идёт в 3 шага: прочитать код построчно сверху вниз, записывать значения переменных после каждой строки и только в конце собрать вывод. Угадывать по общему виду кода — самый верный путь к ошибке.

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

Главное правило: компьютер выполняет ровно то, что написано, а не то, что имел в виду автор. Поэтому, читая код в уме, нужно на время стать интерпретатором — педантичным и буквальным. Если в строке стоит "2" + "3", интерпретатор не задумывается, что автор, наверное, хотел сложить числа: он склеит строки. Чтение кода — отдельный навык, и он не появляется сам собой от написания программ: его нужно тренировать целенаправленно. Трассировка, о которой пойдёт речь ниже, превращает буквальное чтение кода в простую привычку. Руководство PEP 8 не случайно начинается с мысли, что код читают гораздо чаще, чем пишут.

Трассировка: таблица значений переменных

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

total = 0
k = 1
while k <= 4:
    total += k * k
    k += 1
print(total)
Шагk до шагаУсловие k <= 4total после шагаk после шага
11истина12
22истина53
33истина144
44истина305
—5ложь, выходвыводится 30—

Обратите внимание на последнюю строку таблицы: проверка условия — тоже шаг. Многие останавливают трассировку на четвёртом проходе и забывают, что цикл завершается именно проверкой. Ещё одна частая ошибка — записать новое значение k раньше, чем посчитан total. Порядок строк в теле цикла важен, и таблица его сохраняет. Подробно о том, как устроен такой цикл, рассказано в уроке про цикл while.

10 ловушек, на которых ошибаются чаще всего

Большинство неверных ответов на вопрос «что выведет программа» связано с 10 правилами Python, которые новички знают, но забывают применить. Их полезно держать перед глазами. Большинство ловушек из таблицы встречается в квизе над статьёй.

ЛовушкаПримерРезультат
Плюс склеивает строки"1" + "1"11
Деление / всегда дробное8 / 24.0
range не включает правую границуlist(range(3))[0, 1, 2]
Индексы начинаются с 0"кот"[1]о
print ставит пробел между значениямиprint("a", "b")a b
Отступ решает, что внутри циклаprint с отступом и безмного строк или одна
Присваивание списка не копирует егоb = aизменения видны в обоих
Функция без returnprint(f())None
and выполняется раньше orTrue or False and FalseTrue
Переменная цикла живёт после циклаfor i in range(3)i равно 2

Все эти правила описаны в официальной документации Python[1]. Там же приоритет операторов приведён отдельной таблицей, и and в ней стоит выше or. Если какая-то ловушка удивила, не спешите дальше: напишите три своих примера на неё и проверьте их запуском. Так правило перейдёт из «знаю» в «замечаю».

Разбор: строки и числа

Первое, что нужно определить, читая выражение, — это тип каждого значения: строка или число. От типа зависит, что сделает знак операции.

a = "7"
b = 7
print(a * 2, b * 2)
print(len(a + a))
77 14
2

Строка, умноженная на 2, повторяется дважды — «77». Число, умноженное на 2, даёт 14. Во второй строке a + a — это склейка «77», а её длина равна 2 символам. По документации Python строки неизменяемые: любая операция с ними создаёт новую строку. Тот, кто не следит за кавычками, ответит 14 в первой строке и 14 во второй. Отдельно запомните: строку нельзя сложить с числом, такая попытка остановит программу с ошибкой TypeError. Типы и их преобразование подробно разобраны в статье о типах данных Python.

Разбор: циклы и границы

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

for i in range(3):
    print(i)
print("конец", i)
0
1
2
конец 2

Цикл выполняется 3 раза для значений 0, 1 и 2. Последнее print стоит без отступа, поэтому выполняется один раз, после цикла, и переменная i в этот момент хранит 2 — последнее выданное значение, а не 3. Ответ «конец 3» — типичный промах. Для while правило другое: цикл выходит, когда условие стало ложным, поэтому переменная обычно «перелетает» границу, как в квизе, где n становится 12 при условии n < 10. Повторить запись диапазонов поможет урок про цикл for и range.

Разбор: списки и функции

Списки в Python изменяемые, и это порождает самые хитрые вопросы: если передать список в функцию и изменить его там, изменение будет видно снаружи.

def add_item(items):
    items.append("x")

letters = ["a"]
add_item(letters)
print(letters)
['a', 'x']

Функция ничего не возвращает, но список изменился: параметр items и переменная letters указывают на один и тот же объект. С числами и строками так не получится — они неизменяемые, и присваивание внутри функции не затронет переменную снаружи. Вторая ловушка с функциями — забытый return: функция посчитает результат и выбросит его, а print покажет None. О том, как работают параметры, рассказывает урок о функциях Python.

Как тренировать чтение кода

Чтобы навык держался, лучше решать по 5–10 задач на вывод несколько раз в неделю, чем 50 за один вечер. Распределённая практика закрепляет материал прочнее, чем занятия одним большим блоком[2].

  1. Сначала ответ, потом запуск. Запишите свой ответ на бумаге и только потом проверьте в редакторе. Исследование Roediger и Karpicke показало, что попытка вспомнить сама по себе укрепляет память[3].
  2. Объясните ошибку словами. Если ответ не совпал, сформулируйте, какое правило вы не применили.
  3. Меняйте код. Поменяйте одно число в примере и снова предскажите результат в уме.
  4. Пишите вопросы сами. Придумайте код с ловушкой для друга — это проверяет понимание лучше любого теста.

Через неделю вернитесь к вопросам, в которых ошиблись, и решите их снова, не подглядывая в объяснения. Каждая такая задача «что выведет программа», решённая повторно через несколько дней, закрепляется надёжнее новой. Если ответ опять неверный, правило ещё не усвоено, и стоит вернуться к уроку по этой теме.

Зачем задачи «что выведет программа» нужны в школе

Умение исполнить программу в уме входит в школьный курс: по федеральной образовательной программе с 8 класса ученики изучают ветвления, циклы и работу со строками[4], а понимать чужой код нужно на каждом из этих уроков.

На ОГЭ по информатике часть заданий выполняется на бланке, без компьютера: по материалам ФИПИ, задания 1–10 решаются письменно, а 11–16 — на компьютере. Значит, проверить ответ запуском получится не всегда, и привычка исполнять код на бумаге здесь полезна. На ЕГЭ задания на программирование выполняются с компьютером, но прочитать и понять условие с кодом всё равно нужно самому. Тот же навык пригождается при отладке: прежде чем искать ошибку, надо понять, что программа делает на самом деле.

Когда квиз на вывод не поможет

Квиз не поможет, если пропущены базовые темы: предсказать результат цикла, не зная, как работает цикл, невозможно. Вот 4 ситуации, когда начать стоит с другого.

  • Ученик написал меньше 10 своих программ. Сначала нужен опыт письма, иначе чтение превращается в угадывание.
  • Ошибки в 7 вопросах из 10 по одной теме. Это сигнал вернуться к уроку, а не решать новые вопросы.
  • Нужно научиться писать программы с нуля. Разбор чужого кода дополняет письмо, но не заменяет его; 1 решённая задача с автопроверкой здесь полезнее.
  • Код длиннее 30 строк. Его разумнее разбирать отладкой и выводом промежуточных значений, чем держать в голове.

«Чтобы узнать результат, проще всего запустить код, а читать его глазами незачем». Это миф: запуск показывает, что получилось, но не объясняет почему, а на письменной части экзамена компьютера нет вовсе.

«Короткий код из 3 строк можно не разбирать по шагам». Это не подтверждается: самые коварные ловушки, вроде b = a для списков или забытого return, умещаются именно в 3–4 строки.

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

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

  • Нельзя выбирать ответ, не выполнив код мысленно хотя бы один раз полностью.
  • Не стоит читать объяснение до ответа — пропадает эффект самопроверки.
  • Не следует пропускать проверку условия на последнем шаге цикла.
  • Не стоит путать индекс и номер: первая буква строки имеет индекс 0.
  • Нельзя игнорировать кавычки: «5» и 5 ведут себя по-разному.
  • Не допускается решать 50 вопросов подряд без перерыва — внимание падает, ошибки становятся случайными.

Ещё 10 вопросов на смешанные темы собраны в квизе по Python.

Источники

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

[2] 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.

[3] 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.

[4] Приказ Минпросвещения России от 18.05.2023 № 370 «Об утверждении федеральной образовательной программы основного общего образования».

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

[6] van Rossum G., Warsaw B., Coghlan N. PEP 8 — Style Guide for Python Code. Python Software Foundation, 2001.

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

Можно ли решать такие вопросы без компьютера?

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

Сколько времени тратить на один вопрос?

На короткий код — 1–2 минуты. Если вопрос занимает больше 5 минут, нарисуйте таблицу переменных целиком, а не держите значения в голове.

Что делать, если программа выведет ошибку?

Такой вариант тоже бывает правильным. Определите, на какой строке выполнение остановится, и какой тип ошибки возникнет: TypeError, NameError, IndexError или ZeroDivisionError.

Почему print выводит значения через пробел?

По умолчанию параметр sep равен пробелу. Если написать sep="", значения склеятся без разделителя.

Подходит ли квиз для подготовки к ОГЭ?

Как разминка — да: вопросы «что выведет программа» тренируют внимательность к деталям. Но экзаменационные задания длиннее, поэтому решайте и полноценные задачи на программирование.

Где взять ещё задачи на вывод?

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