Глава 4 Змінні, оператори, функції, методи та атрибути

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

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

  • надавати імена важливим числам, щоб потім ці імена використовувати в обчисленнях
  • вміти порахувати будь-що у Python
  • використовувати маленькі корисні програми та не програмувати прості речі з нуля

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

  • Створювати, використовувати та змінювати значення змінних
  • Використовувати арифметичні оператори для підрахунків
  • Викликати функцію та зазначати аргументи
  • Отримувати інформацію про об’єкти та змінювати їх за допомогою методів та атрибутів

Найпершим концептом в програмуванні який ми вивчимо, будуть змінні. Ми навчимося створювати нові змінні, використовувати та змінювати їх значення. Далі, ми перейдемо до арифметичних операторів, щоб навчитись рахувати будь-що у Python. Потім, ми познайомимось з функціями та навчимося їх викликати. В кінці цієї глави, ми розберемося з методами та атрибутами.


4.1 ❎ Створюємо, використовуємо та змінюємо змінні

🎈 Увага: У цій книзі код знаходиться у спеціальних секціях, які виділенні іншим ніж текст фоном. Результат виконання коду буде починатись з символів ## і буде надрукований зразу ж під кодом.

Зараз ми почнемо будувати наші навички з програмування. Філософія наша буде проста – ми будемо використовувати те, що ми вже знаємо, і по цеглині 🧱 додавати нові знання. Якщо ви хочете прискорити цей процес в кілька разів, наполегливо рекомендується створити новий записник Colab 📓 та кодувати паралельно із книгою. Почнемо ми зі змінних.

🎈 Увага: У Python як десятковий розділювач використовується точка . замість коми ,. Тобто 5.5 ми інтерпретуємо як п’ять цілих п’ять десятих. У цій книзі ми також будемо користуватись точкою ., щоб не заплутатись.

Скажімо, у вашому смартфоні збережено дуже велика кількість фотографій 📸 і залишилось 5.5 гігабайт 🇬🇧 gigabytes, скороченно Gb пам’яті з 64 гігабайт доступних. Спочатку, давайте з’ясуємо скільки вільного місця залишилось в мегабайтах 🇬🇧 megabytes, скорочено Mb . Нагадаємо, що в одному гігабайті міститься 1000 мегабайт. Ми вже вміємо використовувати Python як калькулятор 🧮, то ж давайте порахуємо:

5.5 * 1000
## 5500.0

Тепер нам цікаво скільки фотографій ще ми можемо зробити. Одна фотографія на вашому смартфоні займає приблизно 3 мегабайти. Нам треба перевести 5.5 гігабайти у мегабайти, тобто 5.5 * 1000 і розділити на розмір фотографії, тобто 3 мегабайти:

5.5 * 1000 / 3
## 1833.3333333333333

А тепер ми розрахуємо який відсоток вашої загальної пам’яті залишається доступним. Для цього ділимо кількість вільної пам’яті (5.5 гігабайт) на 64 гігабайти та множимо на 100%:

5.5 / 64 * 100
## 8.59375

Через кілька днів ваша пам’ять зменшилась ⬇️ до 5 гігабайти та ми хочемо порахувати усе те, що ми рахували до цього: 1️⃣ приблизну кількість фотографій і 2️⃣ відсоток вільної пам’яті:

5 * 1000 / 3
## 1666.6666666666667
5 / 64 * 100
## 7.8125

Так само, через кілька днів, пам’ять зменшується ⬇️ до 4.5 і нам треба порахувати ще разочок:

4.5 * 1000 / 3
## 1500.0
5.5 / 64 * 100
## 8.59375

Якщо ви уважно дивились 👀 на цифри, то звернули увагу на те, що відсоток вільної пам’яті збільшився ⬆️ з приблизно 7.8 до 8.6 відсотків. Як таке можливо? Якщо ми придивимось, ми побачимо що ми наплутали 🫤 та зазначили 5.5 замість 4.5. Насправді ми зробили цю помилку не випадково. Ми використовували й переписували одне і те саме число (кількість вільної пам’яті у гігабайтів) двічі, і тому вірогідність зробити помилку хоча б в одному місці доволі велика.

