Как решать задачи «что выведет программа»
Решение всегда идёт в 3 шага: прочитать код построчно сверху вниз, записывать значения переменных после каждой строки и только в конце собрать вывод. Угадывать по общему виду кода — самый верный путь к ошибке.
Квиз находится над статьёй. В каждом вопросе — короткий код и 4 варианта ответа. Выберите вариант, и тренажёр сразу скажет «Верно» или «Не совсем», а под вариантами появится объяснение. Кнопка «Дальше» открывает следующий вопрос, в конце показывается счёт. Не торопитесь: на каждый вопрос стоит потратить минуту и мысленно выполнить код, а не выбирать ответ, который «выглядит правильно». Если ответ не совпал, вернитесь к коду и найдите ловушку, в которую попали.
Главное правило: компьютер выполняет ровно то, что написано, а не то, что имел в виду автор. Поэтому, читая код в уме, нужно на время стать интерпретатором — педантичным и буквальным. Если в строке стоит "2" + "3", интерпретатор не задумывается, что автор, наверное, хотел сложить числа: он склеит строки. Чтение кода — отдельный навык, и он не появляется сам собой от написания программ: его нужно тренировать целенаправленно. Трассировка, о которой пойдёт речь ниже, превращает буквальное чтение кода в простую привычку. Руководство PEP 8 не случайно начинается с мысли, что код читают гораздо чаще, чем пишут.
Трассировка: таблица значений переменных
Трассировка — это таблица, в которой по шагам записывают значения всех переменных. Она нужна, когда в коде есть цикл или переменная меняется больше 2 раз: держать всё в голове ненадёжно. Трассировка на бумаге особенно выручает там, где компьютера нет, — например, на письменной части экзамена.
total = 0
k = 1
while k <= 4:
total += k * k
k += 1
print(total)
| Шаг | k до шага | Условие k <= 4 | total после шага | k после шага |
| 1 | 1 | истина | 1 | 2 |
| 2 | 2 | истина | 5 | 3 |
| 3 | 3 | истина | 14 | 4 |
| 4 | 4 | истина | 30 | 5 |
| — | 5 | ложь, выход | выводится 30 | — |
Обратите внимание на последнюю строку таблицы: проверка условия — тоже шаг. Многие останавливают трассировку на четвёртом проходе и забывают, что цикл завершается именно проверкой. Ещё одна частая ошибка — записать новое значение k раньше, чем посчитан total. Порядок строк в теле цикла важен, и таблица его сохраняет. Подробно о том, как устроен такой цикл, рассказано в уроке про цикл while.
10 ловушек, на которых ошибаются чаще всего
Большинство неверных ответов на вопрос «что выведет программа» связано с 10 правилами Python, которые новички знают, но забывают применить. Их полезно держать перед глазами. Большинство ловушек из таблицы встречается в квизе над статьёй.
| Ловушка | Пример | Результат |
| Плюс склеивает строки | "1" + "1" | 11 |
| Деление / всегда дробное | 8 / 2 | 4.0 |
| range не включает правую границу | list(range(3)) | [0, 1, 2] |
| Индексы начинаются с 0 | "кот"[1] | о |
| print ставит пробел между значениями | print("a", "b") | a b |
| Отступ решает, что внутри цикла | print с отступом и без | много строк или одна |
| Присваивание списка не копирует его | b = a | изменения видны в обоих |
| Функция без return | print(f()) | None |
| and выполняется раньше or | True or False and False | True |
| Переменная цикла живёт после цикла | 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].
- Сначала ответ, потом запуск. Запишите свой ответ на бумаге и только потом проверьте в редакторе. Исследование Roediger и Karpicke показало, что попытка вспомнить сама по себе укрепляет память[3].
- Объясните ошибку словами. Если ответ не совпал, сформулируйте, какое правило вы не применили.
- Меняйте код. Поменяйте одно число в примере и снова предскажите результат в уме.
- Пишите вопросы сами. Придумайте код с ловушкой для друга — это проверяет понимание лучше любого теста.
Через неделю вернитесь к вопросам, в которых ошиблись, и решите их снова, не подглядывая в объяснения. Каждая такая задача «что выведет программа», решённая повторно через несколько дней, закрепляется надёжнее новой. Если ответ опять неверный, правило ещё не усвоено, и стоит вернуться к уроку по этой теме.
Зачем задачи «что выведет программа» нужны в школе
Умение исполнить программу в уме входит в школьный курс: по федеральной образовательной программе с 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="", значения склеятся без разделителя.
Подходит ли квиз для подготовки к ОГЭ?
Как разминка — да: вопросы «что выведет программа» тренируют внимательность к деталям. Но экзаменационные задания длиннее, поэтому решайте и полноценные задачи на программирование.
Где взять ещё задачи на вывод?
Возьмите любой пример из урока, закройте вывод и предскажите его. Ещё лучше — меняйте в примере одно значение и каждый раз отвечайте заново.