arrow_backНазад к полевым заметкам
PYTHON Опубликовано 4 Aug 2026

Программирование на экзамене: ответы на Python, которые набирают баллы

Как писать код на Python на экзаменах, чтобы получить полный балл — структура, граничные случаи и управление временем под давлением.

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

Прочитай критерии перед тем, как прочитать задачу дважды

Большинство экзаменов по программированию — вопросы со свободным ответом в стиле AP CS A, университетские промежуточные экзамены, тесты на курсах программирования — публикуют правила частичного зачёта. Типичная строка критерия выглядит так: "1 балл за правильную структуру цикла, 1 балл за правильное возвращаемое значение, 1 балл за обработку пустого списка." Если ты напишешь компактное выражение в одну строку, которое даст правильный ответ, но пропустит явный цикл, некоторые преподаватели снимут баллы, даже если результат правильный.

Прежде чем что-либо писать, определи части, которые преподаватель вероятно будет проверять отдельно:

  • Сигнатура функции точно соответствует тому, что было задано (имя, порядок параметров, тип возврата)
  • Базовый случай и рекурсивный случай, если ожидается рекурсия
  • Границы цикла (ошибки на единицу — самая частая потеря баллов)
  • Граничные случаи: пустой ввод, ввод с одним элементом, отрицательные числа, дубликаты

Напиши эти случаи как комментарии в первую очередь. # обработка пустого списка, # базовый случай: n == 0. Это займёт десять секунд и гарантирует, что ты не забудешь случай, который преподаватель специально ищет.

Структурируй код так, чтобы частичный зачёт был виден

Сравни два ответа на задачу "напиши функцию, которая возвращает второе по величине число в списке":

def second_largest(nums):
    return sorted(nums)[-2]
def second_largest(nums):
    if len(nums) < 2:
        return None
    largest = second = float('-inf')
    for n in nums:
        if n > largest:
            second = largest
            largest = n
        elif n > second and n != largest:
            second = n
    return second

Первый ответ правильный для корректно сформированного ввода, но падает на списке с менее чем двумя элементами и даёт неправильный ответ на дубликатах типа [5, 5, 3] (возвращает 5, что может быть неправильно в зависимости от спецификации). Второй длиннее, но каждая строка критерия — граничный случай, правильная логика, правильное возвращаемое значение — явная и занимает отдельную строку, которую преподаватель может отметить. На третированном экзамене второй вариант почти всегда набирает больше баллов, хотя его дольше печатать.

Не оптимизируй преждевременно, но не оставляй очевидные баги

Вопросы на экзаменах редко проверяют знание Big-O, если они это не сказали явно. Если условие говорит "напиши функцию, которая находит дубликаты", вложенный цикл с O(n²) — это нормально, если только в условии не указан большой ввод или не требуется эффективное решение. Тратить время экзамена на преобразование в подход с использованием set с O(n), когда это не требовалось, — это время, которое ты потеряешь.

Тем не менее, некоторые ошибки всегда будут стоить тебе баллов независимо от критериев:

  • Использование == вместо is непоследовательно, вызывающее ошибки логики (редко в экзаменах Python, но появляется в вопросах с большим числом сравнений)
  • Изменение списка во время итерации по нему — for x in lst: lst.remove(x) — классическая экзаменационная ловушка, которая производит молчаливо неправильный результат
  • Забывание return и вывод на печать вместо этого — много автопроверок проверяют возвращаемые значения, не stdout
  • Ошибка на единицу в range()range(len(nums)) vs range(len(nums) - 1) — стоит проверять каждый раз, когда ты это пишешь

Трассируй свой код вручную перед отправкой

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

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

Управляй временем как ресурсом, а не как запоздалой мыслью

Если раздел со свободным ответом стоит 9 баллов и разбит на три подвопроса, отбудьте примерно равное время на каждый и переходи дальше, если ты застрял дольше этого бюджета — полунаписанный, но почти правильный подвопрос (b) стоит больше сырых баллов, чем идеальный подвопрос (a) и пустой подвопрос (c). Напиши функцию-заглушку с правильной сигнатурой и pass или угадай, даже если ты не можешь доделать логику; одна только правильная сигнатура иногда стоит балл критерия.

Чтобы узнать больше о написании чистого, тестируемого Python вне экзаменационного класса и о структурах данных, которые постоянно появляются в этих вопросах, посмотри связанные разделы Python и Computer Science на Korra Studio.

Написано с помощью ИИ, проверено и опубликовано Михалом Пильхом (CISSP), Korra Studio.

Готовы пойти дальше?

Это одна заметка из базы знаний Korra Studio — платформа сочетает каждую тему с наставничеством один на один.

Начать бесплатноarrow_forward