Типи даних, змінні та вирази
Програма має знати не лише саме значення, а й як із ним працювати. Число виміряної довжини хвилі можна множити й порівнювати, текстову назву зразка - поєднувати з іншим текстом, а логічна ознака може повідомляти, чи завершено калібрування. Такі правила задають типи даних.
Цілі лекції
Після опрацювання матеріалу ви зможете:
- розпізнавати основні типи Python:
int,float,complex,boolіstr; - пояснювати різницю між значенням, типом та ім'ям змінної;
- створювати зрозумілі змінні й константи за домовленістю;
- складати арифметичні, порівняльні та логічні вирази;
- визначати порядок виконання операторів і використовувати дужки;
- явно перетворювати дані, отримувати їх через
input()і виводити черезprint(); - враховувати похибку подання
floatі застосовувати базові засоби модуляmath.
Передумови
Потрібно розуміти, що програма реалізує алгоритм, уміти запустити простий файл Python і читати послідовні команди. Достатньо знати звичайні арифметичні дії та прості порівняння.
1. Значення та тип
Значення - конкретні дані, з якими працює програма: 532, 1.47, True або "лінза". Тип даних визначає допустимі значення, операції над ними та спосіб їх подання в пам'яті.
Основні типи цієї лекції:
| Тип Python | Що зберігає | Приклад |
|---|---|---|
int | цілі числа довільної практичної довжини | 532, -4, 0 |
float | дійсні числа з обмеженою точністю | 1.47, 0.0025 |
complex | комплексні числа | 3 + 2j |
bool | логічні значення | True, False |
str | текстові рядки | "зелений лазер" |
У Python тип належить значенню, а ім'я може згодом посилатися на значення іншого типу. Тип можна перевірити функцією type(...).
У навчальному поділі int, float, complex і bool називають простими, або скалярними, типами: одне значення подає одне число чи стан. Рядок str є базовим вбудованим типом, але водночас послідовністю символів. Складені типи зберігають кілька значень: наприклад, список вимірювань, кортеж координат або словник параметрів. Їх докладно розглянемо пізніше.
Перший приклад створює значення всіх п'яти типів і показує їх. Python є основною мовою; Scala та Go наведено для порівняння синтаксису.
wavelength_nm = 532
refractive_index = 1.47
wave_amplitude = 3 + 2j
is_calibrated = True
sample_name = "скляна лінза"
print(type(wavelength_nm).__name__)
print(refractive_index, wave_amplitude)
print(is_calibrated, sample_name)У Python комплексна одиниця позначається літерою j, тому 3 + 2j має тип complex. Значення bool записують саме як True і False з великої літери.
2. Динамічна і статична типізація
Python має динамічну типізацію: тип значення перевіряється під час виконання, а перед присвоєнням не потрібно оголошувати тип змінної. Тому такий код синтаксично допустимий:
result = 532
result = "немає сигналу"
Це не означає, що типів немає або їх можна безпечно змішувати. Вираз 532 + " нм" спричинить TypeError, бо додавання числа й рядка не визначене.
Scala і Go переважно використовують статичну типізацію: тип змінної визначається до запуску та не змінюється довільно. Обидва підходи допомагають створювати надійні програми, але виявляють частину помилок у різний момент. У цьому курсі ми явно стежитимемо за типами навіть тоді, коли Python не вимагає їх записувати поруч з ім'ям.
3. Змінні, присвоєння і пам'ять
Змінна у Python - це ім'я, пов'язане зі значенням. Команда
wavelength_nm = 532
обчислює значення праворуч і пов'язує з ним ім'я ліворуч. Знак = тут означає присвоєння, а не математичну рівність. Для перевірки рівності використовують ==.
Інтуїтивно пам'ять можна уявити як місце, де Python тримає об'єкти-значення, а змінні - як підписи, що дають змогу знайти потрібний об'єкт. Це корисніше за уявлення, ніби ім'я назавжди є коробкою певного типу. Точне керування пам'яттю Python виконує автоматично.
Імена
Добре ім'я описує зміст і за потреби одиницю вимірювання:
wavelength_nm, а неx;lens_count, а неlc;is_calibratedдля логічної ознаки;sample_nameдля тексту.
Ім'я може містити літери, цифри та _, але не починатися з цифри. Python розрізняє регістр: power і Power - різні імена. Не можна використовувати службові слова на зразок if, for або class. Звичайні змінні називають у стилі snake_case.
Константи
Константа - значення, яке за задумом програми не повинно змінюватися. Python не забороняє його переприсвоїти, тому константи позначають домовленістю: ім'я пишуть великими літерами з підкресленнями.
SPEED_OF_LIGHT = 299_792_458 # м/с
Підкреслення всередині числового літерала покращують читання й не змінюють значення.
4. Арифметичні вирази
Вираз поєднує значення, змінні, оператори та виклики функцій і після обчислення дає результат.
| Оператор | Дія | Приклад | Результат |
|---|---|---|---|
+ | додавання | 7 + 3 | 10 |
- | віднімання | 7 - 3 | 4 |
* | множення | 7 * 3 | 21 |
/ | звичайне ділення | 7 / 2 | 3.5 |
// | ділення без дробової частини | 7 // 2 | 3 |
% | остача від ділення | 7 % 2 | 1 |
** | піднесення до степеня | 2 ** 3 | 8 |
Оператор / у Python повертає float навіть для 8 / 2. Оператори // і % корисні для поділу на групи та перевірки кратності, але поведінка // з від'ємними числами потребує окремої уваги.
Скорочене присвоєння поєднує операцію зі збереженням результату:
measurement_count += 1
total_power += current_power
У Python немає операторів ++ і --. Щоб збільшити лічильник на одиницю, пишуть measurement_count += 1, а щоб зменшити - measurement_count -= 1.
5. Порівняння та логічні вирази
Порівняння дає значення True або False.
| Оператор | Значення |
|---|---|
== | дорівнює |
!= | не дорівнює |
<, <= | менше, менше або дорівнює |
>, >= | більше, більше або дорівнює |
Python підтримує ланцюжок порівнянь. Вираз 400 <= wavelength_nm <= 700 перевіряє, чи потрапляє довжина хвилі до заданого діапазону.
Логічні оператори поєднують або заперечують умови:
andістинний, коли істинні обидві умови;orістинний, коли істинна хоча б одна умова;notзмінюєTrueнаFalseі навпаки.
is_visible = 380 <= wavelength_nm <= 750
is_safe = power_mw <= power_limit_mw
can_measure = is_calibrated and is_visible and is_safe
Ці вирази лише обчислюють логічні значення. Виконання різних гілок за умовою розглядатимемо в наступній лекції.
6. Пріоритет операторів
Python виконує оператори не просто зліва направо. Для операторів цієї лекції достатньо пам'ятати такий порядок від вищого пріоритету до нижчого:
- дужки
(); - степінь
**; - унарні знаки
+x,-x; *,/,//,%;+,-;- порівняння
==,!=,<,<=,>,>=; not;and;or.
Тому 2 + 3 * 4 дорівнює 14, а (2 + 3) * 4 - 20. Навіть коли дужки не обов'язкові, вони можуть зробити інженерну формулу зрозумілішою:
energy = (PLANCK_CONSTANT * SPEED_OF_LIGHT) / wavelength_m
Не варто будувати довгий вираз лише для демонстрації знання пріоритетів. Зрозумілий запис зменшує ризик помилки.
7. Введення, перетворення і виведення
Функція input() показує підказку, чекає введення та завжди повертає str. Для обчислення текст потрібно явно перетворити, наприклад функцією float() або int().
wavelength_text = input("Довжина хвилі, нм: ")
wavelength_nm = float(wavelength_text)
wavelength_m = wavelength_nm * 1e-9
print(f"Довжина хвилі: {wavelength_m:.3e} м")Якщо ввести 532, Python-варіант виведе:
Довжина хвилі, нм: 532
Довжина хвилі: 5.320e-07 м
Основні явні перетворення:
int("12")дає ціле число12;float("1.47")дає число1.47;str(532)дає рядок"532";complex("3+2j")дає комплексне число3+2j.
Перетворення не завжди можливе: int("1.47") або float("зелений") спричинить ValueError. Спочатку треба знати формат вхідних даних. int(1.99) дає 1, відкидаючи дробову частину, а не округлюючи число.
Для виведення кількох значень можна передати їх у print(...). F-рядок дає змогу вставляти значення у текст і керувати форматом: {value:.2f} показує дві цифри після десяткової крапки, а {value:.3e} - науковий запис.
8. Особливість float
Більшість десяткових дробів не мають точного скінченного подання у двійковій системі. Тому результат може містити малу похибку:
print(0.1 + 0.2) # 0.30000000000000004
print(0.1 + 0.2 == 0.3) # False
Це не випадкова помилка Python, а властивість поширеного подання чисел з рухомою крапкою. Для наближеного порівняння результатів обчислень використовують допустиму похибку або math.isclose(...).
9. Модуль math
Модуль стандартної бібліотеки math містить математичні константи та функції для дійсних чисел: math.pi, math.sqrt(), math.sin(), math.cos(), math.log() та інші. Перед використанням модуль імпортують.
import math
angle_degrees = 30
angle_radians = math.radians(angle_degrees)
print(math.sin(angle_radians))
print(math.sqrt(2))
print(math.isclose(0.1 + 0.2, 0.3))Очікувані перший і третій результати - приблизно 0.5 та True у Python. Тригонометричні функції приймають кути в радіанах, тому градуси спочатку перетворено функцією math.radians().
math.sqrt(-1) не працює з комплексним результатом. Для математичних функцій над значеннями complex у Python існує окремий модуль cmath.
Підсумок
- Значення має тип, який визначає допустимі операції; основні типи цієї лекції -
int,float,complex,boolіstr. - Python має динамічну типізацію, але програма все одно повинна узгоджувати типи значень.
- Присвоєння
=пов'язує ім'я зі значенням, а порівняння рівності записують як==. - Змінні називають зрозуміло у стилі
snake_case, а константи за домовленістю -UPPER_SNAKE_CASE. - Арифметичні, порівняльні й логічні оператори утворюють вирази; дужки явно задають порядок і покращують читання.
- Python не має
++і--; використовують+= 1та-= 1. input()повертаєstr, тому числове введення потребує явного перетворення.- Значення
floatможуть мати малу похибку; наближену рівність перевіряють, зокрема, черезmath.isclose(). - Модуль
mathнадає математичні константи й функції для дійсних чисел.
