Відео знайомить з типами `str`, `bool`, `int`, `float` і `list` через практичні задачі автоматизації: нормалізацію тексту, перевірку URL, перетворення цін і пагінації, сортування та область видимості. Type hints використовуються для читабельності й автодоповнення, але не замінюють runtime-перевірок.
Примітка: конспект укладено за автоматичними українськими субтитрами; назви Python API нормалізовано за контекстом відео.
Після цього уроку ви зможете
Нормалізувати й розділяти UI text через стандартні methods str.
Явно перетворювати numeric text та обробляти помилки conversion.
Розрізняти in-place list operations і functions, що повертають нове значення.
Застосовувати type hints, local scope і instance attributes без приписування їм runtime enforcement.
Для експериментів створюється src і окремий Python package. У класичному package файл __init__.py явно позначає директорію як пакет для інструментів і імпортів. Сучасний Python також підтримує namespace packages без __init__.py, але явний пакет часто передбачуваніший для навчального проєкту.
Експерименти з типами відокремлюються від тестів: короткий файл можна запускати напряму, щоб перевірити перетворення або метод перед вбудовуванням у сценарій.
Змінна hello_world: str демонструє рядковий тип. Python здатен вивести тип із правої частини, але annotation робить намір видимим у code review та допомагає IDE з автодоповненням.
Для швидкого експерименту значення виводиться через print(). IDE postfix templates і шорткати скорочують набір коду, але результат залишається звичайним Python-викликом.
Термін
Type hint
Python runtime не примушує function і variable annotations відповідати значенням; annotations споживають type checkers, IDE та інші tools.
Саме оголошення def print_hello(): нічого не виконує. Функцію треба окремо викликати. Це розділяє опис поведінки та момент її запуску.
Далі функція параметризується ім’ям. Замість фіксованого Hello World вона приймає name і формує f"Hello {name}", тому один алгоритм працює з різними вхідними даними.
Сигнатура на кшталт def hello_to(name: str) -> str описує вхід і результат. IDE після крапки може підказати методи str, а reviewer одразу бачить контракт функції.
Важливе уточнення: type hints за замовчуванням не перевіряються інтерпретатором як жорстке обмеження й не є оптимізацією швидкодії. Їхню коректність перевіряють IDE, type checker і тести.
.lower() і .upper() нормалізують регістр перед порівнянням, наприклад коли тестові дані й UI відрізняються лише великими літерами. Результат методу — новий рядок; початковий str не змінюється, якщо результат не присвоїти.
.removeprefix("https://") і .removesuffix(...) прибирають точний префікс або суфікс. Якщо збігу немає, рядок повертається без змін. Це безпечніше за довільне replace(), коли потрібно обробити лише край рядка.
Що змінилося після запису
Версійна межа `removeprefix()` і `removesuffix()`
АктуальноЦі methods додані у Python 3.9. Оскільки версію Python у metadata уроку не надано, автору треба підтвердити, що course runtime — Python 3.9 або новіший.
Перевірено 2026-07-31
Термін
removeprefix / removesuffix
str.removeprefix() і str.removesuffix() повертають рядок без точного prefix або suffix, а за відсутності збігу повертають початковий рядок.
.split(separator) перетворює один рядок на list[str], наприклад список email або частини тексту. Після цього до елементів можна звертатися за індексом, видаляти, вставляти або сортувати їх.
Під час експерименту видно важливу особливість: методи на кшталт list.insert() змінюють список на місці й повертають None. Тому результат не треба присвоювати назад у список; спочатку викликається emails.insert(...), потім читається emails.
Термін
In-place list operation
Methods mutable collections, які лише змінюють object, повертають None; тому list.insert() і list.sort() не треба присвоювати назад змінній.
.startswith() і .endswith() повертають True або False. Це дозволяє перевірити протокол або закінчення URL без ручного пошуку підрядка.
Boolean використовується в if/else: якщо адреса починається з https, код повідомляє про захищений протокол, інакше — про незахищений. У тестах такий результат може керувати різними перевірками залежно від стану сторінки або даних.
Текст, отриманий з UI, залишається рядком навіть тоді, коли візуально містить число. Для арифметики його явно перетворюють: int(page_number_text) для індексу пагінації або float(price_text) для демонстраційного десяткового значення.
Некоректний числовий рядок спричинить ValueError, тому на trust boundary формат треба перевірити або обробити помилку. Для точних грошових розрахунків float небезпечний через двійкове округлення; у production краще Decimal або цілі minor units, наприклад копійки/центи.
Уточнення
Не використовуйте binary `float` для точних грошей
Для цін і підсумків, де потрібна точна decimal arithmetic, використовуйте Decimal зі string input або integer minor units; float не може точно представляти більшість decimal fractions.
Термін
Decimal
Decimal представляє decimal numbers exactly і зберігає значущі trailing zeros, тому придатніший за binary float для точних фінансових значень.
Приклад коду
Сортування цін через `Decimal`
from decimal import Decimal
prices = [Decimal(value) for value in ("10.99", "9.43", "12.20")]
prices.sort(reverse=True)
assert prices[0] == max(prices)
print(prices)
UI-like string values перетворюються на exact Decimal, сортуються за спаданням і перевіряються через max().
Кілька цін збираються в типізований список, наприклад list[float]. max(prices) знаходить найбільше значення, а перший елемент можна порівняти з ним, щоб перевірити сортування «від більшої ціни».
Навіть коротку, але предметно важливу логіку пропонується оформити функцією на кшталт is_first_price_highest(prices). Назва пояснює вимогу краще, ніж вкладене порівняння всередині великого тесту.
prices.sort(reverse=True) змінює наявний список і повертає None. Після сортування повторна перевірка показує, що перша ціна стала максимальною. Якщо початковий порядок ще потрібен, слід використати sorted(prices, reverse=True), який повертає новий список.
Змінна, створена всередині функції, є локальною й недоступна ззовні. Водночас функція може читати значення з ширшої області, хоча явні параметри зазвичай роблять залежності тестового helper зрозумілішими.
У класі значення екземпляра зберігаються як self.name. self вказує, що атрибут належить конкретному створеному об’єкту, а не є випадковою локальною змінною функції.
Методи того самого екземпляра звертаються до цього значення через self.name. Якщо пропустити self, Python шукатиме локальне або глобальне ім’я й отримає NameError або попередження IDE.
Один метод класу може викликати інший через self.get_name() і використати повернене значення. Після створення екземпляра з обов’язковим аргументом викликається публічний метод, а внутрішні деталі залишаються в класі.
Підсумкова модель: локальні змінні живуть у функції; атрибути екземпляра доступні методам через self; модульні значення доступні коду після їх оголошення. Подальша практика — брати конкретну задачу автоматизації, експериментувати з одним типом у короткому файлі, а потім переносити перевірений вираз у тест.
Джерела та додаткові матеріали
Built-in Types ↗Python Software Foundation · перевірено 2026-07-31
Підтверджує й актуалізує поняття уроку: Text Sequence Type — str / Mutable Sequence Types.