Menu

Объяснение кода с ИИ: промпты «разбери построчно»

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

Каждый промпт на этой странице можно изменить и открыть в ChatGPT, Claude или другом ИИ-приложении.

Чтобы получить от ИИ полезное объяснение кода, скажите, сколько вы уже знаете, попросите объяснение построчно и попросите трассировку: таблицу значений, которые принимает каждая переменная при выполнении кода. Голое «объясни этот код» даёт сводку для воображаемого среднего читателя, которая обычно либо слишком простая, либо слишком быстрая для вас.

Построчно, с трассировкой значений

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

Объясни этот код: def running_max(nums): result = [] best = None for n in nums: if best is None or n > best: best = n result.append(best) return result print(running_max([3, 1, 4, 1, 5]))
Try it
Example replyReplies vary between models and runs.

Эта функция вычисляет скользящий максимум списка. Она проходит по числам, хранит в best наибольшее значение из уже увиденных и на каждом шаге добавляет это значение в result. Проверка best is None обрабатывает первый элемент. Вызов выводит [3, 3, 4, 4, 5].

Функция работает за O(n), так как посещает каждый элемент один раз.

Первый ответ точен, но помогает, только если вы уже знаете, что такое скользящий максимум. К тому же он добавляет замечание о временной сложности, о котором никто не просил: такие добавки появляются, когда модель не знает, кто читает. Второй ответ привязывает каждое предложение к строке, на которую можно показать пальцем, а таблица делает конкретным то, что сводка упоминает мимоходом: result.append(best) выполняется на каждом проходе, включая те, где best не меняется. Поэтому 3 встречается дважды, и это видно во второй строке таблицы, а не выводится из слов «на каждом шаге».

Таблица трассировки заодно проверяет само объяснение. Каждую строку можно сверить, запустив код с print(n, best, result) внутри цикла. Если строка расходится с реальным выводом, объяснение где-то неверно, и теперь вы знаете где.

Объяснение на вашем уровне

Самая полезная строка в промпте для объяснения: что вы уже знаете. Она подсказывает модели, какие строки пропустить, а на каких притормозить. Может помочь и предложение с ролью («Ты репетитор для тех, кто учится программировать первый месяц»), но работает оно через тот же механизм: сообщает модели, кто читатель. Что роль меняет и чего не меняет, разобрано на странице ролевой промптинг.

Этот блок: версия для повторного использования. Поменяйте уровень, непонятную часть или код, и объяснение изменится вместе с ними.

Объясни на моём уровне
Fill in
Parts
Объясни мне код ниже.
Мой уровень: я знаю циклы, списки и словари, но не знаю lambda и sorted с key. Что мне непонятно: последние две строки.
text = "the cat and the hat" counts = {} for word in text.split(): counts[word] = counts.get(word, 0) + 1 top = sorted(counts.items(), key=lambda kv: kv[1], reverse=True)[:2] print(top)
Строки, которые я уже понимаю, объясни одним предложением на все. Остальное посвяти непонятной части, по кусочкам, показывая значение, которое каждый кусочек даёт для этого входа.
Меньше 180 слов. Используй только понятия из моего уровня плюс те, которые объясняешь.
Try it
Example replyReplies vary between models and runs.

Цикл считает каждое слово: в итоге counts равен {'the': 2, 'cat': 1, 'and': 1, 'hat': 1}.

Теперь последние две строки, изнутри наружу:

  • counts.items() даёт пары ('the', 2), ('cat', 1), ('and', 1), ('hat', 1).
  • lambda kv: kv[1]: крошечная функция без имени. Она принимает одну пару и возвращает её второй элемент, счётчик. Для ('the', 2) она возвращает 2.
  • sorted(..., key=...) сортирует пары по тому, что возвращает эта функция, то есть по счётчику. reverse=True ставит самое большое первым. Слова с одинаковыми счётчиками сохраняют исходный порядок.
  • [:2] оставляет первые две пары.

Значит, top равен [('the', 2), ('cat', 1)], и именно это выводится.

