
Информатика: создаём своего цифрового помощника Урок 30 из 38
Условия Python и проверка границ
Переведём границы напоминания в ветви `if`, `elif`, `else` и проверим, что выполненная задача не попадает в чужую ветку.
Где мы на карте
Это урок 30 из 72 и часть блока Python (уроки 27–38). Опорная схема показывает проверяемые переходы. Продолжаем бумажный договор версии 0.3: пять исходов напоминания и исходные вымышленные задачи.
Ситуация и вопрос
В прошлой теме одно выражение ответило только «да» или «нет». Но помощнику нужны разные сообщения: завершено, срок не задан, просрочено, напомнить или ещё рано. Как выбрать ровно одно сообщение и не пропустить особый случай? На бумаге порядок проверок был частью договора; в Python он станет порядком строк.
Новые слова без пропусков
Условие — выражение с ответом True или False. Ветвление выбирает путь по этому ответу. if проверяет первое условие, elif — следующее, если предыдущие ложны, else принимает всё оставшееся. Блок строк с одинаковым отступом выполняется вместе; в Python отступы являются частью синтаксиса, то есть правил записи языка. Граничный случай находится прямо на пороге, например два дня. Взаимоисключающие ответы означают, что одна задача получает ровно один статус.
Опорный сигнал
Вход → проверка правила → изменение состояния → наблюдаемый результат. Покажите пальцем, на каком шаге программа читает данные, где сравнивает их с договором и где только сообщает результат. Если шага не видно на схеме, найдите его в коде и добавьте в собственную трассу.
Разбираем шаг за шагом
Разложите на столе карточки −1, 0, 2, 3. Проведите каждую через ветви примера: −1 останавливается на days < 0; 0 и 2 проходят к days <= 2; 3 остаётся для else. Теперь мысленно поставьте done=True: бумажный договор требует DONE раньше всех сравнений. В коротком примере ниже done ещё не включён, чтобы увидеть сами границы; в проектной функции добавьте его первым условием.
Предскажите и проверьте
Закройте блок с выводом. По строкам проследите значения имён и напишите точный ожидаемый текст, включая регистр и порядок строк. Только затем выполните код из каталога step-03 командой python3 и сравните посимвольно. Поменяйте один вход; до запуска запишите новый прогноз. Если результат отличается, найдите первую строку расхождения, а не подгоняйте ответ задним числом.
for days in (-1, 0, 2, 3):
if days < 0:
status = "OVERDUE"
elif days <= 2:
status = "REMIND"
else:
status = "NOT_YET"
print(days, status)
Ожидаемый вывод
-1 OVERDUE
0 REMIND
2 REMIND
3 NOT_YET
Поймайте ошибку
Если первым поставить days <= 2, просроченное −1 получит REMIND. Если написать четыре независимых if, несколько условий могут напечатать несколько ответов. Почините порядок и используйте цепочку if/elif/else; затем отдельно обработайте отсутствие даты до сравнения с числом.
Изменение проекта
Перепишите таблицу версии 0.3 в функцию с return, не печатайте ответ внутри каждой ветви. Печать оставьте вызывающему коду: тогда одну и ту же функцию позже можно использовать в консоли и тестах.
Задание и доказательство
Напишите полную функцию, которая получает done и days и возвращает пять статусов бумажного договора. Прежде чем запускать, нарисуйте таблицу для −1, 0, 1, 2, 3, None и done=True. Покажите однокласснику только код и тестовые карточки: он должен получить ваши ответы без устного пояснения.
Перенос в новую ситуацию
В автомате продажи билетов статусы могут быть «оплачено», «нет цены», «недостаточно денег», «готово». Какое условие должно проверяться первым, если покупка уже оплачена? Объясните, почему логика первого случая похожа на done=True.
Возврат через 1, 7 и 30 дней
Через 1 день восстановите правило и один граничный пример без страницы. Через 7 дней объясните ошибку в новом примере однокласснику. Через 30 дней повторите тест проекта, проверьте, что прежние записи и вывод сохранились, и снова перенесите правило на другую задачу.
Следующий урок
Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом
Комментарии (0)
Войдите, чтобы оставить комментарий →
Пока нет комментариев. Будьте первым.