В этой статье
Начните с небольшой задачи, задайте входные данные и ожидаемый результат, попросите код и проверьте его локально. Для такого диалога можно использовать бесплатный ChatGPT. Ниже — полный пример: программа складывает длительности 1:30 и 0:45, получает 135 минут и проходит проверки пустого ввода, пробелов и неверного формата.
Что нужно для бесплатного старта
Откройте ChatGPT и создайте обычный чат. Платная подписка не является условием для первого запроса с кодом: у ChatGPT есть бесплатный тариф. Инструменты могут иметь отдельные ограничения, поэтому при сообщении о лимите ориентируйтесь на уведомление в своём аккаунте. Условия Free.
В этом примере нужны браузер, текстовый редактор и Python на компьютере. Код не обращается к API и не требует ключа, банковской карты или сторонних библиотек. Используем синтаксис Python 3.10+, фактическая локальная проверка выполнена в Python 3.13.0. Свою версию посмотрите командой:
python --version
Если команда не найдена, сначала установите Python с официального сайта и снова откройте терминал. Если у вас интерпретатор вызывается как python3, используйте это имя во всех командах ниже.
ChatGPT может показывать кодовые блоки с копированием, редактированием и запуском поддерживаемого Python. Набор действий зависит от устройства, плана, настроек рабочей области и доступности функции в аккаунте. Для нашей проверки достаточно скопировать код в файлы: кнопка Run в чате не нужна. Справка о кодовых блоках.
Сформулируйте задачу до генерации
Просьба «напиши программу учёта времени» оставляет слишком много решений модели. Начните с одной функции и определите, как она обрабатывает пустые и неверные данные. Для этого примера вход — список строк с длительностями, а выход — целое число минут. Это именно длительности: 25:00 разрешено, потому что работа может занять больше суток.
Скопируйте запрос:
Помоги написать небольшую программу на Python 3.10+ без сторонних библиотек.
Нужна функция total_minutes(values: list[str]) -> int.
Вход: список длительностей в формате H:MM. Часы — одна или больше
цифр 0–9, без знака; минуты — ровно две цифры от 00 до 59.
Пробелы по краям строки разрешены, внутри — нет.
Пустой список даёт 0. Неверная строка вызывает ValueError.
Пример: ["1:30", "0:45"] должен дать 135, а ["25:00"] — 1500.
Сначала объясни алгоритм. Затем выдай два полных файла:
durations.py и test_durations.py с unittest.
Проверь обычную сумму, пустой список, ноль, внешние пробелы,
длительность больше суток и неверные строки.
В конце дай команды запуска из папки с этими файлами.
Ясные условия и уточнения по результату соответствуют рекомендациям OpenAI по запросам. Критерии правильности выбираете вы: если в ваших данных часы ограничены восемью, добавьте это в задание. Рекомендации по промптам.
Сохраните и выполните код
Ниже — авторский вариант решения для сравнения с ответом ChatGPT. Он проверен локально; это не запись ответа из пользовательского аккаунта. Создайте отдельную папку и сохраните в ней файл durations.py:
import re
def total_minutes(values: list[str]) -> int:
total = 0
for value in values:
match = re.fullmatch(r"([0-9]+):([0-5][0-9])", value.strip())
if match is None:
raise ValueError(f"Invalid duration: {value!r}")
hours, minutes = map(int, match.groups())
total += hours * 60 + minutes
return total
if __name__ == "__main__":
print(total_minutes(["1:30", "0:45"]))
Функция убирает внешние пробелы и проверяет всю оставшуюся строку. Первая группа содержит часы, вторая — минуты от 00 до 59. Затем каждый результат переводится в минуты и прибавляется к сумме. Если формат нарушен, выполнение прекращается с ValueError, а испорченная строка видна в сообщении.
Откройте терминал в папке с файлом и выполните:
python durations.py
Ожидаемый вывод:
135
Проверьте его вручную: 1 час 30 минут — это 90 минут; ещё 45 дают 135. Ответ 2.15 здесь неверен: десятичные часы и запись часов с минутами нельзя складывать одинаково.
Проверьте границы отдельными тестами
Один удачный пример ещё не проверяет договорённости о неверных строках. Рядом сохраните test_durations.py:
import unittest
from durations import total_minutes
class DurationTests(unittest.TestCase):
def test_sum(self):
self.assertEqual(total_minutes(["1:30", "0:45"]), 135)
def test_empty(self):
self.assertEqual(total_minutes([]), 0)
def test_zero(self):
self.assertEqual(total_minutes(["0:00"]), 0)
def test_outer_spaces(self):
self.assertEqual(total_minutes([" 2:05 "]), 125)
def test_over_24_hours(self):
self.assertEqual(total_minutes(["25:00"]), 1500)
def test_invalid(self):
for value in ["1:60", "-1:30", "1:5", "1.30", "", "1: 30"]:
with self.subTest(value=value):
with self.assertRaises(ValueError):
total_minutes([value])
if __name__ == "__main__":
unittest.main()
Запустите:
python -m unittest -v test_durations
В локальной проверке на Python 3.13.0 прошли все шесть тестов; итог — Ran 6 tests и OK. В тесте test_invalid дополнительно перебираются шесть неверных строк. assertEqual сравнивает результат с ожидаемым, а assertRaises проверяет исключение. Эти механизмы и запуск через python -m unittest описаны в документации Python.
Функция рассчитана на список строк. Если на вход могут приходить числа, None или объект вместо списка, отдельно задайте правила для таких значений и добавьте тесты. Не считайте проверенным поведение, которого в договорённости и тестах нет.
Верните в чат точное расхождение
Если предложенный ChatGPT вариант принял 1:60 или упал на разрешённом 25:00, отправьте саму функцию, вход и сообщение ошибки. Полезный запрос на доработку:
В текущем варианте total_minutes(["1:60"]) возвращает 120,
но по заданию минуты 60 запрещены и должен возникнуть ValueError.
Вот мой текущий код: [вставьте функцию].
Объясни причину и дай минимальное исправление функции.
Сохрани поддержку часов больше 24 и внешних пробелов.
Добавь проверку этого случая, не меняй ожидаемый результат на 120.
Это учебный пример сообщения о возможном дефекте. В коде выше неверная строка уже отклоняется. После любого исправления снова запускайте все тесты: изменение проверки минут не должно сломать разрешённые часы или пустой список.
Если ошибка звучит как No module named durations, сначала проверьте, что оба файла лежат рядом, первый называется именно durations.py, а терминал открыт в этой папке. Для обсуждения сложной ошибки скопируйте полный traceback и версию Python; секреты и чужие данные замените безопасными примерами.
Как перенести процесс на свою программу
Для другой задачи замените вход, результат и ограничения, сохранив порядок работы: маленькая функция → понятный пример → локальный запуск → граничные тесты → исправление. Например, для обработки CSV заранее решите, что делать с пустой ячейкой, повторной строкой и неверной датой. Для JavaScript дополнительно укажите среду — браузер или Node.js — и её версию.
Просите объяснять незнакомый участок кода на конкретном входе. Если не можете понять, почему результат правильный, уменьшите задачу и проверьте промежуточные значения. Рабочий файл и тесты сохраняйте у себя: следующий запрос должен опираться на ту версию, которую вы действительно запустили.
Проверить детали
Источники материала
- ChatGPT Free Tier FAQOpenAI
- Working with writing blocks and code blocks in ChatGPTOpenAI
- Prompt engineering best practices for ChatGPTOpenAI
- unittest — Unit testing frameworkPython Software Foundation
- Download PythonPython Software Foundation
Функции и условия сервисов меняются. Дата сверки указана в начале статьи. Как подготовлен материал