«Слова с одинаковыми счётчиками сохраняют исходный порядок»: деталь, которую быстрое объяснение пропускает, и именно поэтому второе место достаётся cat, а не and или hat. Сортировка sorted в Python устойчивая, и reverse=True эту устойчивость сохраняет. Вы бы не догадались об этом спросить, а на поверхность это вытащила просьба показать «значение, которое каждый кусочек даёт для этого входа».

Спрашивайте об одной части, а не обо всём файле

Если вставить файл на 500 строк и спросить «что это делает», получится экскурсия по структуре файла. Когда вы застряли на одной функции, вставьте эту функцию и строки, которые её вызывают, и спросите о ней прямо: «Почему эта функция досрочно возвращается, когда список пуст?» или «Что делает yield в строке 12 и что изменилось бы, будь там return?» Узкий вопрос даёт ответ о вашем коде; широкий даёт ответ о коде, похожем на ваш.

С большой незнакомой кодовой базой действуйте наоборот: сначала попросите карту («перечисли основные модули и за что отвечает каждый, по одной строке»), а потом спросите о нужном модуле. Это небольшая цепочка промптов, и каждый шаг держит ответ модели достаточно коротким, чтобы его проверить.

Объяснение через знакомый язык

Код на незнакомом языке читать проще, когда объяснение опирается на язык, который вы знаете. Скажите об этом в промпте: «Я знаю Python. Объясни эту функцию на Go и покажи все места, где она ведёт себя не так, как ожидал бы программист на Python». Недопонимание живёт именно в различиях: целочисленное деление, нулевые значения вместо None, срез, который делит память с массивом, из которого он взят. Обычное объяснение кода на Go правильно описало бы эти строки и ни разу не сказало бы, что ваша интуиция насчёт них ошибается.

Проверьте, что вы поняли

Объяснение, которое вы прочитали и с которым согласились, всё равно может оставить вас неспособным написать этот код самому. Этот разрыв закрывают два промпта:

  • Сначала предскажите. До того как запускать код или просить объяснение, запишите, что, по-вашему, он выведет. Затем попросите модель объяснить только те строки, где ваше предсказание оказалось неверным.
  • Объясните обратно. Напишите своё объяснение и попросите модель указать всё неверное или упущенное, не переписывая его.
Проверь, как я понял этот код
Fill in
Я только что прочитал объяснение этого кода на Python: def running_max(nums): result = [] best = None for n in nums: if best is None or n > best: best = n result.append(best) return result Задай мне 3 вопроса, которые проверят, действительно ли я его понимаю, по одному за раз. Включи один вопрос, где я должен предсказать вывод для нового входа. Жди моего ответа, прежде чем задавать следующий вопрос, и говори, верен ли мой ответ и почему.
Try it
Example replyReplies vary between models and runs.

Вопрос 1 из 3: что вернёт running_max([2, 7, 5, 9])? Сначала посчитайте, а потом запускайте.

Тот же подход работает, когда программа ведёт себя неправильно, но тогда вам нужна причина, а не урок: см. промпты для отладки. Когда код перед вами написал ИИ, построчное объяснение: быстрый способ проверить его, прежде чем оставить; остальные проверки перечислены на странице промпты для написания кода.

Часто задаваемые вопросы

Как попросить ChatGPT или Claude объяснить код?

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

Что такое таблица трассировки?

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

Может ли ИИ объяснить код на языке, которого я не знаю?

Да, и это одна из самых полезных просьб. Назовите язык, который вы знаете, и попросите модель сравнить: «Я знаю Python; объясни этот код на Rust и покажи, где он ведёт себя иначе, чем Python». Утверждения о поведении языка проверяйте на небольших примерах, потому что в деталях объяснения бывают уверенно неверными.

Вредно ли для учёбы, когда ИИ объясняет код?

Зависит от того, что вы делаете дальше. Прочитать объяснение и пойти дальше почти ничему не учит. Предсказать вывод до запуска кода, попросить модель устроить вам тест или объяснить код своими словами и спросить, что вы поняли неправильно: всё это заставляет думать вас, а учёба происходит именно там.

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