Python Core

Вирази, оператори, введення і перетворення типів

Арифметичні вирази та пріоритет операторів, ділення націло й остача з від'ємними числами, скорочені оператори, введення через input, перетворення типів int, float, str, bool та форматування виводу через f-рядки.

Вирази, оператори, введення і перетворення типів

Програма, що рахує за вас

Досі програми лише виводили готовий текст. Тепер вони навчаться обчислювати: брати числа від користувача, виконувати дії та показувати результат. Для цього потрібні три речі: вирази й оператори, функція введення input і перетворення типів, бо введене користувачем Python завжди сприймає як текст.

🎯 Мета лекції

  • Записувати арифметичні вирази й знати пріоритет операторів.
  • Розрізняти /, //, % і **, зокрема з від'ємними числами.
  • Користуватися скороченими операторами (+= та іншими).
  • Читати введення через input() і перетворювати його на число.
  • Форматувати вивід за допомогою f-рядків.

🔑 Ключові терміни

  • Вираз (expression): код, який має значення (2 + 3).
  • Інструкція (statement): код, який виконує дію (x = 2 + 3).
  • Оператор: символ дії: +, -, *, /, //, %, **.
  • Приведення типів (type conversion): створення об'єкта іншого типу з наявного.
  • f-рядок: рядок з виразами у фігурних дужках.

Пригадаємо попередній урок

Вирази та інструкції

Вираз (expression) — частина коду, яка має значення: 2 + 3, x * 4, len("abc"). Python обчислює вираз і отримує об'єкт.

Інструкція (statement) — рядок, який щось виконує: x = 2 + 3, print(x). Інструкція може містити вирази. Правило для розрізнення: вираз можна вставити всередину print(...), а інструкцію — ні.

print(2 + 3)
x = 2 + 3
print(x)
5
5

Арифметичні оператори

ОператорДіяПрикладРезультат
+додавання7 + 29
-віднімання7 - 25
*множення7 * 214
/ділення7 / 23.5
//ділення націло7 // 23
%остача від ділення7 % 21
**піднесення до степеня7 ** 249

Оператор / завжди повертає float, навіть коли ділення без остачі: 10 / 2 дорівнює 5.0. Для цілого результату використовують //.

Пріоритет операторів

Вираз Python будує як дерево: спершу виконуються операції з вищим пріоритетом. Порядок такий:

  1. ** (степінь);
  2. унарний мінус (-x);
  3. *, /, //, %;
  4. +, -.

Дужки змінюють порядок:

print(2 + 3 * 4)
print((2 + 3) * 4)
print(2 ** 3 ** 2)
print(-2 ** 2, (-2) ** 2)
14
20
512
-4 4

Дві особливості: ** виконується справа наліво (2 ** 3 ** 2 це 2 ** 9), а мінус нижчий за степінь: -2 ** 2 — це -(2 ** 2). Якщо порядок неочевидний, ставте дужки.

Ділення націло і остача

Оператор // повертає цілу частку, % — остачу. Для додатних чисел це очевидно: 7 // 2 дорівнює 3, 7 % 2 дорівнює 1. Корисні застосування:

  • парність: n % 2 дорівнює 0 для парних чисел;
  • розбиття на одиниці й десятки: 47 // 10 дає 4, 47 % 10 дає 7;
  • перерахунок одиниць: секунди в години, хвилини й секунди.

З від'ємними числами Python ділить із округленням униз (до меншого цілого), а не до нуля:

