Используйте ChatGPT для изучения программирования на Python
Оглавление
- Настройте своего наставника по программированию на Python в ChatGPT
- Остерегайтесь неверной и не относящейся к делу информации
- Улучшайте Свои Результаты С Помощью Оперативного Проектирования
- Отладьте Свой Код С Помощью ChatGPT
- Соедините программу с ChatGPT и напишите лучший код
- Запросите ChatGPT для альтернативных реализаций
- Получите ответы на свои вопросы по программированию
- Следующие шаги
- Заключение
Большие языковые модели (LLM) быстро завоевали популярность с тех пор, как OpenAI выпустила ChatGPT в открытый доступ. С тех пор люди используют ChatGPT для развлечения, творчества и полезных целей. Если вы мечтали использовать ChatGPT в качестве своего наставника по программированию на Python, продолжайте читать.
Использование ChatGPT в качестве наставника не означает, что вы должны пытаться создавать программное решение, ничего не зная о программировании. Вместо этого вы сосредоточитесь на использовании ChatGPT в качестве учебного пособия. Вероятно, это не сможет заменить вас как программиста, но это может помочь вам улучшить свой код и учиться в процессе.
В этом руководстве вы узнаете, как:
- Настройте ChatGPT для использования
- Отладьте свой код с помощью ChatGPT
- Улучшите свой стиль кода и качество кода
- Соедините программу с ChatGPT
- Исследуйте альтернативные реализации фрагмента кода
- Получите ответы на ваши вопросы по программированию
Вы также увидите примеры того, как ChatGPT может выдавать некорректные и нерелевантные решения, и узнаете, как можно улучшить его ответы, работая над улучшенными подсказками. В загружаемых материалах вы получаете доступ ко всем фрагментам кода из руководства, а также ко всем подсказкам, которые вы будете использовать для взаимодействия с ChatGPT:
Бесплатный бонус: Нажмите здесь, чтобы загрузить бесплатный образец кода и специальные подсказки, которые покажут вам, как улучшить свои навыки программирования на Python с помощью ChatGPT.
Настройте своего наставника по программированию на Python в ChatGPT
Чтобы получить доступ к ChatGPT, вам нужно всего лишь создать учетную запись в OpenAI. Когда вы впервые перейдете на страницу chat.openai.com , вам будет предложено либо войти в систему, либо зарегистрироваться:
Если вы уже играли с ChatGPT раньше и у вас есть активная учетная запись, войдите в систему и перейдите к следующему разделу. В противном случае продолжайте читать, чтобы получить краткую информацию о том, как зарегистрироваться в сервисе.
Если у вас еще нет учетной записи в OpenAI, нажмите на кнопку Зарегистрироваться. Вы будете перенаправлены на страницу, которая позволит вам зарегистрироваться, используя вашу учетную запись Google или Microsoft или личный адрес электронной почты:
Если вы решите зарегистрироваться, используя свой адрес электронной почты, вам нужно будет ввести пароль. Выберите надежный пароль и завершите процесс регистрации.
Затем вы будете перенаправлены на главную страницу ChatGPT, где сможете взаимодействовать с большой языковой моделью через диалоговый интерфейс, где вы вводите вопросы, а чат предоставляет ответы:
В будущем вы можете перейти на chat.openai.com, чтобы получить прямой доступ к этой странице, после завершения процесса регистрации. Время от времени, по истечении срока действия сеанса работы с браузером, вам придется снова входить в систему.
Остерегайтесь неверной и не относящейся к делу информации
Теперь, когда вы зарегистрировались на ChatGPT, вам, вероятно, захочется попробовать! Но прежде чем вы нажмете на газ, важно знать, с какими проблемами вы можете столкнуться. Хотя большие языковые модели предлагают несколько новых возможностей для улучшения вашего обучения, вам необходимо помнить о потенциально негативных последствиях использования ChatGPT в качестве наставника по программированию:
- Чрезмерное доверие: Чрезмерное использование ChatGPT в поисках ответов может помешать вашему собственному обучению. Вы выстраиваете мозговые пути, размышляя, борясь, проверяя свое понимание и запоминая информацию.
- Точность: Ответы ChatGPT часто могут быть неточными или не относящимися к делу. Вам необходимо проверить все ответы на этот вопрос! В противном случае вы можете усвоить неверные концепции и неправильные практики.
В этом разделе и на протяжении всего руководства вы встретите несколько примеров неправильных и не относящихся к делу ответов. Надеемся, что эти примеры помогут вам запомнить, что даже если ответы ChatGPT на первый взгляд кажутся логичными, они не всегда верны. Иногда ошибки в ответе настолько незаметны, что вы заметите их, только если вы опытный программист.
Примечание: Чтобы ознакомиться с увлекательным примером возможностей и ограничений ChatGPT, ознакомьтесь с Эпизодом 174 подкаста Real Python: Технический обзор книги по программированию, подготовленный ChatGPT. с Элом Свейгартом.
В классическом рабочем процессе с ChatGPT вы задаете вопрос в интерфейсе чата, и базовая языковая модель, GPT-3.5, создаст ответ, который вы увидите в виде всплывающего сообщения в чате ответ. ChatGPT даже отформатирует ответы удобным образом. Например, попросите чат сгенерировать для вас какой-нибудь полезный учебный материал по Python:
Вы: Пожалуйста, покажите мне таблицу со шпаргалкой по синтаксису Python.
Когда вы запрашиваете у ChatGPT таблицу, она создает Markdown, который, как известно, прекрасно отображается в интерфейсе чата. Что касается содержания этой шпаргалки, то в ней будут выбраны некоторые синтаксиса Python, и результаты могут быть правильными и релевантными:
Таблица, которую вы получите в качестве выходных данных, скорее всего, будет отличаться. Она может быть очень похожей, но это не обязательно. LLM, стоящий за ChatGPT, всегда создает новый ответ, предсказывая наиболее вероятную следующую информацию на основе своего обучения. Но результат не является детерминированным и часто даже неверным.
Примечание: Вы можете просмотреть различные ответы, нажав кнопку Восстановить ответ. При нажатии на кнопку будет сгенерирован новый ответ на основе вашего запроса. Вы заметите, что ответ будет отличаться от предыдущего, который вы получили.
Затем вы можете переключаться между различными результатами, используя маленькие клавиши со стрелками (< и >), которые появляются в верхней части ответа.
В этом случае вы получили список, содержащий правильную информацию о Python, но действительно ли это полный обзор синтаксиса Python? Чат начал все с того, что print() и input() функций, собрал подборку важных ключевые слова и предоставил некоторые распространенные и некоторые довольно необычные операторы:
| Syntax | Description |
|---|---|
print() |
Displays output to the console |
input() |
Prompts user for input |
if |
Used for conditional statements |
else |
Used in conjunction with if for alternative conditional statements |
elif |
Used in conjunction with if for additional conditional statements |
while |
Used for loops that repeat while a certain condition is met |
for |
Used for loops that iterate through a sequence of elements |
def |
Used for defining functions |
return |
Used in a function to return a value or values |
class |
Used for defining classes |
import |
Used for importing modules or libraries |
try |
Used for exception handling |
except |
Used in conjunction with try to handle exceptions |
finally |
Used in conjunction with try to execute code regardless of exception |
raise |
Used to raise an exception manually |
assert |
Used for debugging and testing assertions |
in |
Used to check if an element is in a sequence |
not |
Used for negation |
and |
Used for logical AND |
or |
Used for logical OR |
is |
Used for identity testing |
== |
Used for equality testing |
!= |
Used for inequality testing |
> |
Used for greater than testing |
< |
Used for less than testing |
>= |
Used for greater than or equal to testing |
<= |
Used for less than or equal to testing |
+= |
Used for incrementing values |
-= |
Used for decrementing values |
*= |
Used for multiplication |
/= |
Used for division |
%= |
Used for modulo operation |
**= |
Used for exponentiation |
Хотя в некоторых ситуациях это может оказаться полезной шпаргалкой, она, безусловно, неполная и мало что говорит о многих аспектах синтаксиса Python, таких как отступы , строковые литералы и комментарии. В таблице даже не указаны наиболее релевантные элементы. Вы всегда должны помнить, что контент, созданный с помощью ChatGPT, может быть неполным или даже не совсем актуальным.
По своей сути, языковая модель GPT-3.5, которая поддерживает ChatGPT, предсказывает только вероятную следующую часть информации, учитывая предыдущий ввод. Она делает это довольно хорошо, но это не значит, что ее предсказание будет правильным или релевантным. Если вы ознакомитесь с созданным им списком, то можете заметить, что в конечном итоге он начал добавлять менее используемые расширенные операторы присваивания.
Зачем они были добавлены? Если вы посмотрите на таблицу сверху вниз, то увидите, что многие элементы могут логически следовать друг за другом. Для модели, которая предсказывает следующий токен на основе вероятности того, что он последует за предыдущим токеном, это имеет смысл.
Однако это не значит, что это хороший выбор. Сомнительно, что какой-либо серьезный ресурс по изучению Python составил бы именно этот список, раздавая своим студентам шпаргалку по синтаксису Python. Но ChatGPT это делает — или, по крайней мере, так было в этом конкретном примере. Какой результат это дало в вашем случае?
Примечание: Вы можете нажать на значок копирования (📋) в правом верхнем углу ответа, чтобы скопировать вывод ChatGPT в буфер обмена. Например, в этом случае он выдаст вам исходную уценку таблицы-шпаргалки. Это быстрый и эффективный способ продолжить работу с выводом за пределами интерфейса чата — например, в вашем редакторе кода .
Как вы уже видели в этом разделе, ChatGPT - это мощный инструмент для заполнения текста, который может быстро предоставить вам много информации. Он может даже помочь вам с форматированием информации полезными способами. Однако, если вы будете задавать вопросы без должного внимания и контекста, то, скорее всего, получите неверную или не относящуюся к делу информацию. Вот почему важно научиться лучше пользоваться этим инструментом.
Улучшайте Свои Результаты С Помощью Оперативного Проектирования
Вы можете рассматривать большую языковую модель, такую как GPT-3.5, как очень эффективный алгоритм заполнения текста. Модель учитывает весь текст, который вы предоставляете, а затем выбирает лексемы word, основываясь на их вероятности соответствия существующему тексту.
Таким образом, модель не имеет никакого представления о тексте, который вы предоставляете, — по крайней мере, не так, как люди думают о понимании. Если вы будете помнить об этом, это поможет вам понять, почему некоторые из результатов, которые вы получите, будут полезными, другие могут быть совершенно не по теме, а третьи могут звучать уместно, но будут полностью выдуманы.
Поиск путей достижения лучших результатов в LLM быстро становится самостоятельной дисциплиной, которая называется оперативный инжиниринг. В нем основное внимание уделяется настройке оформления текстовых подсказок, чтобы получить ответы, которые вы ищете.
Хотя в этом руководстве вы не будете уделять особого внимания методам разработки подсказок, это важная тема, о которой стоит прочитать подробнее, если вы столкнетесь с трудностями при использовании ChatGPT в качестве наставника по программированию на Python. Знание некоторых фундаментальных подходов к разработке подсказок может помочь вам добиться гораздо лучших результатов.
Примечание: Для более глубокого погружения в разработку подсказок ознакомьтесь с Разработка подсказок: практический пример, где вы будете работать с реальная задача, шаг за шагом улучшающая результаты, которые вы получаете от LLM.
Основные идеи, которые следует иметь в виду при написании ваших приглашений, таковы:
- Специфика: Будьте ясны и конкретны в своих инструкциях.
- Четкие задания или вопросы обычно дают лучшие ответы.
- Более длинные и подробные подсказки часто дают лучшие результаты.
- Разделители могут помочь моделировать отдельные концептуальные разделы вашего запроса. Например, вы можете окружить код на Python тройными обратными знаками (``).
- Контекст: Подробно расскажите о том, чего вы пытаетесь достичь и как.
- Подсказка роли может помочь вам дать начальное представление о том, как модель должна реагировать на будущие подсказки.
- Кратковременный запрос означает, что вы добавляете в запрос примеры ожидаемого результата, которые предоставляют контекст для определения того, какой ответ должна дать модель.
- Аргументация: Попросите модель создавать сложные ответы постепенно, вместо того чтобы настаивать на немедленных ответах.
- Подробное описание необходимых шагов для выполнения задачи помогает модели правильно выполнять задачи, которые в противном случае привели бы к неверным результатам.
- Даже не описывая этапы самостоятельно, вы часто можете улучшить результаты, добавив предложение, в котором модели предлагается решать задачу шаг за шагом .
- Когда вы просите модель оценить правильность предоставленных входных данных, попросите ее сначала создать собственное решение, прежде чем принимать решение.
Чтобы применить некоторые из этих концепций на практике, вы можете расширить начальную подсказку о вашей шпаргалке по Python. Добавьте подсказку о роли, напишите свой запрос более подробно, используйте разделители и приведите пример.
Примечание: В оставшейся части этого руководства вы будете видеть подсказки и ответы от взаимодействий с ChatGPT в виде блоков цитат вместо скриншотов. Текст не редактировался, за исключением разделения слишком длинных строк кода и добавления основных элементов для удобства чтения. Эта презентация предназначена для улучшения доступности учебного материала и предоставления вам возможности читать подсказки и выводить данные на устройствах меньшего размера.
Немного более продуманный разговор на тему создания шпаргалки по синтаксису Python мог бы выглядеть следующим образом:
Вы: Вы опытный разработчик на Python с многолетним опытом написания кода на Python и обучения Python других программистов. У вас огромный опыт наставничества людей, изучающих Python. Я хочу, чтобы вы были моим наставником, пока я сам буду изучать Python. Если вы поняли, ответьте словом “Ок”.
ChatGPT: Хорошо, я понял. Я был бы рад стать вашим наставником в изучении Python!
<время работы/>Вы: Я бы хотел иметь краткую справку-шпаргалку по синтаксису Python, которую я мог бы распечатать на одной странице бумаги.
Пожалуйста, создайте таблицу в формате Markdown с наиболее важным синтаксисом Python. В таблице должны быть перечислены переменные, условные обозначения, циклы, функции, классы, импорт, обработка исключений, логические операторы, математические операторы, операторы сравнения и пояснения.
Оно должно включать элементы синтаксиса, краткое объяснение этого и краткий пример фрагмента кода, который это объясняет.
Например, вот как мог бы начинаться список:
| Syntax | Example | Description | | --- | --- | --- | | Comments | `# Comment` | Notes or explanations in the code that are not executed by the interpreter |Пожалуйста, продолжайте этот список и не забудьте указать наиболее важные синтаксические элементы. Вы можете добавить HTML в Markdown, чтобы улучшить презентацию.
<время работы/>ChatGPT: Конечно, вот шпаргалка с некоторыми наиболее важными синтаксисами в Python:
Syntax Example Description Variables x = 5Assign a value to a variable Conditionals if x == 5:
print("x is 5")Execute code only if a condition is met Loops for i in range(5):
print(i)Execute code repeatedly Functions def my_func(x, y):
return x + yReusable block of code that performs a specific task Classes class MyClass:
def __init__(self, x):
self.x = x
def my_method(self):
print(self.x)Blueprint for creating objects with specific attributes and methods Imports import math
print(math.sqrt(4))Use code from another module or package Exception handling try:
x = 1 / 0
except ZeroDivisionError:
print("Cannot divide by zero")Handle errors that might occur during program execution Boolean operators and,or,notOperators that operate on boolean values Math operators +,-,*,/,//,%,**Operators that perform mathematical operations Comparison operators ==,!=,<,>,<=,>=Operators that compare values Comprehensions [i**2 for i in range(5)]Concise syntax for creating lists, dictionaries, and sets Это не полный список, но он охватывает наиболее важные элементы синтаксиса в Python.
Ответ, который вы получаете при составлении приглашения с более подробным контекстом, значительно полезнее, чем первоначальный результат, основанный на одном коротком вопросе.
Примечание: В оставшейся части руководства вы увидите простые подсказки, которые вы можете быстро ввести в интерфейс чата, чтобы получить достаточно хорошие ответы. Ни в одном из приведенных ниже примеров не применяются какие-либо преднамеренные методы оперативного проектирования.
Вы увидите, что часто бывает достаточно задавать обычные вопросы, но вы также увидите, что использование подсказок без особого контекста или рассмотрения может привести к неожиданным и неверным результатам.
ChatGPT может стать хорошим инструментом для изучения Python даже без необходимости разработки подсказок. Однако вы можете значительно улучшить свои результаты, если уделите больше внимания тому, как вы пишете подсказки. Более подробный контекст даст вам более точные ответы.
В оставшейся части руководства вы можете попытаться улучшить качество ответов, применяя основные методы разработки подсказок, о которых вы узнали в этом разделе.
Отладьте Свой Код С Помощью ChatGPT
Ошибки - это нормальная и ожидаемая часть программирования. Сообщения об ошибках предназначены для того, чтобы помочь вам понять, что пошло не так, и дать рекомендации по устранению проблемы.
Если вы не знаете, что делать с сообщением обратной трассировки, то вы часто можете найти полезные предложения с помощью веб-поиска. Однако может быть трудно определить, какая ссылка действительно имеет отношение к вашей конкретной ошибке, особенно если у вас не было большого опыта работы с такой ошибкой.
ChatGPT добавляет новую опцию в таблицу. Когда вы обнаружите ошибку в своей программе, вы можете скопировать свой код и обратную трассировку в интерфейс чата и спросить своего наставника по программированию в ChatGPT, что делать.
Например, предположим, что вы разрабатываете скрипт в вашем Python REPL, где вы хотите собрать пользовательский ввод и выполнить вычисления с помощью это. Но вы сталкиваетесь с исключением, в частности с TypeError:
>>> current_age = input("Enter your current age: ")
Enter your current age: 36
>>> print("Next year you'll be:", current_age + 1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str
Если вы не знаете, как интерпретировать это сообщение обратной связи, то вы можете просто скопировать все и отправить в виде сообщения в ChatGPT. Ваш наставник по программированию на Python ChatGPT даст вам исчерпывающий ответ, который выявит проблему в коде и объяснит, почему это происходит, ясным и кратким языком. Он даже предоставит вам исправленный пример кода, в котором устраняется ошибка, с которой вы столкнулись:
Ты:
<время работы/>>>> current_age = input("Enter your current age: ") Enter your current age: 36 >>> print("Next year you'll be:", current_age + 1) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate str (not "int") to strChatGPT: Сообщение об ошибке, которое вы видите, связано с тем, что
current_ageобрабатывается как строка, но вы пытаетесь добавить к ней целочисленное значение. Чтобы исправить это, вы можете преобразоватьcurrent_ageв целое число, используя функциюint()перед выполнением сложения. Вот исправленный код:current_age = input("Enter your current age: ") next_year_age = int(current_age) + 1 print("Next year you'll be:", next_year_age)Сначала пользователю будет предложено ввести свой возраст, а затем преобразовать введенные данные в целое число с помощью
int(). Затем он добавляет 1 к целочисленному значению и, наконец, выводит результат как часть строки, используяprint().
Ответ, который вы получили от ChatGPT, является надежной помощью в устранении ошибки, с которой вы столкнулись. Совет по чтению входных данных Python в виде целых чисел близок к тому, что наставник по программированию мог бы дать вам лично — если, конечно, он дружелюбный человек!
Примечание: Опытный наставник, возможно, предложил бы вам несколько иное решение, улучшающее показанное выше, путем преобразования пользовательского ввода в целое число перед присвоением ему значения current_age:
current_age = int(input("Enter your current age: "))
print("Next year you'll be:", current_age + 1)
С помощью этого решения вы улучшаете безопасность ввода вашего кода, убедившись, что current_age будет целым числом во всей вашей программе.
Магистр права, стоящий за ChatGPT, ничего о вас не знает. Он даже ничего не знает о том, как люди относятся к знаниям и рассуждениям. Тем не менее, он смог сразу же связать токены, которые имеют смысл, устранить вашу ошибку и предоставить вам персонализированную помощь по проблеме в вашем коде.
Теперь вы можете сказать, что Python уже знал, что было не так в этом фрагменте кода, и сообщил вам об этом, используя сжатые формулировки в своем сообщении об ошибке. Но ChatGPT может сделать больше, чем просто объяснить сообщения обратной трассировки в контексте вашего кода. Он также может указывать на синтаксические ошибки — ошибки, возникающие при написании недопустимого кода на Python, который синтаксический анализатор Python не может понять.
Возможно, вы хотите использовать Python в качестве калькулятора и пытаетесь разделить одно число на другое:
>>> 3 : 4
File "<input>", line 1
3 : 4
^
SyntaxError: illegal target for annotation
Хм... какой здесь неверный синтаксис? Вы неправильно запомнили основные математические операции? Пора спросить у ChatGPT, что пошло не так в этом разделе. Продолжайте и вставьте все содержимое приведенного выше блока кода в интерфейс ChatGPT, включая сообщение об ошибке. В качестве ответа вы получите полезное объяснение:
ChatGPT: Полученное вами сообщение об ошибке указывает на то, что вы пытались неправильно использовать синтаксис аннотации. В Python двоеточие (
:) используется в нескольких контекстах, таких как определение сигнатур функций или классов, создание фрагментов последовательности или словаря.Однако в вашем коде вы используете двоеточие между двумя целыми числами, что не является допустимым синтаксисом в Python. Если вы хотите выразить отношение или дробь между двумя числами, вы можете использовать оператор деления (
/). Например:ratio = 3 / 4 print(ratio) # Output: 0.75Это разделит целое число
3на целое число4и вернет число с плавающей запятой, представляющее частное. Затем вы можете сохранить это значение в переменной или использовать его непосредственно в своем коде.
Опять же, ваш наставник по программированию в ChatGPT выявит проблему в вашем коде, покажет вам, как ее устранить, и добавит краткое объяснение в качестве дополнения. Использование ChatGPT для отладки Python SyntaxError также работает с более сложным кодом, чем показанный выше.
Если вы не получаете результат, который, по-видимому, соответствует вашему вопросу, вы можете добавить больше контекста к сообщению об ошибке, которое вы публикуете. В этом примере вы могли бы добавить предложение, поясняющее, что вы пытаетесь выполнить деление, например, Я пытаюсь разделить два числа и получаю эту ошибку.
Как вы уже поняли, вам всегда нужно проверять правильность полученных ответов. ChatGPT часто выдает неверный ответ на введенный вами текст. Например, попробуйте запустить следующую неверную инструкцию import и ее сообщение об ошибке в виде запроса:
>>> from collections import chainmap
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name 'chainmap' from 'collections'
⮑ (/Users/martin/.pyenv/versions/3.11.0/lib/python3.11/collections/__init__.py)
Модуль Python collections имеет похожее название, но с другой заглавной буквы, ChainMap. Решением этой проблемы ImportError было бы исправить заглавные буквы в импортируемом имени. Это небольшое и простое исправление, но ChatGPT идет другим путем:
Запись в чате: Сообщение об ошибке указывает на то, что возникла проблема с импортом функции
chainmapиз модуляcollections. Функцияchainmapдоступна в модулеcollections, начиная с версии Python 3.3.Если вы используете Python версии 3.3 или более поздней и по-прежнему видите это сообщение об ошибке, возможно, проблема связана с установкой Python. Попробуйте обновить или переустановить Python.
Если вы используете более раннюю версию Python, которая не поддерживает
chainmap, вы можете использовать альтернативный подход, например, создать словарь, который объединяет значения из нескольких словарей, например, так:dict1 = {'a': 1, 'b': 2} dict2 = {'b': 3, 'c': 4} combined_dict = dict(dict1, **dict2)При этом создается новый словарь
combined_dict, содержащий все пары ключ-значение изdict1иdict2. Если ключ существует в обоих словарях, значение изdict2заменит значение изdict1.
В ChatGPT не предлагается изменять заглавную букву chainmap на ChainMap. Это правильно объясняет, что имя с именем ChainMap присутствует в collections начиная с Python 3.3. Однако далее предполагается, что у вас может возникнуть проблема с установкой Python, если вы получаете эту ошибку на Python 3.3 или новее.
Затем он отправляет вас в погоню за дикими гусями переустановки Python или объединения двух словарей в один, который даже не воспроизводит функциональность ChainMap. Хотя вы определенно можете чему-то научиться, следуя этим советам, это не очень хорошие рекомендации от вашего наставника по программированию с предсказанием токенов, ChatGPT.
Примечание: Можете ли вы попросить ChatGPT дать вам правильное предложение с помощью некоторых технических приемов быстрой разработки, которые вы изучали ранее? Постарайтесь представить более подробный контекст, попросите его рассуждать шаг за шагом или попросите его перечислить все доступные имена в collections. Затем задайте свой вопрос еще раз.
ChatGPT может дать вам верное предложение, а может и увести вас в сторону, к далеким берегам. Когда вы используете ChatGPT в качестве наставника по программированию на Python, вам всегда нужно помнить о том, что все, что делает LLM, стоящий за интерфейсом, - это предсказывает следующий токен на основе вероятностей. Это может звучать убедительно, но все равно может оказаться совершенно неправильным.
Что касается предложений по SyntaxError, вы увидели, что ChatGPT может дать вам объяснения и решения проблемы, когда Python знает, что что-то пошло не так, но не может много рассказать вам о что именно все пошло не так.
Но ChatGPT может пойти дальше этого, помогая вам с ошибками в вашем коде, когда Python даже не подозревает, что что-то не так. ChatGPT может помочь вам идентифицировать логические ошибки в вашем коде. Код с логическими ошибками обычно выполняется без проблем, но не приводит к ожидаемому результату. Найти и исправить ошибки такого типа может быть непросто.
Предположим, что вы готовитесь к собеседованию по программированию на Python. Вы пытаетесь реализовать функцию, которая решает задачу FizzBuzz, где вы возвращаете "fizz" для чисел, кратных трем, "buzz" для чисел, кратных пяти, и "fizz buzz" для тех, которые делятся как на три, так и на пять. Вы написали скрипт, который запускается и кажется, что работает:
# fizzbuzz.py
def fizzbuzz(number):
if number % 3 == 0:
return "fizz"
elif number % 5 == 0:
return "buzz"
elif number % 15 == 0:
return "fizz buzz"
else:
return number
Это может выглядеть довольно привлекательно, но если вы вызываете fizzbuzz() с некоторыми примерами входных данных, то вы заметите, что не всегда получаете ожидаемый результат:
>>> fizzbuzz(3)
"fizz"
>>> fizzbuzz(5)
"buzz"
>>> fizzbuzz(15)
"fizz"
Почему fizzbuzz(15) не возвращает ожидаемую строку "fizz buzz"? Вставьте пример кода в диалог с ChatGPT и посмотрите, что получится из языковой модели:
Запись в чате: Функция
fizzbuzzпринимает входное число и возвращает “fizz”, если число делится на 3, “buzz”, если число делится на 5, “fizz buzz”, если число делится на 15, и входное число в противном случае.Однако в текущей реализации есть ошибка. Условие
ifдля проверки того, делится ли число на 15, должно предшествовать условиям для проверки того, делится ли число на 3 и 5. Это связано с тем, что число, которое делится на 15, также делится на 3 и 5, и текущая реализация вернет “шипение” или “жужжание” вместо “шипение-жужжание” для таких чисел.Вот исправленная реализация:
def fizzbuzz(number): if number % 15 == 0: return "fizz buzz" elif number % 3 == 0: return "fizz" elif number % 5 == 0: return "buzz" else: return numberПосле этого исправления функция должна вести себя так, как ожидалось.
ChatGPT удалось обнаружить логическую ошибку в вашем коде. Вероятно, это удалось, потому что это обычное задание по программированию, которое должно иметь множество решений и объяснений в корпусе языков, на которых была обучена модель. Но FizzBuzz будет не единственным примером, где рекомендации ChatGPT помогут вам, по крайней мере, получить представление о том, где вы могли бы искать логическую ошибку, которая скрывается в вашем коде.
Соедините программу с ChatGPT и напишите лучший код
Вы узнали, как ChatGPT может помочь вам в отладке кода для создания более надежных программ. Вы можете использовать этот инструмент для решения таких разовых вопросов, как этот. Но ChatGPT также может работать вместе с вами на каждом этапе, чтобы улучшить написанный вами код и помочь вам освоить лучшие практики и стиль. Вы можете использовать его так, как если бы программировали в паре со своим наставником по программированию.
В этом примере вы разрабатываете игру "угадай число". Вы завершили реализацию игры, и она работает хорошо:
import random
num = random.randint(1, 100)
i = None
while i != num:
i = int(input("Guess the number: "))
if i < num:
print("Too low")
elif i > num:
print("Too high")
else:
print("Correct!")
Ознакомившись с этим примером рабочего кода, вы можете перейти в ChatGPT и узнать, есть ли у вашего личного наставника по программированию какие-либо предложения по улучшению этого кода. Вы могли бы буквально вставить пример кода, сопровождаемый вопросом Как я могу улучшить этот код? и вы, вероятно, получили бы несколько полезных предложений.
Однако в этом разделе вы постараетесь быть более конкретным и сообщите в ChatGPT, какие типы улучшений вы ищете. В приведенном выше фрагменте кода переменные названы не очень подробно. Но, как могли бы согласиться многие программисты, присвоение имен вещам может быть сложной задачей!
ChatGPT основан на большой языковой модели, поэтому присвоение имен объектам должно быть одной из задач, с которыми он хорошо справляется! Попробуйте попросить ChatGPT переименовать объекты для вас:
Ты:
import random num = random.randint(1, 100) i = None while i != num: i = int(input("Guess the number: ")) if i < num: print("Too low") elif i > num: print("Too high") else: print("Correct!")Как я могу улучшить именование переменных в этом примере кода?
<время работы/>ChatGPT: Назначение переменных
numиiв некоторой степени понятно. Однако вы могли бы изменить их названия, чтобы сделать код более читаемым и понятным. Вот пример:import random random_number = random.randint(1, 100) user_guess = None while user_guess != random_number: user_guess = int(input("Guess the number: ")) if user_guess < random_number: print("Too low") elif user_guess > random_number: print("Too high") else: print("Correct!")В этой версии названия
random_numberиuser_guessболее наглядны и понятны с первого взгляда. Они дают понять, какие значения содержат переменные и для чего они используются в коде.
Отлично! ChatGPT помог вам реорганизовать ваш код, переименовав переменные более наглядным образом. Поскольку ваш наставник по программированию, по-видимому, является хорошим коммуникатором, вы также попросите его улучшить сообщения пользователей, задав дополнительный вопрос:
Вы: Не могли бы вы также улучшить качество сообщений, которые пользователь будет читать при взаимодействии с этой программой?
<время работы/>ChatGPT: Конечно! Вот обновленная версия кода с более удобными для пользователя сообщениями:
import random random_number = random.randint(1, 100) user_guess = None while user_guess != random_number: user_guess = int(input("Guess a number between 1 and 100: ")) if user_guess < random_number: print("Your guess is too low. Try again!") elif user_guess > random_number: print("Your guess is too high. Try again!") else: print("Congratulations, you guessed the number correctly!")В этой обновленной версии пользователю предлагается “Угадать число от 1 до 100”, чтобы было понятно, какой диапазон значений он должен угадать. Сообщения о неправильных предположениях также были обновлены, чтобы обеспечить более конкретную обратную связь.
Например, если пользователь угадает слишком низкое число, программа выведет сообщение “Ваше предположение слишком низкое. Попробуйте еще раз!” Аналогично, если пользователь угадает слишком большое число, программа выведет сообщение “Ваше предположение слишком велико. Повторите попытку!”.
Эти сообщения помогут пользователю понять, почему его предположение оказалось неверным и как он может скорректировать свою стратегию для следующего предположения.
ChatGPT добавил в ваш код улучшенные пользовательские сообщения, которые сделают его более понятным. Кроме того, ваша игра может стать еще интереснее для других пользователей. Теперь, что, если вы захотите повторно использовать этот код в другом модуле Python? Хорошим первым шагом будет преобразование кода в функцию, которую вы сможете импортировать.
Это изменение дает несколько преимуществ, помимо того, что делает ваш код более модульным. В целом, использование функций может сделать ваш код более читаемым, пригодным для повторного использования и организованным. И хотя вы уже знаете, как написать функцию на Python, возможно, ChatGPT сможет помочь вам и с этим шагом:
Вы: Можете ли вы преобразовать код в функцию?
<время работы/>ChatGPT: Конечно! Вот переработанная версия кода в виде функции:
import random def guess_the_number(): random_number = random.randint(1, 100) user_guess = None while user_guess != random_number: user_guess = int(input("Guess a number between 1 and 100: ")) if user_guess < random_number: print("Your guess is too low. Try again!") elif user_guess > random_number: print("Your guess is too high. Try again!") else: print("Congratulations, you guessed the number correctly!")Теперь вы можете позвонить по номеру
guess_the_number(), чтобы начать игру. Функция генерирует случайное число от 1 до 100, предлагает пользователю угадать число и выдает обратную связь в зависимости от того, было ли предположение слишком низким, слишком высоким или правильным.Использование функции упрощает повторное использование этого кода в другом месте вашей программы или даже в других программах. Это также облегчает понимание и модификацию кода, поскольку функциональность заключена в одну функцию с понятным названием.
Если вы используете предложенный код, то теперь можете импортировать свою программу на Python и запустить игру, вызвав guess_the_number(). Однако на данный момент эта функция довольно ограничена. Возможно, было бы неплохо сделать его более гибким, отказавшись от жесткого кодирования диапазона и вместо этого позволив пользователям добавлять его при вызове функции.
Вы можете попросить ChatGPT внести изменения за вас, введя специальное приглашение, в котором используются понятные формулировки и инструкции:
Вы: Пожалуйста, измените код таким образом, чтобы
1и100были аргументами по умолчанию. Также используйте f-строку, чтобы соответствующим образом исправить введенное текстовое сообщение.
Сообщение в чате: Конечно! Вот переработанная версия кода с аргументами по умолчанию и f-строкой для запроса ввода:
import random def guess_the_number(low=1, high=100): random_number = random.randint(low, high) user_guess = None while user_guess != random_number: user_guess = int(input(f"Guess a number between {low} and {high}: ")) if user_guess < random_number: print("Your guess is too low. Try again!") elif user_guess > random_number: print("Your guess is too high. Try again!") else: print("Congratulations, you guessed the number correctly!")В этой обновленной версии
lowиhighдобавлены в качестве аргументов по умолчанию в функциюguess_the_number(). Значениеrandom_numberтеперь генерируется с использованием этих аргументов, так что вы можете указать другой диапазон чисел при вызове функции.В приглашении на ввод также используется f-строка для включения значений
lowиhighв сообщение, что облегчает понимание того, какой диапазон значений пользователь должен угадать.Теперь вы можете вызвать
guess_the_number()без аргументов, чтобы использовать диапазон по умолчанию от 1 до 100, или указать свой собственный диапазон, например,guess_the_number(10, 50), чтобы использовать диапазон от 10 до 50.
Игра продвигается успешно! На этом этапе вы задали довольно специфический вопрос. Это тот тип вопросов, с которыми ChatGPT часто успешно справляется. Но когда вы задаете обычный вопрос, вы можете получить хорошие результаты, даже если напишете неточное приглашение.
В данный момент функция не возвращает значение, что означает, что вы не смогли бы отслеживать угаданные числа, если бы создавали игру с несколькими раундами. Однако, возможно, вы не слышали о инструкции Python return, и вы просто знаете, как описать функциональность, которую вы ищете. Итак, вы идете дальше и спрашиваете ChatGPT, что делать, используя общий вопрос:
Вы: Как я могу сохранить случайно сгенерированный номер?
<время работы/>ChatGPT: Один из способов сохранить случайно сгенерированное число - вернуть его из функции
guess_the_number(). Вот обновленная версия кода, который делает это:import random def guess_the_number(low=1, high=100): random_number = random.randint(low, high) user_guess = None while user_guess != random_number: user_guess = int(input(f"Guess a number between {low} and {high}: ")) if user_guess < random_number: print("Your guess is too low. Try again!") elif user_guess > random_number: print("Your guess is too high. Try again!") else: print("Congratulations, you guessed the number correctly!") return random_numberВ этой обновленной версии функция
random_numberвозвращает значениеguess_the_number()после того, как пользователь угадает правильное число. Теперь вы можете вызывать функцию следующим образом:random_number = guess_the_number() print(f"The randomly generated number was {random_number}.")Это сохранит случайно сгенерированное число в переменной
random_numberи распечатает его после того, как пользователь угадает правильное число.Обратите внимание, что вы также можете сохранить
random_numberв файл или базу данных, если вам понадобится использовать его позже.
Отлично! Теперь вы сможете использовать возвращаемое функцией значение, чтобы, например, отслеживать, какие числа угадал пользователь. Вы даже не упомянули return в своем вопросе в ChatGPT! Однако, поскольку это очень распространенный способ решения описанной вами задачи, ChatGPT пошел дальше и создал решение, основанное на возврате значения.
Примечание: Имейте в виду, что вы, как правило, добьетесь лучших результатов, если будете задавать конкретные вопросы с большим контекстом, и вы будете более вы можете получить неверные или неуместные ответы, если ваши запросы будут расплывчатыми или общими.
Наконец, было бы здорово добавить строки документации и подсказки типа в вашу функцию, поэтому вы спрашиваете ChatGPT:
Вы: Не могли бы вы также добавить в функцию подсказку типа и строку документации?
<время работы/>ChatGPT: Конечно, вот обновленный код с подсказкой типа и документальной строкой:
import random def guess_the_number(low: int = 1, high: int = 100) -> int: """ Plays a guessing game where the user must guess a random number between `low` and `high`. Returns the randomly generated number. Args: low (int): The lowest possible number in the range (default 1). high (int): The highest possible number in the range (default 100). Returns: int: The randomly generated number. """ random_number = random.randint(low, high) user_guess = None while user_guess != random_number: user_guess = int(input(f"Guess a number between {low} and {high}: ")) if user_guess < random_number: print("Your guess is too low. Try again!") elif user_guess > random_number: print("Your guess is too high. Try again!") else: print("Congratulations, you guessed the number correctly!") return random_numberВ этой версии мы добавили подсказки по типу к параметрам функции и возвращаемому значению. Мы также добавили строку документации, которая описывает, что делает функция, какие аргументы она принимает и что возвращает.
Использование подсказок по вводу текста и строк документации может сделать ваш код более понятным, особенно если вы работаете в команде или делитесь своим кодом с другими пользователями.
Это выглядит совсем неплохо! ChatGPT создал строку документации в стиле Google, которая почти соответствует спецификации для многострочных строк документации, и это добавлены полезные подсказки по набору текста.
Примечание: В сгенерированной строке документации отсутствует первая сводная строка, которая должна помещаться в одной строке и предшествовать более подробному описанию того, что делает функция. Можете ли вы попросить ChatGPT добавить эту сводную строку и для вас?
Использование ChatGPT для документирования кода может стать отличным подспорьем для разработчиков, которые не любят писать документацию. С помощью ChatGPT вы можете улучшить качество и доступность своей кодовой базы, не тратя слишком много времени на задачи, которые вызывают у вас меньше энтузиазма.
Примечание: Здесь вы использовали диалоговый аспект ChatGPT для постепенного улучшения вашего кода, а LLM сохранил контекст ваших предыдущих запросов. В конце концов, вы достигнете предела, когда общее приглашение, состоящее из всех входных и выходных данных, станет слишком большим. После этого ChatGPT перестанет использовать ваш текст с самого начала приглашения. Для GPT-3 эта точка отсечения находится на уровне 2048 токенов.
В этом разделе вы не внесли много изменений в свой код. Его функциональность по-прежнему остается такой же, как и в начале. Однако, обратившись за помощью к своему наставнику по программированию в ChatGPT, вы нашли способы улучшить и реорганизовать свой код, чтобы улучшить его удобство сопровождения и повторного использования.
Запросите ChatGPT для альтернативных реализаций
Вы уже поняли, что нельзя полагаться на точность результатов, которые вы получаете от своего наставника по Python в ChatGPT, и что вам всегда нужно перепроверять результаты. Прежде всего, результаты обучения в магистратуре - это отличный инструмент для творчества, и там вы можете многому научиться.
Ваш наставник в ChatGPT может предложить вам несколько различных решений проблемы. Это может расширить ваш кругозор и позволит вам изучить новые подходы к решению задач. Вспомните вопрос common code interview о FizzBuzz, который вы отлаживали с помощью ChatGPT в предыдущем разделе:
def fizzbuzz(number):
if number % 15 == 0:
return "fizz buzz"
elif number % 3 == 0:
return "fizz"
elif number % 5 == 0:
return "buzz"
else:
return number
Можете ли вы предложить какие-либо другие способы решения этой проблемы? Возможно, есть альтернативные реализации, которые вы могли бы рассмотреть. Вы можете поискать чужой код в Интернете или попросить своего наставника по программированию в ChatGPT показать вам другие решения, введя код и задав вопрос:
Ты:
def fizzbuzz(number): if number % 15 == 0: return "fizz buzz" elif number % 3 == 0: return "fizz" elif number % 5 == 0: return "buzz" else: return numberКаковы альтернативные варианты решения этой проблемы?
ChatGPT: Проблема с FizzBuzz - это обычное упражнение по кодированию, требующее написания программы, которая печатает числа от 1 до n, но заменяет числа, кратные 3, на “fizz”, а числа, кратные 5, на “buzz”, а также кратные 3 и 5 с “шипучим жужжанием”. Вот несколько альтернативных реализаций проблемы FizzBuzz в Python:
С использованием цикла for:
def fizzbuzz(n): for i in range(1, n+1): if i % 15 == 0: print("fizz buzz") elif i % 3 == 0: print("fizz") elif i % 5 == 0: print("buzz") else: print(i)Используя понимание списка:
def fizzbuzz(n): result = [ "fizz buzz" if i % 15 == 0 else "fizz" if i % 3 == 0 else "buzz" if i % 5 == 0 else i for i in range(1, n+1) ] return resultИспользуя генераторное выражение:
def fizzbuzz(n): return ( "fizz buzz" if i % 15 == 0 else "fizz" if i % 3 == 0 else "buzz" if i % 5 == 0 else i for i in range(1, n+1) )Использование словаря для сопоставления чисел с соответствующими строками:
def fizzbuzz(n): mapping = {3: "fizz", 5: "buzz", 15: "fizz buzz"} for i in range(1, n+1): output = "" for key in mapping: if i % key == 0: output += mapping[key] if output == "": output = i print(output)Это всего лишь несколько примеров того, как проблема FizzBuzz может быть реализована в Python. Существует множество других возможных решений и вариаций этой проблемы.
Сразу же, ChatGPT предложил вам четыре альтернативные реализации, которые претендуют на решение той же задачи. Вы могли бы заметить, что все решения работают на range() вместо одного числа, как в вашем первоначальном примере.
Примечание: В то время как пример кода, предоставленный ChatGPT, следует PEP-8, он выдаст ошибку E226 когда вы добавляете в код flake8. Эта ошибка возникает из-за отсутствия пробела вокруг оператора + в n+1. Средство форматирования кода Black также добавит этот пробел.
Примечательно, что PEP-8 не требует использования пробелов, но программисты обычно включают их. Возможно, вы не всегда сможете усвоить лучшие практики, если будете следовать стилю программирования ChatGPT.
Хотя реализации, предложенные ChatGPT, строго говоря, не решают ту же задачу, что и предоставленный вами код, они могут дать вам представление о том, как вы могли бы изменить или расширить свой исходный код.
В первом предложении используется for цикл для итерации по диапазону, который был введен в ChatGPT. Кроме этого, изменений не так много:
def fizzbuzz(n):
for i in range(1, n+1):
if i % 15 == 0:
print("fizz buzz")
elif i % 3 == 0:
print("fizz")
elif i % 5 == 0:
print("buzz")
else:
print(i)
ChatGPT переписал код таким образом, что теперь он работает с целым рядом цифр, а не с одним номером. Вероятно, это наиболее распространенный способ решения проблемы FizzBuzz. На самом деле, если вы спросите ChatGPT, каковы правила FizzBuzz, то быстро поймете, что зацикливание обычно является частью задачи:
Вы: Каковы правила FizzBuzz?
ChatGPT: FizzBuzz - это простая задача по программированию, которая часто используется на собеседованиях при приеме на работу для оценки способности кандидата писать базовый код. Правила FizzBuzz следующие:
- Выведите числа от 1 до 100.
- Для каждого числа, кратного 3, вместо числа выведите “Fizz”.
- Для каждого числа, кратного 5, выведите “Buzz” вместо числа.
- Для каждого числа, кратного как 3, так и 5, выведите “FizzBuzz” вместо числа.
Итак, вкратце, программа должна вывести последовательность чисел от 1 до 100, но заменить числа, кратные 3, словом “Шипение”, заменить числа, кратные 5, словом “Жужжание” и заменить оба числа, кратные 3 и 5 со словом “Шипение”.
Вы всегда можете получить более подробную информацию о задаче, с которой сталкиваетесь, задавая ChatGPT дополнительные вопросы.
Второе и третье предложения похожи друг на друга. Один решает задачу, используя понимание списка, в то время как другой использует генераторное выражение. Код аналогичен, но обработка списка выполняется немедленно, в то время как выражение генератора выполняет лениво:
# List comprehension
def fizzbuzz(n):
result = [
"fizz buzz"
if i % 15 == 0
else "fizz"
if i % 3 == 0
else "buzz"
if i % 5 == 0
else i
for i in range(1, n+1)
]
return result
# Generator expression
def fizzbuzz(n):
return (
"fizz buzz"
if i % 15 == 0
else "fizz"
if i % 3 == 0
else "buzz"
if i % 5 == 0
else i
for i in range(1, n+1)
)
Хотя код выглядит похожим, вы снова можете заметить некоторые тонкие различия. В коде для понимания списка вводится промежуточная переменная result, в то время как в примере, который решает задачу с использованием выражения generator, объект generator возвращается напрямую.
Обратите внимание, что вам также придется запускать два примера по-разному из-за различий в методах их оценки. Если вы хотите попробовать примеры, вы можете загрузить пример кода:
Бесплатный бонус: Нажмите здесь, чтобы загрузить бесплатный образец кода и специальные подсказки, которые покажут вам, как улучшить свои навыки программирования на Python с помощью ChatGPT.
Хотя эти два универсальных решения дают ожидаемые результаты, их довольно сложно читать и понимать. В результате их также будет сложнее поддерживать. ChatGPT показал вам альтернативные решения, но это не значит, что вы должны внедрять их в свою кодовую базу.
Примечание: Как правило, чтобы писать более чистый и понятный на Python код, рекомендуется сосредоточить свои усилия на том, чтобы сделать код максимально читаемым.
Наконец, ChatGPT также представил вам четвертый фрагмент кода, в котором он использует словарь для сопоставления чисел с соответствующими строками:
def fizzbuzz(n):
mapping = {3: "fizz", 5: "buzz", 15: "fizz buzz"}
for i in range(1, n+1):
output = ""
for key in mapping:
if i % key == 0:
output += mapping[key]
if output == "":
output = i
print(output)
Здесь он пытается использовать поиск по словарю, чтобы решить, какую строку печатать. Однако эта реализация сложна для чтения и некорректна. Хороший способ убедиться, что ChatGPT создал код, который решает вашу задачу, - это попробовать его. Когда вы запустите фрагмент кода в диапазоне пятнадцати, вы заметите ошибку в коде:
>>> fizzbuzz(15)
1
2
fizz
4
buzz
fizz
7
8
fizz
buzz
11
fizz
13
14
fizzbuzzfizz buzz
Хотя начало вывода выглядит многообещающим, код выдает неверные результаты, когда встречает число, которое делится более чем на одно из чисел.
Это происходит потому, что вы перебираете ключи словаря и применяете условную проверку, используя оператор по модулю для каждого из ключей. Следовательно, если текущий номер цикла равномерно делится более чем на одно из чисел, то каждая из связанных строк преобразуется в output.
Примечание: Хотя запуск кода, сгенерированного ChatGPT для подтверждения его функциональности, часто бывает полезен, вам также необходимо помнить о своей безопасности. Если вы не знаете, что делает сгенерированный фрагмент кода, вам следует сделать паузу и подумать, прежде чем запускать его. Вы также можете попросить ChatGPT рассказать вам о функциональности кода!
ChatGPT не всегда корректен, но он также содержит пару важных предложений, которые показывают вам альтернативные варианты решения задачи FizzBuzz. Если вы считаете своего наставника по программированию в ChatGPT очень креативным и совершенно неосведомленным, то вы можете оценить его предложения, не забывая при этом перепроверять их.
И, конечно, вы также можете многому научиться из некорректного и содержащего ошибки кода, например, рассуждая почему четвертое решение, предложенное ChatGPT, неправильно решает задачу.
Получите ответы на свои вопросы по программированию
Еще один хороший вариант взаимодействия с ChatGPT в качестве вашего наставника по программированию на Python - задавать интересующие вас вопросы об общем программировании или концепциях Python.
Например, вы могли бы спросить ChatGPT о разнице между списками и кортежами, двумя типами данных Python, которые иногда сбивают с толку новичков в программировании:
Вы: В чем разница между списком и кортежем в Python?
<время работы/>ChatGPT: В Python для хранения коллекций данных используются как списки, так и кортежи. Однако между ними есть несколько ключевых различий:
Изменчивость: Основное различие между списками и кортежами заключается в том, что списки изменяемы (могут быть изменены), в то время как кортежи неизменяемы (не могут быть изменены). Это означает, что после создания кортежа вы не сможете добавлять, удалять или изменять какие-либо его элементы, в то время как все это можно делать со списком.
Синтаксис: Списки задаются с помощью квадратных скобок [], а кортежи - с помощью круглых скобок (). Например:
my_list = [1, 2, 3] my_tuple = (1, 2, 3)
Использование: Списки обычно используются, когда вам нужно сохранить коллекцию элементов, которые вы, возможно, захотите изменить или переставить позже. Кортежи, с другой стороны, используются, когда вам нужно сохранить коллекцию элементов, которые не будут изменяться, например, набор координат или дату и время.
Производительность: Доступ к элементам с помощью кортежей, как правило, выполняется быстрее, чем со списками, поскольку они хранятся в памяти в виде непрерывного блока. С другой стороны, для списков может потребоваться выделение новой памяти и копирование элементов, если их объем превысит их первоначальную емкость.
Таким образом, списки могут изменяться, определяются с помощью квадратных скобок и используются, когда вам нужно сохранить коллекцию элементов, которые вы, возможно, захотите изменить или переставить позже. Кортежи являются неизменяемыми, определяются с помощью круглых скобок и используются, когда вам нужно сохранить коллекцию элементов, которые не будут изменяться.
Если этот ответ по-прежнему содержит слишком много новых для вас терминов, вы можете продолжить задавать уточняющие вопросы в ChatGPT. В конце концов, ваш наставник по программированию умеет общаться! Например, вы могли бы задать дополнительные вопросы, такие как:
- В чем разница между изменяемыми и неизменяемыми типами
- Не могли бы вы показать мне реальный пример как кортежа, так и списка?
- Каковы хорошие варианты использования кортежа?
Вы можете получить довольно точные ответы на эти вопросы. Однако, как всегда, вам нужно иметь в виду, что ChatGPT объединяет лексемы только на основе вероятности, а это значит, что вы не можете полагаться на полученные ответы. Вы всегда должны проверять и подтверждать это.
Примечание: Когда в ChatGPT обсуждалась производительность кортежей и списков, было сказано, что кортежи, как правило, быстрее, чем списки, для доступа к элементам. Это верно. Однако его рассуждения не точны. Python не выделяет новую память и не копирует элементы при доступе к элементам списка. Будьте осторожны с любыми утверждениями, которые делает модель.
Ответ, который вы видите выше, основан только на короткой подсказке в начале блока цитат. Возможно, вам удастся еще больше улучшить ответ, разработав более качественную подсказку, как вы видели в предыдущем разделе.
Один из способов повысить достоверность ответа - это проверить источник. Хотя ChatGPT пока не предоставляет источники напрямую, вы можете попросить его предоставить свои источники и ссылки:
Вы: Пожалуйста, предоставьте несколько ссылок, объясняющих тему.
Просмотрите ссылки, которые он предлагает, и убедитесь, что информация соответствует действительности. Ищите сайты с хорошей репутацией! Точно так же, как вы не должны автоматически доверять строкам вероятностных токенов, которые собирает ваш наставник по программированию в ChatGPT, вы также не должны доверять всей информации, с которой сталкиваетесь в Интернете. Но вы, вероятно, достаточно долго работаете в Сети, чтобы знать это!
Продолжая тему ссылок, еще один отличный способ использовать своего наставника по программированию в ChatGPT, когда вы изучаете Python, - попросить у него ссылки на определенные части документации по Python. Если у вас возникли проблемы с функцией поиска в документах Python, то вы можете позволить ChatGPT позаботиться об этом за вас.
Например, вы можете захотеть получить общее представление о том, как использовать файл __init__.py, но когда вы используете поиск в документации Python, вы получаете множество несвязанных результатов:
Вам может потребоваться некоторое время, чтобы разобраться в этих ссылках, и если вы ознакомитесь с предлагаемыми результатами, вы можете скорее запутаться, чем узнать больше. Кроме того, вы можете отправить запрос своему наставнику по программированию в ChatGPT, чтобы получить прямую ссылку:
Вы: Пожалуйста, покажите мне ссылку на документацию по Python, которая объясняет
__init__.py.
ChatGPT: Конечно! Вот ссылка на документацию по Python, в которой описывается файл
__init__.py:https://docs.python.org/3/tutorial/modules.html#packages
На этой странице представлен обзор пакетов в Python и способов их создания, включая назначение и использование файла
__init__.py.
ChatGPT не выполняет классический поиск, а вместо этого генерирует текст на основе вероятностной близости. Из-за этого он может справляться с некоторыми ситуациями поиска информации, подобными показанной выше, лучше, чем алгоритм поиска.
LLM, отвечающий за ChatGPT, был обучен работе с большим объемом данных и довольно хорошо отвечает на общие вопросы программирования. Чтобы перепроверить полученные ответы, вы можете попросить его предоставить вам ссылки на источники, которые позволят вам убедиться, что у модели не было галлюцинаций.
Следующие шаги
Теперь, когда вы разобрались с некоторыми примерами того, как вы можете использовать ChatGPT для улучшения вашего изучения Python, вот несколько следующих шагов, которые вы можете предпринять вместе со своим наставником по программированию на ChatGPT:
- Запросите в ChatGPT идеи для проекта и советы по реализации — например, какие библиотеки использовать для проекта.
- Создайте один из предложенных проектов с помощью парного программирования с помощью ChatGPT — и убедитесь, что проект работает!
- Проведите рефакторинг одного из ваших существующих проектов, чтобы улучшить качество кода.
- Пусть ChatGPT напишет тесты для кода вашего проекта.
- Создайте документацию для проекта, используя ChatGPT.
Если вам трудно получить полезные ответы от ChatGPT, то вы можете изучить использование подсказок, чтобы добиться лучших результатов.
Генерирующие модели, такие как GPT-3.5, - это инструменты, которые могут повысить вашу производительность и помочь вам в обучении, как это делает наставник по программированию. Конечно, ввод текстовых подсказок для LLM отличается от взаимодействия со знающим и дружелюбным наставником-человеком, с которым вы встречаетесь в в рабочее время на Python.
Тем не менее, есть кое-что, что можно сказать в пользу обширных исходных данных ChatGPT, из которых он черпает. Магистр права также постоянно доступен, в то время как у наставника-человека будет ограниченное количество времени.
С другой стороны, наставник-человек, скорее всего, будет более требовательным. Он постарается убедиться, что вы действительно учитесь. Поскольку ChatGPT основан на вероятностном алгоритме заполнения текста, он не может этого сделать. Таким образом, ваш прогресс в обучении еще более сильно — и буквально — зависит от ваших данных.
Заключение
Общаться с ChatGPT в качестве наставника по программированию на Python - все равно что посещать занятия по творческому письму для программистов. Вы сможете почерпнуть идеи, и это поможет вам решать проблемы с такой точки зрения, о которой вы раньше не задумывались.
В этом руководстве вы узнали, как:
- Запустите ChatGPT и запустите его
- Используйте ChatGPT для отладки кода
- Улучшите стиль и качество вашего кода
- Работа с ChatGPT по парному программированию
- Решите задачу кодирования различными способами
- Задавайте вопросы по программированию и получайте ответы
Хотя ChatGPT может быть полезным инструментом обучения, вам всегда нужно помнить о его ограничениях. ChatGPT не думает и не оценивает качество создаваемого текста. Он просто подбирает лексемы на основе вероятности. Его ответы могут быть предвзятыми, неуместными, неверными и даже полностью выдуманными.
Тем не менее, всегда есть полезные и менее полезные способы использования любого инструмента. Вы знаете, что молоток лучше использовать для забивания гвоздей, чем для переворачивания блинов. ChatGPT тоже не очень хорош в подбрасывании блинов, но все же это инструмент, который вы можете использовать для изучения Python. Нашли ли вы другие варианты использования ChatGPT в своей повседневной работе с Python? Расскажите об этом в комментариях ниже.
<статус завершения статья-slug="chatgpt-coding-mentor-python" класс="btn-group mb-0" данные-api-статья-закладка-url="/api/v1/статьи/chatgpt-coding-mentor-python/закладка/" data-api-article-completion-status-url="/api/v1/articles/chatgpt-coding-mentor-python/completion_status/"> статус завершения> <кнопка поделиться bluesky-text="Интересная статья по #Python от @realpython.com:" электронная почта-body="Ознакомьтесь с этой статьей о Python:%0A%0, потому что общайтесь в чате, чтобы научиться программировать на Python" email-subject="Статья о Python для вас" twitter-text="Интересная статья о Python от @realpython:" url="https://realpython.com/chatgpt-coding-mentor-python/" url-title="Используйте ChatGPT для изучения программирования на Python"> кнопка поделиться>
Back to Top


