Модуль 2 · Урок 6 із 58
Рядки, Unicode, індекси та зрізи
Текст здається простим, поки в ньому не з’являються пробіли, різний регістр, українські символи або порожнє значення. Розберемо рядок як незмінну послідовність і побудуємо текстову обробку з явним контрактом, а не ланцюжок випадкових replace.
Безпечна практика модуля 2
Пакет містить тільки синтетичний rule router, decision table та локальні tests. Жодних реальних звернень, персональних даних, secrets, мережевих викликів або зовнішніх залежностей.
str зберігає текст, bytes — закодовані байти
У Python текст представлений об’єктом str і працює з Unicode. Це дозволяє без окремого «типу кирилиці» зберігати "Київ", "SEO" та інші символи в одному рядку. bytes — інша сутність: послідовність байтів на межі файла, мережі чи протоколу. Не кодуйте й не декодуйте текст посеред бізнес-логіки без конкретної межі.
city = "Київ"
print(type(city)) # <class 'str'>
print(len(city)) # 4
payload = city.encode("utf-8")
restored = payload.decode("utf-8")
print(restored == city) # Truelen() рахує елементи Python-рядка, але видима для людини «літера» інколи складається з кількох Unicode code points. Для більшості навчальних прикладів індексація достатня, та не використовуйте len() як універсальний вимір візуальної ширини.
Рядки незмінні
Символ усередині str не можна замінити присвоєнням за індексом. Методи strip(), replace(), lower() або casefold() повертають новий рядок. Якщо результат не прив’язати до імені, original залишиться без змін.
raw_label = " Python Basics "
clean_label = raw_label.strip()
lookup_key = clean_label.casefold()
print(raw_label) # пробіли залишились
print(clean_label) # Python Basics
print(lookup_key) # python basicsЗберігайте display value і lookup key окремо. Автоматичне перетворення всього тексту в lowercase може зіпсувати ім’я, абревіатуру або юридичне написання.
Індекс і half-open slice
Перший елемент має індекс 0, останній доступний як -1. Зріз text[start:stop] включає start, але не включає stop. Така half-open модель спрощує довжину: stop - start.
code = "PYTHON"
print(code[0]) # P
print(code[-1]) # N
print(code[0:2]) # PY
print(code[2:]) # THON
print(code[:]) # PYTHONcode[20:30] поверне порожній рядок, а code[20] викличе IndexError. Тести мають покривати коротші за очікування рядки.
Нормалізація має бути мінімальною й поясненою
Перед порівнянням часто достатньо прибрати крайові пробіли й застосувати casefold(). Не видаляйте всі пробіли, дефіси або символи «про всяк випадок»: ви можете злити різні значення. Політика нормалізації залежить від задачі.
raw_status = " READY "
status_key = raw_status.strip().casefold()
if status_key == "ready":
print("Можна запускати перевірку")Для user-facing output залишайте original або окремо очищений display text. Для key використовуйте стабільне правило й тести з українським та латинським текстом, порожнім значенням і повторними пробілами.
split, join та membership
split() розбиває рядок на частини, join() збирає послідовність рядків із визначеним separator, а оператор in перевіряє входження. Не будувати CSV вручну через split(',') — формат має quoting і окремий модуль стандартної бібліотеки, який з’явиться в курсі роботи з файлами.
raw_tags = "python, cli, testing"
tags = [part.strip() for part in raw_tags.split(",")]
summary = " · ".join(tags)
print("python" in tags) # True
print(summary) # python · cli · testingList comprehension тут показана як короткий preview. Повну роботу зі списками, словниками, множинами й comprehensions розберемо в модулі 4.
Форматування — це інтерфейс
f-рядок робить підстановки видимими поруч із текстом. Форматування числа керує представленням, але не змінює саме значення. Для діагностики корисний specifier !r, бо він показує лапки й приховані крайові пробіли.
topic = " Python "
minutes = 45
print(f"raw={topic!r}")
print(f"Тема: {topic.strip()}; тривалість: {minutes} хв.")Практика: нормалізатор мітки
- Прийміть raw label і збережіть original.
- Побудуйте display label через
strip(). - Побудуйте lookup key через
casefold(). - Відхиліть порожній display label умовою з наступного уроку.
- Перевірте український текст, латиницю, крайові пробіли, один символ і порожній input.
У evidence запишіть raw через !r, expected display, expected key та observed. Не підставляйте реальні ПІБ, email чи клієнтські назви.
Методичні джерела
Урок, сценарії, пояснення й вправи створені SEOWORK. Посилання ведуть лише на офіційну документацію Python.
Закріпіть матеріал уроку
Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.