print(-7 // 2, -7 % 2)
print(7 // -2, 7 % -2)
print(divmod(-7, 2))
-4 1
-4 -1
(-4, 1)

Результат -7 / 2 дорівнює -3.5, і округлення вниз дає -4, а не -3. Остача підбирається так, щоб виконувалась рівність -7 = 2 · (-4) + 1.

Функція divmod(a, b) повертає частку й остачу разом. Знак остачі збігається зі знаком дільника: -7 % 2 дорівнює 1, а 7 % -2 дорівнює -1.

Ділення на нуль викликає ZeroDivisionError для /, // і %: 10 / 0 завершується повідомленням ZeroDivisionError: division by zero.

Скорочені оператори

Дію над змінною та присвоєння результату тій самій змінній записують коротко:

СкороченоТе саме, що
x += 5x = x + 5
x -= 3x = x - 3
x *= 2x = x * 2
x //= 5x = x // 5
x **= 2x = x ** 2
x %= 7x = x % 7

Для незмінних типів (int, float, str) такий запис створює новий об'єкт, як і x = x + 1 з минулого уроку. Перевірте на рядках: += склеює рядки, але другу змінну не змінює.

+= для рядка
Завантаження трасування…

Рядок word += "c" створив новий рядок "abc" і переніс на нього word. Об'єкт "ab" лишився за copy.

Введення: input()

Функція input() зупиняє програму, чекає, поки користувач введе рядок і натисне Enter, і повертає введене як рядок (str). Аргумент input — підказка, яка виводиться перед введенням:

name = input("Ваше ім'я: ")
print("Привіт,", name)
python hello_name.py
Ваше ім'я: Олена
Привіт, Олена

Головна особливість: input() завжди повертає str, навіть якщо користувач ввів число. Тому арифметика над введенням без перетворення не працює:

x = input("n: ")
print(x + 1)
TypeError: can only concatenate str (not "int") to str

Для рядка "5" оператор + означає склеювання, а склеїти рядок із числом Python не може. Оператор * із рядком означає повторення: "5" * 3 дає "555".

Перетворення типів

Щоб отримати число з рядка, використовують функції-перетворювачі: int(), float(), str(), bool(). Кожна створює новий об'єкт потрібного типу, а початковий не змінює.

print(int("42"), int(" 42 "), float("3.14"), float(3), str(42))
print(int(3.9), int(-3.9))
42 42 3.14 3.0 42
3 -3
  • Пробіли навколо числа в рядку допустимі.
  • int() від дробу відкидає дробову частину (до нуля), а не округлює: int(3.9) дорівнює 3.
  • round(x) округлює до найближчого цілого, round(x, n) — до n знаків.

Простежте повний цикл у трасувальнику: input повертає рядок, int створює окремий об'єкт-число.

input і int
Завантаження трасування…

На схемі після рядка number = int(raw) лежать два різні об'єкти: рядок '41' і число 41. Рядок raw залишився без змін.

Що може піти не так

Не кожен рядок можна перетворити. Якщо вміст не схожий на число, Python викликає ValueError:

int("3.5")
ValueError: invalid literal for int() with base 10: '3.5'

Рядок "3.5" — це не ціле число, тому int його відхиляє, і це правильна поведінка: Python не здогадується, що користувач мав на увазі. Правильний шлях для дробу: float("3.5"), а потім за потреби int(...). Інші типові помилки:

КодРезультат
int("abc")ValueError: invalid literal for int() with base 10: 'abc'
int("")ValueError: invalid literal for int() with base 10: ''
float("1,5")ValueError: could not convert string to float: '1,5'
int(None)TypeError: int() argument must be a string, a bytes-like object or a real number, not 'NoneType'

Для дробів Python чекає крапку, а не кому. Як перехоплювати такі помилки й просити користувача ввести дані ще раз, розглянемо в уроці про винятки.

bool() і неявні перетворення

bool() повертає False для нуля, порожнього рядка та порожніх колекцій, а в решті випадків True. Важлива деталь: непорожній рядок завжди істинний, навіть "0" та "False":

print(bool(0), bool(0.0), bool(""), bool("0"), bool("False"))
False False False True True

Іноді Python перетворює типи сам. Це неявне перетворення, і воно відбувається лише там, де результат однозначний:

print(1 + 2.0)
print(True + 1)
3.0
2

int у змішаному виразі з float перетворюється на float, bool — на int. Рядок із числом так не змішується: "5" + 5 завершується TypeError.

f-рядки

f-рядок (f-string) — рядок із літерою f перед лапками. Вирази у фігурних дужках обчислюються й підставляються:

name, age = "Олена", 20
print(f"{name} має {age} років")
print(f"Через рік: {age + 1}")
print(f"{age=}")
Олена має 20 років
Через рік: 21
age=20

Після двокрапки в дужках задають формат:

ЗаписРезультатОпис
{3.14159:.2f}3.14два знаки після крапки
{1234567:,}1,234,567роздільник розрядів
{42:05d}00042ширина 5, нулі зліва
{0.256:.1%}25.6%відсотки
{"Олена":>8} Оленавирівнювання праворуч
{"Олена":<8}Олена ліворуч
{"Олена":^8}Олена по центру

Щоб вивести фігурну дужку, її подвоюють: f"{{текст}}" дає {текст}.

Приклад: калькулятор гіпотенузи

Об'єднаємо все: введення, перетворення, вираз і форматований вивід.

a = float(input("Катет a: "))
b = float(input("Катет b: "))
c = (a ** 2 + b ** 2) ** 0.5
print(f"Гіпотенуза: {c:.2f}")
python hypotenuse.py
Катет a: 3
Катет b: 4
Гіпотенуза: 5.00

Порядок дій: input повертає рядки, float перетворює їх на числа, вираз обчислює корінь через степінь 0.5, f-рядок виводить результат із двома знаками.

Підсумок

  1. Вираз має значення, інструкція виконує дію. Пріоритет: **, унарний -, * / // %, + -.
  2. / завжди дає float, // ділить націло з округленням вниз, % дає остачу зі знаком дільника.
  3. Скорочені оператори (+= та інші) для незмінних типів створюють новий об'єкт.
  4. input() завжди повертає str.
  5. int(), float(), str(), bool() створюють новий об'єкт. int("3.5") — ValueError, int(3.9) — 3.
  6. f-рядок підставляє вирази й форматує вивід: {x:.2f}, {n:05d}.

Типові хибні уявлення

Передбачте, перш ніж запускати

Практичні завдання

Наступний урок: логіка та розгалуження. Порівняння, and, or, not, if і elif, match.
Copyright © 2026