Глава 21 Шукаємо інформацію в Інтернеті

⏱️ Час на опанування теми: 15 хвилин

🤷 Для чого ми це вивчаємо:

🔑 Результати навчання:

  • Розуміння що таке програма, додаток та програмне забезпечення
  • Розуміння що таке алгоритм, кодування та програмування

🎈 Увага: Наразі ця глава знаходиться у стані активної розробки і ймовірно буде змінюватись і доповнюватись!


Інколи (або якщо чесно то дуже часто) у вас будуть питання як саме вирішити ту чи іншу проблему. Наприклад, ви не знаєте яка функція розділяє стрічку на декілька підстрічок використовуючи певний розділювальний символ (delimiter) або як знайти суму виключно від’ємних чисел у списку чи масиві. Також, будуть такі випадки, коли ви не зможете самостійно знайти помилку у коді. Для цих сценаріїв ми навичмося шукати інформацію в інтернеті.


Спочатку ми обговоримо яка саме послідовність методів є найефективнішою (принайні з досвіду автора). Почати, як це не парадоксально, якнайкраще з найсучаснішої технології – ChatGPT. Якщо це не спрацює, треба буде засукати рукава і почати ретельно шукати у Google. Якщо ж ви не знайдете і там або на Stack Overflow, наступним кроком буде самостійно поставити питання на Stack Overflow. І останнім, але не меньш важливим ресурсом є офіційна документація.

21.1 Питаємо у ChatGPT…

Якщо б ця книга була написана до 2022 року, то цей пункт не існував би. Але усе повністю змінилось коли OpenAI представили свого нового помічника ChatGPT, який базується на штучному інтелекті. На початку вашого шляху у програмуванні це буде ваш найліпший друг і зараз ми навчимося їм користуватись. ChatGPT розуміє українську, хоч українська і не рідна мова для ChatGPT. Це означає що ми можемо формулювати усі свої питання українською.

21.1.1 …як розв’язати певну задачу?

Якщо ми хочемо запитати у ChatGPT як розв’язати певну задачу, ми можемо використати кілька правил, які зроблять запит максимально ефективним. Ми почнемо з максимально розмитого запиту і з кожним кроком будемо його вдосконалювати.

Наприклад, нам потрібно розбити стрічку "Привіт! Як справи?" на "Привіт!", "Як" та "справи?". Ми почнемо з запиту:

Як розділити текст?

І це нажаль не спрацює.

  • Треба бути точними і надати як найомога більше деталей

    Попередній запит нажаль не дуже зрозумілий для ChatGPT тому що він не розуміє конексту – ми говоримо про літературні тексти чи про тексти в мовах програмування? Щоб покращити цей запит, ми можемо конретизувати про що саме йде мова:

    Як розділити текстову стрічку на частини?

    А ще краще конкретизувати як саме ми хочемо розділити. Розділити ми повинні за допомогою символу пробілу, тому ми можемо ще раз переписати наш запит:

    Як розділити текстову стрічку на частини за допомогою символу?

  • Треба використовувати Python терміни

    Щоб зробити конекст ще більше зрозумілим, нам потрібно використати терміни, якими оперує Python. У нашому прикладі, замість текстову стрічку ми можемо викоритати стрічка str:

    Як розділити стрічку str на частини за допомогою символу?

  • Треба додати y Python

    Якщо ж ChatGPT все ж таки й досі не зрозумів що ми працюємо у Python, ми можемо це явно прописати у нашому запиті:

    Як розділити стрічку str на частини за допомогою символу y Python?

І ось такою приблизно буде відповідь ChatGPT:

Ми можемо просто скопіювати код і виконати його:

greeting = "Привіт! Як справи?"
greeting.split(" ")
## ['Привіт!', 'Як', 'справи?']

21.1.2 …виправити помилку?

Нижче зазначенний код видає помилку:

question = "The Answer to the Ultimate Question of Life, the Universe, and Everything is "

answer = 42

question + answer
## can only concatenate str (not "int") to str

ChatGPT може нам допомогти її випаравити. Для цього треба прописати запит:

Як виправити цю помилку у Python?

І додати з нової строки код та текст повідомлення помилки:

Як виправити цю помилку у Python? question = “The Answer to the Ultimate Question of Life, the Universe, and Everything is” answer = 42 TypeError: can only concatenate str (not “int”) to str

Приблизно ось так відповість ChatGPT:

Це означає що нам треба було просто загорнути answer у str():

question = "The Answer to the Ultimate Question of Life, the Universe, and Everything is "

answer = 42

question + str(answer)
## 'The Answer to the Ultimate Question of Life, the Universe, and Everything is 42'

Якщо помилку видає виклик функції, яку ви написали самі, то треба разом із викликом фунцкії також надати і код визначення фунцкії.

Ось клітинка з визначенням фунцкії:

def standardize(x):
    return (x - mean) / sd

А ось виклик, який генерує помилку:

standardize(0.032, 0, 1)
## standardize() takes 1 positional argument but 3 were given

