Рядки
Рядки (strings) — це один з найважливіших типів даних у Python. Рядок — це послідовність символів, яка використовується для представлення тексту. Практично кожна програма працює з текстовими даними: від простого виведення повідомлень до обробки файлів, парсингу даних та взаємодії з користувачем.
Чому рядки важливі?
- Введення/виведення даних: більшість взаємодії з користувачем відбувається через текст
- Обробка файлів: читання та запис текстових файлів, CSV, JSON тощо
- Веб-розробка: робота з HTML, URL, API запитами
- Обробка даних: парсинг, валідація, форматування інформації
Основні поняття
- Рядок — це незмінний (immutable) тип даних
- Рядки можна створювати за допомогою одинарних
'або подвійних"лапок - Кожен символ у рядку має свій індекс (позицію), починаючи з 0
- Python підтримує Unicode, тому можна працювати з будь-якими мовами
# Створення рядків text1 = 'Привіт' text2 = "Світ" text3 = """Багаторядковий текст""" # Рядки незмінні name = "Анна" # name[0] = "О" # Помилка! Не можна змінити символ # Замість цього створюємо новий рядок name = "О" + name[1:] print(name) # Онна
Базові операції з рядками
Конкатенація (об'єднання)
З'єднує кілька рядків в один.
first_name = "Іван" last_name = "Петренко" full_name = first_name + " " + last_name print(full_name) # Іван Петренко # Повторення рядка print("Ха" * 3) # ХаХаХа # Об'єднання через форматування greeting = f"{first_name} {last_name} вітає вас!" print(greeting) # Іван Петренко вітає вас!
Перевірка наявності підрядка
Перевіряє, чи міститься підрядок у рядку.
text = "Python — це потужна мова програмування" print("Python" in text) print("Java" in text) print("Java" not in text) # True # False # True # Практичний приклад email = "user@example.com" if "@" in email and "." in email: print("Email виглядає коректно") else: print("Некоректний email") # Email виглядає коректно
Індексація рядків та зрізи
Отримання символу за індексом
Отримує перший і останній символ рядка.
text = "Python" print(text[0]) # Перший символ print(text[-1]) # Останній символ print(text[2]) # Третій символ print(text[-2]) # Передостанній символ # P # n # t # o # Практичний приклад: перевірка розширення файлу filename = "document.pdf" if filename[-4:] == ".pdf": print("Це PDF файл") # Це PDF файл
Отримати підрядок (зріз)
Виводить підрядки з початковим і кінцевим індексами.
text = "Python programming" print(text[0:6]) # Символи з 0 по 5 print(text[7:]) # Від 7 до кінця print(text[:6]) # Від початку до 5 print(text[-11:]) # Останні 11 символів # Python # programming # Python # programming # Зріз з кроком alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" print(alphabet[::2]) # Кожен другий символ print(alphabet[::3]) # Кожен третій символ print(alphabet[::-1]) # Реверс рядка # ACEGIKMOQSUWY # ADGJMPSVY # ZYXWVUTSRQPONMLKJIHGFEDCBA # Практичний приклад: отримання дати date = "2024-11-14" year = date[:4] month = date[5:7] day = date[8:10] print(f"Рік: {year}, Місяць: {month}, День: {day}") # Рік: 2024, Місяць: 11, День: 14
Довжина рядка
Виводить кількість символів у рядку.
text = "Привіт, світ!" print(len(text)) # 13 # Практичні приклади password = "Qwerty123!" if len(password) >= 8: print("Пароль достатньо довгий") else: print("Пароль занадто короткий") # Пароль достатньо довгий # Валідація вводу username = input("Введіть ім'я користувача (3-20 символів): ") if 3 <= len(username) <= 20: print("Ім'я прийнято") else: print("Ім'я повинно бути від 3 до 20 символів")
Перетворення рядків
Перетворення в верхній та нижній регістри
Змінює регістр символів у рядку.
text = "Привіт" print(text.upper()) # Всі великі літери print(text.lower()) # Всі малі літери print(text.title()) # Перша літера кожного слова велика print(text.capitalize()) # Тільки перша літера велика print(text.swapcase()) # Інвертувати регістр # ПРИВІТ # привіт # Привіт # Привіт # пРИВІТ # Практичний приклад: порівняння без урахування регістру user_input = "ТАК" if user_input.lower() == "так": print("Користувач погодився") # Користувач погодився # Форматування імен full_name = "іВАН пЕТРЕНКО" print(full_name.title()) # Іван Петренко
Пошук підрядка
Знаходить індекс першого входження підрядка або повертає -1, якщо не знайдено.
text = "Я люблю Python" print(text.find("люблю")) # Знайдено на позиції 2 print(text.find("Java")) # Не знайдено print(text.rfind("о")) # Пошук з кінця # 2 # -1 # -1 # Метод index (викидає помилку, якщо не знайдено) text = "Python programming" print(text.index("pro")) # Знайдено на позиції 7 # 7 # Практичні приклади url = "https://www.example.com/page" if url.find("https://") == 0: print("Безпечне з'єднання") # Безпечне з'єднання # Перевірка початку і кінця рядка filename = "document.pdf" print(filename.startswith("doc")) # Починається з "doc" print(filename.endswith(".pdf")) # Закінчується на ".pdf" print(filename.endswith(".txt")) # Не закінчується на ".txt" # True # True # False # Практичний приклад: валідація URL url = "https://example.com" if url.startswith("http://") or url.startswith("https://"): print("Правильний URL") # Правильний URL
Заміна підрядка
Замінює одне слово на інше в рядку.
text = "Я люблю яблука" new_text = text.replace("яблука", "апельсини") print(new_text) # Я люблю апельсини # Заміна всіх входжень text = "Привіт, привіт, привіт!" new_text = text.replace("привіт", "вітаю") print(new_text) # Привіт, вітаю, вітаю! # Обмеження кількості замін text = "один два один три один" new_text = text.replace("один", "раз", 2) # Замінити тільки перші 2 входження print(new_text) # раз два раз три один # Практичний приклад: очищення тексту phone = "+38 (067) 123-45-67" clean_phone = phone.replace(" ", "").replace("(", "").replace(")", "").replace("-", "") print(clean_phone) # +380671234567 # Цензура тексту message = "Це погане слово та ще одне погане слово" censored = message.replace("погане", "****") print(censored) # Це **** слово та ще одне **** слово
Розділити та з'єднати рядок
Розділяє рядок на частини та з'єднує їх новим роздільником.
sentence = "яблуко,банан,вишня" words = sentence.split(",") print(words) # ['яблуко', 'банан', 'вишня'] joined = "-".join(words) print(joined) # яблуко-банан-вишня # Розділити за пробілами (за замовчуванням) text = "Python це потужна мова" words = text.split() print(words) # ['Python', 'це', 'потужна', 'мова'] # Обмеження кількості розділень data = "2024-11-14-10-30-45" parts = data.split("-", 2) # Розділити тільки перші 2 рази print(parts) # ['2024', '11', '14-10-30-45'] # Розділення за декількома рядками text = "Рядок 1\nРядок 2\nРядок 3" lines = text.splitlines() print(lines) # ['Рядок 1', 'Рядок 2', 'Рядок 3'] # Практичний приклад: парсинг CSV csv_line = "Іван,Петренко,25,Київ" name, surname, age, city = csv_line.split(",") print(f"Ім'я: {name}, Прізвище: {surname}, Вік: {age}, Місто: {city}") # Ім'я: Іван, Прізвище: Петренко, Вік: 25, Місто: Київ # Практичний приклад: створення URL path_parts = ["users", "profile", "settings"] url = "/".join(path_parts) print(f"https://example.com/{url}") # https://example.com/users/profile/settings # Об'єднання списку слів у речення words = ["Привіт", "як", "справи"] sentence = " ".join(words) + "?" print(sentence) # Привіт як справи?
Порахувати кількість символів
Підраховує кількість входжень символу або підрядка.
text = "банан" print(text.count("а")) # Кількість букв 'а' print(text.count("ан")) # Кількість підрядків 'ан' # 2 # 2 # Підрахунок у діапазоні text = "Python programming" print(text.count("m", 7, 15)) # Рахувати 'm' з позиції 7 до 15 # 2 # Практичний приклад: валідація пароля password = "Pass123!" has_digit = any(char.isdigit() for char in password) has_special = any(not char.isalnum() for char in password) print(f"Має цифри: {has_digit}, Має спецсимволи: {has_special}") # Має цифри: True, Має спецсимволи: True # Підрахунок слів text = "Python це потужна мова програмування" word_count = len(text.split()) print(f"Кількість слів: {word_count}") # Кількість слів: 5
Інтерполяція рядків (f-строки)
Форматує рядок з підставленням змінних.
name = "Аліса" age = 30 print(f"Мене звати {name} і мені {age} років.") # Мене звати Аліса і мені 30 років. # Вирази всередині f-рядків a = 10 b = 5 print(f"Сума: {a + b}, Добуток: {a * b}") # Сума: 15, Добуток: 50 # Виклик методів text = "python" print(f"Великі літери: {text.upper()}") # Великі літери: PYTHON # Форматування чисел price = 1234.5678 print(f"Ціна: {price:.2f} грн") # 2 знаки після коми print(f"Ціна: {price:,.2f} грн") # З роздільником тисяч print(f"Відсоток: {0.846:.2%}") # У відсотках # Ціна: 1234.57 грн # Ціна: 1,234.57 грн # Відсоток: 84.60% # Вирівнювання в f-рядках name = "Іван" print(f"|{name:<10}|") # Ліворуч print(f"|{name:>10}|") # Праворуч print(f"|{name:^10}|") # По центру # |Іван | # | Іван| # | Іван | # Старий спосіб форматування (format) print("Мене звати {} і мені {} років.".format(name, age)) print("Мене звати {0} і мені {1} років.".format(name, age)) print("Мене звати {name} і мені {age} років.".format(name=name, age=age)) # Мене звати Аліса і мені 30 років. # Мене звати Аліса і мені 30 років. # Мене звати Аліса і мені 30 років. # Практичний приклад: генерація таблиці products = [ ("Яблука", 25.50, 10), ("Банани", 32.00, 5), ("Апельсини", 45.75, 8) ] print(f"{'Товар':<15} {'Ціна':>8} {'Кількість':>10}") print("-" * 35) for product, price, qty in products: print(f"{product:<15} {price:>8.2f} {qty:>10}") # Товар Ціна Кількість # ----------------------------------- # Яблука 25.50 10 # Банани 32.00 5 # Апельсини 45.75 8
Як вирівняти рядки (центр, ліворуч, праворуч)
Вирівнює рядок по центру, ліворуч чи праворуч із заповненням символами.
text = "Python" print(text.center(10, "-")) print(text.ljust(10, "-")) print(text.rjust(10, "-")) # --Python-- # Python---- # ----Python # Вирівнювання з пробілами (за замовчуванням) print(text.center(10)) print(text.ljust(10)) print(text.rjust(10)) # Python # Python # Python # Практичний приклад: створення заголовка title = "МЕНЮ" print(title.center(40, "=")) # ==================МЕНЮ================== # Доповнення нулями number = "42" print(number.zfill(5)) # Доповнює нулями зліва # 00042 # Практичний приклад: форматування номерів invoice_number = "123" formatted = f"INV-{invoice_number.zfill(6)}" print(formatted) # INV-000123
Обмежити значення після коми
Форматує число з обмеженням кількості знаків після коми.
number = 3.1415926535 print(f"{number:.2f}") # 3.14 # Різна кількість знаків print(f"{number:.4f}") print(f"{number:.0f}") # 3.1416 # 3 # Наукова нотація big_number = 1234567890 print(f"{big_number:.2e}") # 1.23e+09 # Практичний приклад: валюта price = 99.999 print(f"Ціна: {price:.2f} грн") # Ціна: 100.00 грн
Видалення пробілів
Видаляє пробіли та інші символи з країв рядка.
text = " Привіт, світ! " print(text.strip()) # Видалити з обох боків print(text.lstrip()) # Видалити зліва print(text.rstrip()) # Видалити справа # Привіт, світ! # Привіт, світ! # Привіт, світ! # Видалення конкретних символів text = "***Привіт***" print(text.strip("*")) # Привіт # Практичний приклад: очищення вводу користувача user_input = " user@example.com \n" email = user_input.strip() print(f"Email: '{email}'") # Email: 'user@example.com' # Видалення символів нового рядка text = "Рядок\n\n\n" print(text.rstrip("\n")) # Рядок
Перевірка типу рядка
Перевіряє, чи рядок складається з певних типів символів.
# Перевірка на цифри text = "12345" print(text.isdigit()) # True # Перевірка на літери text = "Python" print(text.isalpha()) # True # Перевірка на літери та цифри text = "Python3" print(text.isalnum()) # True # Перевірка на пробіли text = " " print(text.isspace()) # True # Перевірка на верхній/нижній регістр text1 = "HELLO" text2 = "hello" print(text1.isupper()) print(text2.islower()) # True # True # Перевірка на title case (перша літера кожного слова велика) text = "Hello World" print(text.istitle()) # True # Практичний приклад: валідація вводу age_input = input("Введіть ваш вік: ") if age_input.isdigit(): age = int(age_input) print(f"Вам {age} років") else: print("Будь ласка, введіть число")
Спеціальні символи та escape-послідовності
Використання спеціальних символів у рядках.
# Новий рядок print("Рядок 1\nРядок 2") # Рядок 1 # Рядок 2 # Табуляція print("Колонка1\tКолонка2\tКолонка3") # Колонка1 Колонка2 Колонка3 # Зворотний слеш print("C:\\Users\\Documents") # C:\Users\Documents # Лапки всередині рядка print("Він сказав: \"Привіт!\"") print('Він сказав: "Привіт!"') # Він сказав: "Привіт!" # Він сказав: "Привіт!" # Raw-рядки (не обробляють escape-послідовності) path = r"C:\Users\Documents\file.txt" print(path) # C:\Users\Documents\file.txt # Багаторядкові рядки text = """ Це багаторядковий текст, який може містити кілька рядків """ print(text) # # Це багаторядковий # текст, який може # містити кілька рядків #
Практичні приклади
Валідація email
def validate_email(email): email = email.strip().lower() if "@" not in email or "." not in email: return False if email.count("@") != 1: return False local, domain = email.split("@") if len(local) < 1 or len(domain) < 3: return False if not domain.count(".") >= 1: return False return True print(validate_email("user@example.com")) # True print(validate_email("invalid.email")) # False
Генерація slug для URL
def create_slug(title): # Прибрати зайві пробіли, перевести в нижній регістр slug = title.strip().lower() # Замінити пробіли на дефіси slug = slug.replace(" ", "-") # Видалити спеціальні символи (простий варіант) allowed_chars = "abcdefghijklmnopqrstuvwxyz0123456789-" slug = "".join(char for char in slug if char in allowed_chars) # Видалити множинні дефіси while "--" in slug: slug = slug.replace("--", "-") return slug.strip("-") title = "Як навчитися Python за 30 днів!" print(create_slug(title)) # -python-30-
Форматування номера телефону
def format_phone(phone): # Видалити всі нецифрові символи digits = "".join(char for char in phone if char.isdigit()) # Форматувати як +38 (0XX) XXX-XX-XX if len(digits) == 10: return f"+38 ({digits[:3]}) {digits[3:6]}-{digits[6:8]}-{digits[8:]}" elif len(digits) == 12 and digits.startswith("38"): return f"+{digits[:2]} ({digits[2:5]}) {digits[5:8]}-{digits[8:10]}-{digits[10:]}" else: return "Некоректний номер" print(format_phone("0671234567")) print(format_phone("+38 067 123 45 67")) # +38 (067) 123-45-67 # +38 (067) 123-45-67
Перевірка сили пароля
def check_password_strength(password): if len(password) < 8: return "Слабкий: занадто короткий" has_upper = any(c.isupper() for c in password) has_lower = any(c.islower() for c in password) has_digit = any(c.isdigit() for c in password) has_special = any(not c.isalnum() for c in password) strength = sum([has_upper, has_lower, has_digit, has_special]) if strength == 4: return "Сильний" elif strength >= 2: return "Середній" else: return "Слабкий" print(check_password_strength("password")) # Слабкий print(check_password_strength("Pass123")) # Середній print(check_password_strength("Pass123!@#")) # Сильний