📖 Теория: Знакомство со строками

⚡ Кратко

Строка — это последовательность символов в кавычках. Она неизменяема: любая операция создаёт новую строку. Для доступа к символам используют индексы, для подстрок — срезы. Строки можно сравнивать, проверять вхождение и перебирать в цикле.

  • text[0] — первый символ, text[-1] — последний.
  • text[a:b] — подстрока от a включительно до b не включительно.
  • text[::-1] — строка в обратном порядке.
  • ord() и chr() работают с кодами Unicode.

Что такое строка

Строка (str) — это неизменяемая последовательность символов. В Python строки создаются с помощью одинарных, двойных или тройных кавычек:

📄 examples/string_literals.py
single = 'Hello'
double = "Hello"
multi = """First line
Second line"""
empty = ""

print(type(single))  # <class 'str'>

Так как строка — это последовательность, к ней применимы общие операции: получение длины, индексация, срезы, перебор в цикле и проверка вхождения.

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

В Python строки являются неизменяемыми (immutable). После создания строки её содержимое нельзя изменить напрямую. Любая операция, которая кажется изменением, на самом деле создаёт новую строку.

📄 examples/immutability.py
s = "Hello"
print(s + " world!")  # Hello world!
print(s)              # Hello — исходная строка не изменилась

s = s + " world!"
print(s)              # Hello world! — переменная ссылается на новый объект
⚠️ Важно: попытка изменить символ по индексу приведёт к ошибке: s[0] = 'h' вызовет TypeError.

Кодировки: ASCII, Unicode, UTF-8

Кодировка — это способ преобразования символов в числа, которые компьютер может хранить и обрабатывать.

ASCII

ASCII — одна из первых кодировок. Она использует 7 бит и кодирует 128 символов (коды от 0 до 127): управляющие символы, цифры, буквы английского алфавита и основную пунктуацию.

Unicode

Unicode — глобальный стандарт, который присваивает каждому символу уникальный числовой код (кодовую точку). В Unicode более 143 000 символов: алфавиты разных языков, математические знаки, эмодзи и технические символы.

UTF-8

UTF-8 — популярная кодировка для представления Unicode. Каждый символ занимает от 1 до 4 байт:

  • 1 байт — символы ASCII (0–127).
  • 2 байта — символы с кодами 128–2047 (кириллица, греческий).
  • 3 байта — символы с кодами 2048–65535 (иероглифы).
  • 4 байта — редкие символы и эмодзи.

Методы строк

Метод — это функция, привязанная к объекту. Строки поддерживают множество методов для работы с текстом. Важно помнить: строковые методы возвращают новую строку, не изменяя исходную.

📄 examples/string_methods.py
text = "  Hello, Python!  "
print(text.upper())      # "  HELLO, PYTHON!  "
print(text.lower())      # "  hello, python!  "
print(text.strip())      # "Hello, Python!"
print(text.replace("Python", "World"))  # "  Hello, World!  "
print(text.find("Py"))   # 9
print(text.count("l"))   # 2

print(text)  # исходная строка не изменилась

Методы encode и decode

Метод encode() преобразует строку в байты по заданной кодировке. Метод decode() делает обратное — переводит байты в строку.

📄 examples/encode_decode.py
text = "Привет"
encoded = text.encode("utf-8")
print(encoded)            # b'\xd0\x9f\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82'

decoded = encoded.decode("utf-8")
print(decoded)            # Привет

Функции ord() и chr()

ord() возвращает код Unicode символа, а chr() — символ по его коду.

📄 examples/ord_chr.py
print(ord("A"))   # 65
print(ord("a"))   # 97
print(ord(" "))   # 32

print(chr(65))    # A
print(chr(97))    # a
print(chr(32))    #  (пробел)

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

Строки сравниваются лексикографически, символ за символом, на основе кодов Unicode. Регистр важен: заглавные буквы имеют меньшие коды, чем строчные.

📄 examples/string_compare.py
print("apple" == "apple")   # True
print("apple" != "ap ple")  # True
print("apple" < "banana")   # True, 'a' < 'b'
print("Apple" < "banana")   # True, 'A' < 'b'
print("apple" > "Apple")    # True, 'a' > 'A'
print("cat" > "catalog")    # False — "cat" короче и является префиксом

Функция len()

len() возвращает количество символов в строке.

📄 examples/len_demo.py
text = "Python"
print(len(text))  # 6

empty = ""
print(len(empty))  # 0

Индексация строк

В Python индексация начинается с 0. Отрицательные индексы позволяют обращаться к символам с конца: -1 — последний символ, -2 — предпоследний и т.д.

📄 examples/indexing.py
text = "Python"
print(text[0])   # P
print(text[2])   # t
print(text[-1])  # n
print(text[-3])  # h

# Проверка границ
index = 5
if index < len(text):
    print(text[index])
else:
    print("Индекс вне диапазона!")
❌ Ошибка: обращение по несуществующему индексу вызывает IndexError: text[10] для строки длины 6.

Срезы строк

Срез позволяет получить подстроку. Синтаксис: text[start:end:step]. Начальный индекс включается, конечный — нет.

📄 examples/slicing.py
text = "Python programming"
print(text[0:6])     # Python
print(text[:6])      # Python — с начала строки
print(text[7:])      # programming — до конца строки
print(text[:])       # копия всей строки
print(text[-11:])    # programming
print(text[0:12:2])  # Pto rg
print(text[::-1])    # gnimmargorp nohtyP

При неправильном порядке индексов срез возвращает пустую строку, а не ошибку:

print(text[14:7])   # пустая строка
print(text[-4:-11]) # пустая строка

Оператор принадлежности in

Оператор in проверяет, содержится ли подстрока в строке. Комбинация not in проверяет отсутствие.

📄 examples/membership.py
text = "Python programming"
print("Python" in text)    # True
print("Hello" in text)     # False
print("Java" not in text)  # True

Перебор строки

Строка — итерируемый объект, поэтому по ней можно пройти циклом for:

📄 examples/iterate_string.py
text = "Hello"
for char in text:
    print(char)

# Подсчёт гласных
vowels = "aeiou"
count = 0
for char in text.lower():
    if char in vowels:
        count += 1
print(f"Vowels: {count}")

Escape-последовательности и raw-строки

Символ обратного слэша \ используется для специальных символов: \n — новая строка, \t — табуляция, \\ — сам обратный слэш.

📄 examples/escape.py
text = "Line 1\nLine 2\tTabbed"
print(text)

path = r"C:\Users\Admin\file.txt"
print(path)  # C:\Users\Admin\file.txt

f-строки

f-строки — современный способ вставки значений в строку. Перед открывающей кавычкой ставится буква f, а выражения заключаются в фигурные скобки.

📄 examples/fstrings.py
name = "Alice"
age = 30
print(f"Hello, {name}! Next year you will be {age + 1}.")
Проверить по документации: подробнее о строковых методах, кодировках и f-строках читайте в официальной документации Python — разделы Text Sequence Type — str и Formatted string literals.