Нам треба передати ось такий запит:

Чому наступний код генерує помилку: def standardize(x): return (x - mean) / sd standardize(0.032, 1, 0) TypeError: standardize() takes 1 positional argument but 3 were given

ChatGPT відповість щось накшталт:

Це означає що ми забули зазначити ще два параметри mean та sd у визначенні функції:

def standardize(x, mean, sd):
    return (x - mean) / sd

standardize(0.032, 0, 1)
## 0.032

Далі ми розглянемо більш олд-скульні метроди знаходження інформації, які використовувались в епоху коли ChatGPT ще не існував.

21.2 Google

Google – це назамінний помічник у пошуку інформації, і програмування тут не є виключенням. Ми можемо його використовувати і для пошуку вирішення помилки у коді і для того щоб знайти вирішення певної задачі. Шукати у Google є навичкою яку можна здобути тільки з практикою. В процесі пошуку дуже важлвиво не зупинятись на першій спробі, а декілька разів змінити запит і подивитись що саме запропонує Google.

Хоча рекомендації до використання Google й схожі на рекомендації для ChatGPT, все ж таки існує кілька відмінностей:

  • Запити краще формулювати на англійській мові. Якщо у вас є труднощі з цим, ви завжди можете перекласти з україньскої на англійську за допомогою Google Translate. Замість:

    Як розбити стрічку у Python?

    Крщае запитати:

    How to split a string in Python?

  • Якщо у ChatGPT краще надавати якомога більше інформації, то у Google краще навпаки надати тільки кілька ключових слів. Замість:

    How to split a string in Python?

    Краще запитати:

    split string Python

    Найкраще, якщо ці слова будуть термінами з Python.

  • Якщо ви шукаєте як виправити помилку, то найефективнішою стратегією буде сформувати запит з повідомлення цієї помилки. Якщо повідомлення містить будь-які артефакти причетні тільки до вашого комп’ютеру чи коду, то їх краще прибрати. Наприклад, такі штуки як шляхи до файлів, назви змінних тощо. Код нижче читає файл, якого не існує:

    f = open("file_that_does_not_exist.txt", "r")
    ## [Errno 2] No such file or directory: 'file_that_does_not_exist.txt'
    print(f.read())
    ## name 'f' is not defined

    Тоді найкращий запит буде виглядати (у ньому ми прибрали ім’я файлу):

    FileNotFoundError: [Errno 2] No such file or directory:

21.3 Stack Overflow

Stack Overflow – популярна система питань і відповідей стосовно програмування. Є така приказка, що питання на яке ви шукаєте відповідь, вже хтось колись задавав на Stack Overflow. З досвіду автора цієї книги це не дуже далеко від правди.

Коли ви використовуєте Google для пошуку, він часто пропонує сторінки на Stack Overflow і це практично сто-відсоткове попадання, тому це треба мати на увазі.

Але буває таке, що ми не можемо знайти відповідь на наше питання, і тоді краще зареєструватись на Stack Overflow і задати питання власноруч. Ми не будемо описувати процес написання питання, так як якщо вам потрібно задати таке питання, то скоріш всього ви на тому рівні, де опанувати Stack Overflow для вас не буде проблемаю. По-друге, Stack Overflow має дуже зрозумілий набір інструкцій, який допоможе вам з цим.

21.4 Вбудована документація

Ще одине важлививе джерело інформацій – вбудована документація. Для того щоб побачити документацію якоїсь фунцкції, нам треба сформувати існтрукцію help(name_of_function), де name_of_function – ім’я функції без дужок:

help(len)
## Help on built-in function len in module builtins:
## 
## len(obj, /)
##     Return the number of items in a container.

Ми так само можемо подивитись документацію методів об’єктів:

x = "a string"
help(x.split)
## Help on built-in function split:
## 
## split(sep=None, maxsplit=-1) method of builtins.str instance
##     Return a list of the substrings in the string, using sep as the separator string.
##     
##       sep
##         The separator used to split the string.
##     
##         When set to None (the default value), will split on any whitespace
##         character (including \\n \\r \\t \\f and spaces) and will discard
##         empty strings from the result.
##       maxsplit
##         Maximum number of splits (starting from the left).
##         -1 (the default value) means no limit.
##     
##     Note, str.split() is mainly useful for data that has been intentionally
##     delimited.  With natural text that includes punctuation, consider using
##     the regular expression module.

Офіціфну документацію тако ж можна знайти на сайті (https://docs.python.org/3/)[https://docs.python.org/3/].



🤸 Вправи
1. Зʼєднайте інструменти пошуку відповідей з їх основними правилами користання:
питання повинно бути чітко сформулюваним
запити краще формулювати англійською мовою
запит формулюється кодовими словами
питання повинне бути детальним
потрібна реєстрація, щоб поставити запитання
для запиту потрібно використовувати функцію help()
потрібно використовувати Python термінологію
Chat GPT
Tensor Flow
Google
Документація