# напиши код прямо тут замість трьох крапок
...
01: функції та змінні
Наша мета на сьогодні:
- Запустити python швидше, ніж за 20 хвилин.
- Спробувати python на смак
0. Куди це я потрапив?
Jupyter Notebook - це штука для інтеракктивного запуску коду в браузері. Багато де використовують. Можна писати код, виконувати його і дивитися на результат.
Напиши в комірці нижче 2 + 2
і натисни на кнопки Shift і Enter одночасно. Твій код виконається і ти побачиш відповідь. Далі так і будемо писати код.
Ще у комірок буває різний тип. У цій частині семінару ваш семінарист трохи повчить вас працювати в зошитах із Markdown.
Markdown
1. Python як калькулятор
Можна додавати, множити, ділити і так далі…
4 * 7
3 * (2 + 5)
5 ** 3
5 / 2
5 // 2 # Людина проти машини: раунд 1, вгадайте, що вийде?
5 % 2 # а тут?
Як йдуть справи з іншими операціями? Спробуємо витягти квадратний корінь:
4) sqrt(
Отримання квадратного кореня не входить до комплекту математичних операцій, доступних у Python за замовчуванням, тому замість відповіді ми отримали якусь незрозумілу лайку.
Ця незрозуміла лайка називається винятком, колись ми навчимося їх обробляти, а зараз звернемо увагу на останній рядок: NameError: name 'sqrt' is not defined
- тобто “я не розумію, що таке sqrt”. Однак, не все так погано: відповідна функція є в модулі math
. Щоб нею скористатися, потрібно імпортувати цей модуль. Це можна зробити різними способами.
import math
4) math.sqrt(
Після того, як модуль math
імпортовано, ви можете дізнатися, які ще в ньому є функції. У IPython Notebook для цього достатньо ввести ім’я модуля, поставити крапку і натиснути кнопку “Tab”. Ось, наприклад, синус:
0) math.sin(
Наведений синтаксис може виявитися незручним, якщо вам часто доводиться викликати якісь математичні функції. Щоб не писати щоразу слово math
, можна імпортувати з модуля конкретні функції.
from math import sqrt
4) sqrt(
Також можна довантажити якийсь модуль або пакет, але водночас змінити в нього назву на коротшу і користуватися ним.
import math as mh
4) mh.sqrt(
2. Змінні
Поняття “змінної” в програмуванні схоже на аналогічне поняття в математиці. Змінна - це осередок пам’яті, що позначається якимось ім’ям. У цій комірці можуть зберігатися числа, рядки і складніші об’єкти. Ми поки що попрацюємо трошки з числовими змінними.
= 4
x x
= x + 2
x x
А що буде в \(x\), якщо запустити клітинку ще раз?
3. Типи
Спробуємо записати числа по-різному
4 * 42
'4' * 42 # Людина проти машини: раунд 2, вгадайте, що вийде?
Для кожного типу арифметика працює по-своєму!
= 'Ї'
a = 'жак'
b + b a
type(4)
type('4')
type(4.0)
type(True)
str
- текстовийint
- цілочисельнийfloat
- число з плаваючою комою (звичайне дійсне число)bool
- булева змінна
Іноді можна переходити від одного типу змінної до іншого.
= '42'
x print(type(x))
= int(x)
x print(type(x))
А іноді ні. Вмикайте логіку :)
= 'Люк, я твой отец'
x print(type(x))
= int(x)
x print(type(x))
Булеві змінні виникають при різних порівняннях, їх ми будемо активно використовувати на наступному семінарі.
2 + 2 == 4
2 + 2 == 5
= 5
x < 8 x
4. Речовинні числа та похибки
Дійсні числа в програмуванні не такі прості. Ось, наприклад, порахуємо синус числа \(\pi\):
from math import pi, sin
# думаєте, вийде 0? Ха-ха! sin(pi)
Незрозуміла відповідь? По-перше, це так звана комп’ютерна форма експоненціального запису чисел. Вона зручна, якщо треба вміти записувати дуже великі або дуже маленькі числа: 1.2E2
означає 1.2⋅102
, тобто 1200
, а 2.4e-3
- те ж саме, що 2.4⋅10-3=00024
.
Результат, порахований Python для \(\sin \pi\), має порядок 10-16
- це дуже маленьке число, близьке до нуля. Чому не “справжній” нуль? Усі обчислення в дійсних числах робляться комп’ютером з деякою обмеженою точністю, тому часто замість “чесних” відповідей виходять такі наближені. До цього треба бути готовим.
# Людина проти машини: раунд 3, вгадайте, що вийде?
0.4 - 0.3 == 0.1
0.4 - 0.3
Коли порівнюєте дійсні числа, будьте обережнішими.
5. Введення-виведення і ми знову граємо в улюблених.
Робота в Jupyter рідко вимагає писати код, який сам по собі запитує дані з клавіатури, але для інших додатків (і зокрема для домашніх робіт) це може знадобитися. До того ж, написання інтерактивних додатків саме по собі кумедне заняття. Напишемо, наприклад, програму, яка вітається з нами на ім’я.
= input("Введіть ваше ім'я: ")
name print("Привіт,",name)
name
Що тут сталося? У першому рядку ми використовували функцію input
. Вона вивела на екран рядок, який їй передали (обов’язково в лапках), і запросила відповідь із клавіатури. Я її ввів, вказавши своє ім’я. Після чого input
повернула рядок з ім’ям і присвоїла його змінній name
.
Після цього в другому рядку було викликано функцію print
і їй було передано два рядки - “Привіт,” і те, що зберігалося у змінній name
Функція print
вивела ці два рядки послідовно, розділивши пропуском. Зауважимо, що у змінній name
, як і раніше, лежить той рядок, який ми ввели з клавіатури.
Спробуємо тепер написати програму “подвоювач”. Вона повинна буде приймати на вхід число, подвоювати його і повертати результат.
= input("Введіть якесь число: ")
x = x * 2
y print(y)
Щось пішло не так. Що саме? Як це виправити?
6. Вчимося дружити з пошуковими системами
Задача: я хочу згенерувати рандомне число, але я не знаю як це зробити. Що я буду робити?
# Місце для маленького дива
Побачили диво? Давайте домовимося, що ви не будете соромитися гуглити потрібні вам команди і шукати відповіді на свої запитання в інтернеті. Якщо вже зовсім не виходить, ставте їх у наш чат технічної підтримки в Телеграм.
8. Дзен Python і PEP-8
Як ми побачили вище, команда import
дозволяє довантажити різні пакети і модулі. Один із модулів, який обов’язково потрібно довантажити на першій же парі - це модуль this
import this
Розробники мови Python дотримуються певної філософії програмування, яка називається “The Zen of Python” (“Дзен Пітона”, або “Дзен Пайтона”). Вище ми вивели на екран саме її. Вивчіть цю філософію і теж почніть її дотримуватися.
Ба більше, ми рекомендуємо вам вивчити стайлгайд з написання коду від Google.
Ваше завдання
- Виконати завдання які є в Moodle або в мене на сайті.