Саме цей факт і є мотивацією нового концепту який називається змінна 🇬🇧 variable . Формально, змінна – це ім’я, яке вказує на певний об'єкт 🇬🇧 object (тобто ділянку пам’яті комп’ютера).4 У цій главі під об’єктами ми будемо розуміти числові значення 🇬🇧 values . Ми можемо створювати нові змінні, змінювати їх значення, але найважливіше – використовувати значення змінних у коді.

Давайте створимо нову змінну з ім’ям free_space (з англійської – вільне місце) і присвоїмо цій змінній значення 4.5:

free_space = 4.5

Синтаксис створення змінних простий і складається з трьох частин: ім’я змінної зліва, потім знак дорівнює, а все що залишається праворуч – це буде значення.

🎈 Увага: У школі, на уроках математики x = 1 інтерпретувалось як рівняння x дорівнює 1. У програмуванні, цей запис має інше значення: ми присвоїли ім’я x до об’єкта 1 або іншими словами створили змінну яка вказує на 1.

Спочатку, давайте подивимось що саме міститься в змінній free_space. Для цього ми можемо просто зазначити її ім’я в клітинці для коду та виконати її. Python роздрукує значення цієї змінної:

free_space
## 4.5

Окей, їдемо далі. Коли змінна створена, ми можемо використовувати її в наших розрахунках 🧮. Давайте порахуємо кількість фотографій, які ми можемо зробити, коли в нас залишилось 4.5 вільної пам’яті. Тобто замість 4.5, ми зазначимо нашу змінну free_space:

free_space * 1000 / 3
## 1500.0

Та кількість вільної пам’яті у відсотках:

free_space / 64 * 100
## 7.03125

А тепер ми змінимо значення змінної на 4 гігабайти і знову запустимо розрахунки. Тут важливо звернути увагу, що розрахунки використовуються нове значення 4:

free_space = 4

Давайте спочатку перевіримо, що free_space все ж таки містить значення 4:

free_space
## 4

Кількість фотографій, коли у нас 4 гігабайти вільної пам’яті буде:

free_space * 1000 / 3
## 1333.3333333333333

А вільна пам’ять в процентах буде:

free_space / 64 * 100
## 6.25

4.2 ➕ Рахуємо за допомогою операторів

Оператори 🇬🇧 operators – це спеціальні символи (наприклад, *, / тощо), які використовуються для операцій. Так, згода, це все одно, що сказати що вода мокра 🌊. Гарна новина у тому, що ми вже знайомі із дуже важливою частиною з них, арифметичними операторами, і вже вміємо їх використовувати. Арифметичні оператори збігаються з математичними символами:

  • + додавання 🇬🇧 addition
  • - віднімання 🇬🇧 subtraction
  • * множення 🇬🇧 multiplication
  • / ділення 🇬🇧 division

