Shanraq.org Shanraq.org
Функции Python с ясным договором
Общество

Информатика: создаём своего цифрового помощника Урок 34 из 38

Функции Python с ясным договором

Соберём пять правил напоминания в функцию с ясными входом, выходом и порядком проверок.

Где мы на карте

Это урок 34 из 72 и часть блока Python (уроки 27–38). Опорная схема показывает проверяемые переходы. Продолжаем бумажный договор версии 0.3: пять исходов напоминания и исходные вымышленные задачи.

Функции Python с ясным договором

Ситуация и вопрос

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

Новые слова без пропусков

Функция — именованный блок, вызываемый из разных мест. Параметры done и days получают значения при вызове. return возвращает результат и завершает эту работу; print лишь показывает текст на экране. Договор функции описывает допустимый вход и возможный выход. Здесь done — логическое значение, days — целое число либо None, а выход — один из DONE, NO_DATE, OVERDUE, REMIND, NOT_YET. Чистая функция не меняет файл и не читает сегодняшнюю дату скрыто: повторный вызов с теми же входами даёт тот же ответ.

Опорный сигнал

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

Разбираем шаг за шагом

Проведите status(True, None) по строкам: первая проверка возвращает DONE, поэтому отсутствие срока не вызывает ошибку. Для status(False, None) первая проверка ложна, а вторая возвращает NO_DATE. Для status(False, 2) выполняется третья подходящая ветвь и возвращается REMIND. Код ниже показывает эти случаи. Поменяйте местами первые две проверки: результат первой пары станет неверным; порядок входит в договор, а не является стилевой мелочью.

Предскажите и проверьте

Закройте блок с выводом. По строкам проследите значения имён и напишите точный ожидаемый текст, включая регистр и порядок строк. Только затем выполните код из каталога step-03 командой python3 и сравните посимвольно. Поменяйте один вход; до запуска запишите новый прогноз. Если результат отличается, найдите первую строку расхождения, а не подгоняйте ответ задним числом.

from datetime import date
from assistant_core import reminder_status
task = {"done": False, "due_date": "2026-10-11"}
print(reminder_status(task, date(2026, 10, 9)))

Ожидаемый вывод

REMIND

Поймайте ошибку

return внутри цикла по списку задач остановит обработку после первой задачи, если вы поставите его слишком рано. Функция для одной задачи может возвращать сразу, а функция обхода многих должна пройти весь список. Назовите эту границу ответственности до объединения функций.

Изменение проекта

Перенесите логику напоминания в assistant_core.py; консольный слой позже вызовет её и покажет ответ. Так правила можно проверить независимо от клавиатуры, экрана и времени запуска.

Задание и доказательство

Напишите status(done, days) без чтения файла и без печати. Проверьте его на всех восьми карточках cases.json, затем добавьте неизвестную карточку: выполненная задача без срока. Ожидается DONE. Попросите другого ученика объяснить порядок ветвей только по коду и договору.

Перенос в новую ситуацию

Функция стоимости доставки получает вес и страну, а возвращает число или сообщение о недопустимом весе. Почему она не должна сама печатать чек? Покажите, как один расчёт пригодится и сайту, и тесту.

Возврат через 1, 7 и 30 дней

Через 1 день восстановите правило и один граничный пример без страницы. Через 7 дней объясните ошибку в новом примере однокласснику. Через 30 дней повторите тест проекта, проверьте, что прежние записи и вывод сохранились, и снова перенесите правило на другую задачу.

Следующий урок

Далее: Сохранение задач в JSON

Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом

Проверить доказательство проекта

Запишите наблюдение, объяснение, исправление ошибки и изменение своего проекта. Модель укажет первую перепутанную или недоказанную связь, но не даст готовый ответ.

Чтобы проверить, нужно войти. Войти

Комментарии (0)

Пока нет комментариев. Будьте первым.