Приём — примеры вход → выход
два примера вместо абзаца описания
Что это
Вместо того чтобы описывать словами, что должна делать функция, покажи пару «что пришло → что должно получиться». Два примера снимают больше неясности, чем абзац объяснений, и проверяются мгновенно.
Приём особенно силён там, где словами описывать долго и неточно: разбор текста, форматы, преобразования данных, граничные случаи.
Как выглядит в коде
Словами
Напиши функцию, которая нормализует номер телефона
в международный форматЧто такое «нормализует»? Какие форматы на входе? Что с пробелами и скобками? Что делать с номером без кода страны? Все эти развилки ИИ закроет сам.
Примерами
Функция normalize_phone(raw: str) -> str | None.
Примеры:
"+47 912 34 567" -> "+4791234567"
"47-912-34-567" -> "+4791234567"
"912 34 567" -> "+4791234567" (нет кода — считаем норвежским)
"+7 999 123-45-67" -> "+79991234567"
"не телефон" -> None
"" -> None
Код страны по умолчанию передаётся аргументом default_cc="47".Шесть строк закрывают всё: формат вывода, что делать с разделителями, поведение без кода страны, обработку мусора. Словами на то же ушло бы полстраницы, и что-нибудь всё равно осталось бы недосказанным.
Примеры заодно становятся тестами
Сделай из этих примеров параметризованный тест pytest.Один запрос — и проверка готова. Примеры, которыми ты объяснял задачу, превращаются в то, чем она проверяется. Это самый дешёвый способ получить тесты из статьи 3.9.
Как сказать ИИ
Сколько примеров нужно
Три-пять. Один показывает удачный случай и ничего не говорит о границах. Десять — избыточны и начинают противоречить друг другу.
Обязательно включи:
- обычный случай — то, ради чего всё делается;
- граничный — пустая строка, ноль, одна запись, максимальная длина;
- неудачный — мусор на входе, и что при этом должно произойти.
Третий пункт пропускают чаще всего, а он решает больше всех: именно он говорит
ИИ, возвращать None, кидать исключение или подставлять значение по умолчанию.
Формат записи
Стрелка и выравнивание читаются лучше прозы:
вход -> выходЕсли выход сложный — покажи его как есть, со структурой:
Вход: {"cod": "404", "message": "city not found"}
Выход: None
Вход: {"main": {"temp": 4.2}, "weather": [{"main": "Rain"}]}
Выход: ("Rain", 4.2)Где приём не подходит
Там, где результат нельзя записать строкой: интерфейс, архитектура, «сделай красиво». Для таких задач работают план (3.10) и вопросы (3.11).
На что смотреть
Код подогнан под примеры. Самая коварная ошибка: функция содержит
if raw == "+47 912 34 567": return .... Выглядит рабочей, проходит все твои
примеры и разваливается на седьмом входе. Прочитай код, а не только результат.
Примеры противоречат друг другу. Бывает, когда их много и писались они второпях. ИИ выберет какой-то один вариант молча. Если заметил противоречие в ответе — чини примеры, а не код.
Граничные случаи придуманы за тебя. Если ты не сказал, что делать с пустой строкой, в коде появится решение, которого ты не принимал. Проверь, какое.
Шпаргалка
Два-три примера «вход → выход» вместо абзаца описания.
Обязательно: обычный случай, граничный, неудачный.
Неудачный случай решает, что будет при мусоре на входе.
Примеры превращаются в тест одним запросом.
Проверь, что код решает задачу, а не подогнан под примеры.
Для задач без строкового результата приём не годится.