Логотип коледжу
Оптико-механічний фаховий коледж

Типи даних, змінні та вирази

Програма має знати не лише саме значення, а й як із ним працювати. Число виміряної довжини хвилі можна множити й порівнювати, текстову назву зразка - поєднувати з іншим текстом, а логічна ознака може повідомляти, чи завершено калібрування. Такі правила задають типи даних.

Цілі лекції

Після опрацювання матеріалу ви зможете:

  • розпізнавати основні типи 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 + 310
-віднімання7 - 34
*множення7 * 321
/звичайне ділення7 / 23.5
//ділення без дробової частини7 // 23
%остача від ділення7 % 21
**піднесення до степеня2 ** 38

Оператор / у 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 виконує оператори не просто зліва направо. Для операторів цієї лекції достатньо пам'ятати такий порядок від вищого пріоритету до нижчого:

  1. дужки ();
  2. степінь **;
  3. унарні знаки +x, -x;
  4. *, /, //, %;
  5. +, -;
  6. порівняння ==, !=, <, <=, >, >=;
  7. not;
  8. and;
  9. 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 надає математичні константи й функції для дійсних чисел.

Завдання

1. Який тип Python має значення 3 + 2j?

2. Який тип має результат input() у Python до явного перетворення?

3. Який оператор Python збільшує змінну count на 1?

4. Яке значення має вираз 2 + 3 * 4 у Python?

5. Який запис доречний для перевірки наближеної рівності двох результатів обчислень a і b типу float?

6. Яке ім'я відповідає домовленості Python для константи швидкості світла?