Урок 15 Операции над строками

Конкатенация, умножение, методы строк, форматирование

⏱ ~10 мин чтения· 📘 Базовый

Конкатенация и умножение

Строки можно складывать (конкатенация) и умножать на число:

hello = "Привет" + ", " + "мир!"   # "Привет, мир!"
repeated = "Ha" * 3                # "HaHaHa"
line = "-" * 20                    # "--------------------"

Экранирование символов

Обратный слеш \ позволяет вставлять специальные символы:

text = "Он сказал: \"Привет\""
path = "C:\\Users\\Name"
newline = "Строка1\nСтрока2"
tab = "Колонка1\tКолонка2"

f-строки (f-strings)

Современный способ встраивать переменные и выражения прямо в строку. Ставится буква f перед кавычками, а внутри {} — код Python:

name = "Анна"
age = 17
print(f"Меня зовут {name}, мне {age} лет.")
# Меня зовут Анна, мне 17 лет.

# Внутри фигурных скобок можно писать выражения:
print(f"Через год будет {age + 1}.")
# Через год будет 18.

# Можно указывать ширину поля и выравнивание:
price = 12.5
print(f"Цена: {price:>10.2f} руб.")   # "Цена:      12.50 руб."

Сырые строки (raw strings)

Если перед кавычками поставить r, обратный слеш не экранируется — строка остаётся «как есть». Удобно для путей и регулярных выражений:

path = r"C:\Users\Name\Documents"
print(path)   # C:\Users\Name\Documents

# Без r пришлось бы писать "C:\\Users\\Name\\Documents"

Многострочные строки (triple quotes)

Тройные кавычки """ или ''' позволяют писать текст на нескольких строках:

text = """Это многострочная
строка. Она сохраняет
переносы строк."""

print(text)
# Это многострочная
# строка. Она сохраняет
# переносы строк.

Основные методы строк

Строки в Python имеют множество встроенных методов. Все методы возвращают новую строку — исходная не меняется:

s = "  Hello, World!  "
print(s.upper())                # "  HELLO, WORLD!  "
print(s.lower())                # "  hello, world!  "
print(s.strip())                # "Hello, World!"
print(s.replace("World", "Python"))  # "  Hello, Python!  "
print(s.find("World"))          # 8 (индекс начала подстроки)
print(len(s))                   # 18 (длина строки)

Методы изменения регистра

word = "python programming"

print(word.capitalize())   # "Python programming" (первая буква заглавная)
print(word.title())        # "Python Programming" (каждое слово с заглавной)
print(word.swapcase())     # "PYTHON PROGRAMMING" (меняет регистр на обратный)

# upper() / lower() — перевод в верхний / нижний регистр
print(word.upper())        # "PYTHON PROGRAMMING"
print(word.lower())        # "python programming"

Методы проверки символов

Возвращают True или False:

print("123".isdigit())      # True  — только цифры
print("abc".isalpha())      # True  — только буквы
print("abc123".isalnum())   # True  — только буквы и цифры
print("   ".isspace())      # True  — только пробельные символы
print("Hello".isupper())    # False — не все буквы заглавные
print("HELLO".isupper())    # True
print("hello".islower())    # True
print("Hello World".istitle())  # True — каждое слово с заглавной

Методы поиска и подсчёта

text = "раз два раз два раз"

print(text.count("раз"))        # 3 — сколько раз встречается подстрока
print(text.startswith("раз"))   # True — начинается ли с подстроки
print(text.endswith("два"))     # True — заканчивается ли подстрокой

# find — ищет слева, возвращает индекс или -1
print(text.find("два"))         # 4
print(text.find("три"))         # -1 (не найдено)

# rfind — ищет справа
print(text.rfind("два"))        # 12

# index — как find, но вызывает ошибку, если не найдено
print(text.index("два"))        # 4
# print(text.index("три"))      # ValueError!

Разделение и объединение строк

# split() — разбивает строку на список по разделителю
csv = "яблоко,груша,банан"
fruits = csv.split(",")
print(fruits)                   # ['яблоко', 'груша', 'банан']

# split() без аргумента — разбивает по пробелам
words = "Привет   мир!".split()
print(words)                    # ['Привет', 'мир!']

# join() — объединяет список в строку через разделитель
joined = ", ".join(fruits)
print(joined)                   # "яблоко, груша, банан"

# partition() — делит строку на три части (до, разделитель, после)
phone = "+7-123-456-78-90"
print(phone.partition("-"))     # ('+7', '-', '123-456-78-90')
print(phone.rpartition("-"))    # ('+7-123-456-78', '-', '90')

Удаление пробелов

s = "  \tтекст\n  "

print(s.strip())    # "текст"       — удаляет пробелы с обоих концов
print(s.lstrip())   # "текст\n  "   — только слева
print(s.rstrip())   # "  \tтекст"   — только справа

# Можно указать, какие символы удалять:
url = "www.example.com"
print(url.strip("w"))            # ".example.com"
print(url.strip("."))            # "www.example.com"

Выравнивание и заполнение

text = "Привет"

print(text.center(15))          # "    Привет    "
print(text.ljust(15))           # "Привет         "
print(text.rjust(15))           # "         Привет"
print(text.center(15, "-"))     # "----Привет----"

# zfill — дополняет слева нулями (удобно для чисел)
num = "42"
print(num.zfill(5))             # "00042"

Проверка вхождения (in)

Оператор in проверяет, содержит ли строка подстроку:

text = "Python programming"
print("Python" in text)    # True
print("Java" in text)      # False

if "Python" in text:
    print("Найдено!")

# not in — проверка отсутствия
if "Java" not in text:
    print("Java не найдена")

Неизменяемость строк (immutability)

Строки в Python нельзя изменить после создания. Любой метод строки возвращает новую строку, а исходная остаётся без изменений:

s = "Привет"
# s[0] = "п"          # Ошибка! TypeError
s_upper = s.upper()   # Создаётся новая строка
print(s)              # "Привет" — исходная не изменилась
print(s_upper)        # "ПРИВЕТ"

Сравнение строк

Строки сравниваются лексикографически (по кодам символов):

print("abc" == "abc")   # True
print("abc" != "xyz")   # True
print("abc" < "abd")    # True  — 'c' < 'd'
print("abc" > "ABC")    # True  — строчные буквы имеют больший код

# Сравнение без учёта регистра:
print("Hello".lower() == "HELLO".lower())   # True

Преобразование типов

# Число > строка
n = 42
s = str(n)               # "42"

# Строка > число
s = "123"
n = int(s)               # 123
f = float("3.14")        # 3.14