Федеральный портал школ России
Закрыть

Урок 3. Python: Docstring и проверяемые примеры

18.10.2026 - Андрей -

  • Учебные программы
  • Информатика

Программирование на Python и C++ · 8 класс

Урок 3 из 33 · 45 минут · Модуль «Документирование программы. Docstring, PEP 257»

Уровень: начинающий программист; Python 3.

Вся программа курса

В документации написано, что 125 секунд — это две полные минуты. Превратим пример в проверку, которая заметит случайную замену // на /.

Результат урока: Написать docstring с исполняемыми примерами, запустить doctest и отличить проверку примера от доказательства всех случаев.
Учителю: подготовка и план на 45 минут

Подготовьте компьютер, редактор, папку с правом записи, распечатку ученической части PDF, бумагу и ручку. Python 3.11+ и IDLE или редактор; запуск python lesson.py (либо python3 lesson.py). Внешние библиотеки не нужны. Установку и проверку запуска учитель выполняет заранее. Все программы, данные и ожидаемые ответы даны; регистрация детей и интернет на занятии не нужны.

Уровень — начинающий программист, 8 класс. Предпосылки: def, return, целое деление, контракт функции. В паре автор прогнозирует и вводит код, проверяющий ведёт журнал, затем роли меняются. Без компьютера выполните трассировку полного кода на бумаге и сопоставьте с готовыми результатами; учитель демонстрирует подготовленный запуск. Бумажный вариант не считается фактическим запуском ученика. Перед практикой учитель выдаёт готовый файл разобранного примера, чтобы дети тратили время на изменение и проверку, а не длинное перепечатывание. Матрица программы предназначена учителю.

МинутыРаботаРезультат
0–5ПроблемаВопрос и первое решение
5–14Понятия и примерСпособ проверки
14–25Практика 1Готовый продукт и проверка
25–33Практика 2Перенос способа
33–40ОбсуждениеАргумент и ограничение
40–45Индивидуальная проверкаСамостоятельный ответ

01. Проблемная ситуация

0–5 минут. Документация обещает full_minutes(125) → 2. Автор заменил // на / и получил 2.0833… Предложите, как обнаруживать такую ошибку без ручного просмотра после каждой правки. Запишите ещё два входа, важные для минуты как единицы.

02. Понятия и разобранный пример

5–14 минут: 4 минуты на понятия, 3 на пример, 2 на объяснение способа партнёру.

Документация, которую можно исполнить

Строка документации первой инструкцией функции описывает её назначение. По PEP 257 краткое резюме отделяют пустой строкой от подробностей; тройные кавычки удобны для многострочного текста. В примере ниже >>> обозначает команду интерактивного сеанса, следующая строка — ожидаемое текстовое представление результата.

Модуль doctest находит такие примеры, выполняет и сравнивает фактический вывод с ожидаемым. Для числа 2 и 2.0 текст различен. Если функция возвращает значение, интерактивный пример показывает его представление; это не означает, что внутри функции обязателен print.

Сохраните файл lesson.py и выполните python lesson.py. Флаг verbose=True показывает ход проверки. Строка if __name__ == "__main__" запускает тесты при непосредственном выполнении файла; при импорте они не стартуют сами. Нет сторонних библиотек и регистрации. Успех трёх примеров говорит о трёх примерах, а не обо всех возможных входах.

Отступы набирайте обычными пробелами: 4 на уровень. При копировании с веб-страницы замените неразрывные пробелы обычными; полный код с обычными пробелами есть в PDF.

125//60=2,0//60=0,60//60=1. Запуск этого полного файла сообщает об успешных трёх тестах. Если заменить // на /, результаты станут вещественными: проверка увидит несовпадение, в том числе 0.0 вместо 0. Верните // перед дальнейшей работой.

def full_minutes(seconds):
    """Вернуть полные минуты; seconds — целое 0…3600.

    >>> full_minutes(125)
    2
    >>> full_minutes(0)
    0
    >>> full_minutes(60)
    1
    """
    return seconds // 60

if __name__ == "__main__":
    import doctest
    doctest.testmod(verbose=True)
Docstring хранит команду и ожидаемый результат; doctest выполняет команду и сравнивает вывод.
Docstring хранит команду и ожидаемый результат; doctest выполняет команду и сравнивает вывод.

03. Практика 1. Проверяем материал

Пример до и после границы

14–25 минут. Добавьте в docstring пять примеров из таблицы к трём уже имеющимся. Повтор 60 допустим для упражнения, но в рабочем наборе его можно удалить.

secondsПолные минуты
590
601
611
359959
360060

2 минуты — прогноз; 4 — примеры; 3 — успешный запуск, временная замена // на / и повторный запуск; 2 — возврат правильного кода. Продукт: файл и запись «какая правка вызвала какой сбой». Критерии: 8 тестов при сохранённом повторе, точные ожидаемые строки, исправление после опыта.

Практика 1: разбор и критерии

Все пять новых результатов приведены в таблице. С исходными тремя получается 8 примеров. При удалении повторного (60) — 7. Не меняйте ожидаемое 2 на 2.0833… ради зелёного отчёта: сначала сверяйте с контрактом полных минут.

04. Практика 2. Перенос способа

Новая функция и собственные doctest

25–33 минуты. Создайте seconds_left(seconds), возвращающую остаток секунд внутри минуты для целого 0…3600. Включите doctest для 0,59,60,125,3600. За 2 минуты вычислите ожидания, за 4 напишите полный файл, за 2 запустите. Критерии: собственный контракт, %, пять верных примеров.

Практика 2: разбор и критерии

Ответы 0,59,0,5,0. Остаток всегда от 0 до 59. Для 125 проверка 2·60+5=125 связывает обе функции. Полный файл ниже.

def seconds_left(seconds):
    """Вернуть остаток секунд; целое seconds в 0…3600.

    >>> seconds_left(0)
    0
    >>> seconds_left(59)
    59
    >>> seconds_left(60)
    0
    >>> seconds_left(125)
    5
    >>> seconds_left(3600)
    0
    """
    return seconds % 60

if __name__ == "__main__":
    import doctest
    doctest.testmod(verbose=True)

05. Обсуждение и границы вывода

33–40 минут. Можно ли после пяти успешных примеров удалить описание ограничений? Что произойдёт, если ожидаемый ответ ошибочно переписать с неправильной программы? Обсудите независимый расчёт 125=2·60+5 и необходимость граничных примеров.

Обсуждение: возможный вывод

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

06. Индивидуальная проверка

40–45 минут. Напишите две строки doctest для seconds_left(121); назовите результат full_minutes(121) и объясните, доказывают ли они работу на всех входах. По баллу за команду, ожидание, число минут и объяснение.

Индивидуальная проверка: ответ и критерии

Команда >>> seconds_left(121), следующая строка 1; full_minutes(121)=2; два конкретных примера не доказывают все случаи. 4 балла.

07. Соответствие исходной программе

Пункт программы → действие → результат
Пункт программыДействие ученикаПроверяемый результат
Документирование программы. Docstring, PEP 257Разбирает пример и создаёт две подпрограммыИсходники, прогнозы и протокол проверки
Составление и отладка программСравнивает фактический результат с контрактомОбъяснение границ и самостоятельный ответ
Источники и права на изображения

Тексты, учебные данные, реплики, программы и схемы подготовлены для уроков портала «Школы России». Числовые серии — учебные модели, не результаты проведённых классом опытов. Схемы авторские, сторонние фотографии не используются. Методические ссылки приведены для учителя; ученик получает все материалы здесь. Проверка первичных источников: 18.10.2026.