Це не все. Ще до арифметичних операторів відносять також: піднесення до степеня 🇬🇧 exponentiation (**), отримання неповної частки 🇬🇧 floor division (//) та остачі від ділення 🇬🇧 modulus (%). Якщо бути відвертим, то останні два оператори використовуються доволі рідко. Тому, якщо ви не пам’ятаєте або не знаєте 🤔 що таке не повна частка та остача – не біда.

Давайте тепер трохи формалізуємо 👔 наші знання. Розглянемо множення двох чисел з нашого прикладу free_space * 1000. У цьому прикладі змінну free_space та значення 1000 ми будемо називати операндами 🇬🇧 operands . Тобто у випадку арифметичних операторів, операндами є все що стоїть ліворуч та стоїть праворуч від оператора. Арифметичні оператори мають дуже інтуїтивний синтаксис, який поділяється на три частини: перший операнд, безпосередньо сам оператор і другий операнд.

Йдемо далі. Послідовність з операндів та операторів називається виразом 🇬🇧 expression . Наприклад, 2 + 2 є виразом, і, наприклад free_space / 64 * 100 також є складним, але все одно виразом. З цього слідує, що операндами можуть бути не тільки змінні та значення, а й інші вирази.

Ми вже бачили багато прикладів з операторами, коли робили наші підрахунки. Тут ми тільки глянемо на новий оператор піднесення до степеня:

3 ** 2
## 9

Крім арифметичних операторів існують ще інші, як, наприклад, оператори порівняння, логічні оператори тощо. Ми ще до них повернемось у Главі 11.

До речі, у виразах з операторами, дужки відіграють таку ж роль, як і в математиці – вони регулюють порядок виконання дій. Наприклад, вираз 2 + 3 * 4 буде мати зовсім інший результат ніж (2 + 3) * 4:

2 + 3 * 4
## 14

Результат цього виразу не дорівнює значенню, яке поверне наступний вираз:

(2 + 3) * 4
## 20

Ми також можемо записати результат виразу до змінної та потім використати її:

used_space = 64 - free_space
used_space / 64 * 100
## 93.75

4.3 🔡 Викликаємо функції

Повернемось до нашого прикладу з вільною пам’яттю смартфона. Кількість вільної пам’яті в 4 гігабайти відповідає 6.25% від усієї доступної пам’яті телефона (дивись попередні розрахунки). Звичайно десяткова частина 0.25% цього відсотка для нас не так суттєва і не відіграє важливу роль. Ми все одно округляємо в голові до 6%, коли дивимось. Але ми не повинні цього робити в голові – у Python існує механізм, який дозволяє комп’ютерові округлити ⭕️ це число. Цей механізм – функція round():

round(6.25)
## 6

Згодом ви побачите, що у програмуванні ми дуже часто виконуємо одні і ті самі завдання. Наприклад, завдання знайти максимальне значення серед чисел або знайти модуль числа виникають майже постійно. І щоб щоразу не писати код, який вирішує такі повторні завдання, ми можемо створити окрему невеличку програму, яку ми назвемо функцією 🇬🇧 function . Зазвичай у функцій є ім’я за яким ми можемо її викликати – тобто виконати. Після імені функції треба написати дужки, між якими ми можемо зазначити аргументи 🇬🇧 arguments (якщо це передбачає функція). Аргументи дозволяють передавати інформацію у функцію, щоб функція могла виконати ту чи іншу дію, чи обчислення. Іншими словами, аргументи використовують для того, щоб вплинути на виконання функції.

До речі, аргументами функції можуть бути не тільки значення, а й змінні, вирази та виклики інших функцій. Повертаючись до прикладу про вільну пам’ять, ми можемо використати вираз free_space / 64 * 100 безпосередньо як аргумент до функції:

round(free_space / 64 * 100)
## 6

А ще ми можемо записати значення, яке поверне функція до змінної:

free_space_percentage = round(free_space / 64 * 100)

І потім використати, наприклад для того, щоб порахувати кількість зайнятої пам’яті:

100 - free_space_percentage
## 94

Ось приклад функції max(), яка повертає максимум серед зазначених чисел:

max(3, 3.5, 10, -20)
## 10

А ось приклад функції abs(), яка знаходить модуль 🇬🇧 absolute value числа:

abs(-10)
## 10

Python охоплює 69 вбудованих 🇬🇧 built-in функцій. Коли ми кажемо що функція вбудована – ми маємо на увазі, що ця функція є частиною Python. Інакше кажучи, ми можемо зразу ж нею користуватись. Активно користуватись ви будете скоріш всього не більш ніж 20 вбудованими функціями. Але на даному етапі це не повинно вас турбувати, ми вивчимо ці функції природним шляхом через практику, ніж будемо запам’ятовувати як вірші.

4.4 🪛 Користуємось методами та атрибутами об’єктів

Окрім функцій, є ще кілька корисних речей, які полегшать нам життя. По-перше, майже кожен об’єкт у Pyhon має так звані методи 🇬🇧 methods . Методи – це функції які прикріплені до об’єктів. Вони використовуються щоб, наприклад, змінити цей об’єкт чи отримати якусь інформацію про цей об’єкт.

Давайте конкретніше! Спершу створимо змінну half (з англійської – половина), яка вказуватиме на число 0.5. Якщо ми захочемо представити це число у вигляді дробі 🍰, ми можемо скористатися методом .as_integer_ratio(), який поверне пару – чисельник та знаменник. тобто 1 та 2. Число \(0.5\) у вигляді дробі має вигляд \(\frac{1}{2}\), де \(1\) – це чисельник, а \(2\) – це знаменник.

Щоб використати цей метод, нам потрібно спочатку зазначити: ім’я нашої змінної half, крапку ., ім’я нашого методу as_integer_ratio і нарешті дужки ( та ). Якщо метод передбачає використання аргументів, то їх треба зазначити між дужками.

half = 0.5
half.as_integer_ratio()
## (1, 2)

Наступна корисна штука називається атрибут 🇬🇧 attribute . Атрибут теж прикріплений до певного об’єкта та використовується для того, щоб отримати якусь інформацію про об’єкт. Наприклад, щоб отримати дійсну частину від нашої змінної half, ми можемо використати атрибут .real. Ми не будемо занурюватись у математику комплексних чисел 😱, щоб зрозуміти що саме означає цей атрибут, нам тільки важливо зрозуміти як його отримати. А отримати значення атрибута дуже просто – треба спочатку прописати ім’я змінної half, крапку ., і нарешті ім’я атрибуту real:

half.real
## 0.5

Ось і все, що нам потрібно зараз знати про методи та атрибути. До речі, у тексті цієї книги 📕 ми будемо позначати методи починаючи з крапки та закінчуючи дужками .ім'я_метода(), а атрибути – просто починаючи з крапки .ім'я_атрибуту.


У цій главі ми дізнались для чого нам потрібні змінні і як з ними працювати. Більш того, ми навчились користуватись арифметичними операторами та викликати функції. Нарешті, ми познайомились з методами та атрибутами об’єктів. Не турбуйтесь, якщо якісь визначення ви не запам’ятали – ми їх будемо ретельно пропрацьовувати в усіх наступних главах і незабаром ці терміни стануть для вас інтуїтивними.


🤸 Вправи
1. Перетягніть атрибути та методи до їх відповідних кошиків 🧺:
.numerator
.conjugate()
.denominator
.bit_count()
Атрибути
Методи
2. Як називаються oranges та 34 у виразі 34 / oranges 🍊?
3. Що поверне наступний код 🤓?
quarter = 0.25
quarter.as_integer_ratio()
4. Запиши код, який поверне модуль числа 3.14 🔪:
5. Чому наступний код не працює 🤔?
price_in_eur = 8
price_in_eur * eur_to_uah
eur_to_uah = 40.31
6. Враховуючи що функція max() повертає максимальне число серед зазначенних, то фукнція min() 💬...
7. Перетягніть елементи коду, щоб у результаті отримати 4:
20
1
-
/
4
8. Наступний код повинен підрахувати площу круга 🟣 з радіусом 5:
______ = 5
pi = 3.14
pi * radius ^ 2
Що треба зазначити замість ______, щоб код запрацював?

  1. Ми не будемо зараз розбиратись, як саме це працює – нам набагато важливіше зрозуміти як керувати цим процесом. Це як з автівками, нам не обов’язково розуміти як працює двигун, щоб навчитись керувати. Але ми повернемось до цієї теми у Додатку F↩︎