📖 Теория: строки, коды символов и циклы

⚡ Кратко

Строка в Python — это последовательность символов, по которой можно итерировать циклом for. Каждый символ имеет числовой код: ord() возвращает код, chr() — символ по коду. Методы str.isalpha(), str.isdigit(), str.split() и str.join() упрощают обработку текста.

  • Перебирайте строку напрямую: for char in text:.
  • Для сравнения символов используйте их коды: ord(char).
  • Накапливайте результат через result += char (учебно) или ''.join(...) (современно).
  • range(start, stop + 1) — классический способ включить последнее значение.

Цикл for по строке

Строка — итерируемый объект. Цикл for проходит по каждому символу от начала до конца. Это самый простой способ обработать текст.

📄 examples/string_iteration.py
text = "Python"
for char in text:
    print(char)
# Output:
# P
# y
# t
# h
# o
# n
💡 На заметку: переменная цикла char получает односимвольную строку. Не нужно извлекать символ по индексу вручную.

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

ord(char) возвращает целочисленный код символа в таблице Unicode. chr(code) делает обратное: по коду возвращает символ.

📄 examples/ord_chr_demo.py
print(ord("A"))   # 65
print(chr(65))    # A
print(ord("я"))   # 1103
print(chr(1103))  # я

# Compare characters by code
print(ord("a") < ord("b"))  # True

Где применяется:

  • Проверка, что символ попадает в ASCII-диапазон 0..127.
  • Генерация строки из диапазона кодов Unicode.
  • Сравнение строк по минимальному/максимальному символу.
  • Проверка «одинакового сдвига» между соседними символами.

Функция range()

range() создаёт последовательность целых чисел. В практикуме она нужна для генерации кодов символов, обратного отсчёта и работы по индексам.

📄 examples/range_demo.py
# Direct sequence
for i in range(5):
    print(i, end=" ")
# Output: 0 1 2 3 4

# With start and stop (stop is exclusive)
for i in range(65, 70):
    print(chr(i), end="")
# Output: ABCDE

# Backwards
for i in range(5, 0, -1):
    print(i, end=" ")
# Output: 5 4 3 2 1

Паттерн «аккумулятор»

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

📄 examples/accumulator_string.py
text = input("Введите строку: ")
result = ""

for char in text:
    if char.isalpha():
        result += char

print(result)
⚠️ Важно: строки неизменяемы. Каждая операция += для строк создаёт новый объект. Для коротких строк это незаметно, но на больших объёмах лучше собирать символы в список, а затем объединять через ''.join().

Полезные методы строк

Методы строк возвращают True/False или новую строку; исходную строку не изменяют.

МетодЧто проверяет / делаетПример
str.isalpha() Состоит ли строка из букв. "abc".isalpha()True
str.isdigit() Состоит ли строка из цифр. "123".isdigit()True
str.isascii() Все ли символы ASCII (0..127). "Hi".isascii()True
str.lower() Приводит строку к нижнему регистру. "Hi".lower()"hi"
str.split() Разбивает строку на список слов по пробелам. "a b".split()["a", "b"]
str.join(iterable) Объединяет элементы через разделитель. " ".join("abc")"a b c"

Операторы in и not in

in проверяет вхождение подстроки или символа в строку. Это удобнее ручного перебора, когда нужно узнать, есть ли элемент.

📄 examples/in_operator.py
text = "Python"
print("y" in text)       # True
print("z" not in text)   # True
print("th" in text)      # True

Встроенные функции all() и any()

Эти функции позволяют записать проверку всех или хотя бы одного элемента без явного цикла. Они не входят в исходную практику, но упрощают код.

📄 examples/all_any.py
text = "Python"

# Classic loop
all_ascii = True
for char in text:
    if ord(char) > 127:
        all_ascii = False
        break
print(all_ascii)  # True

# Modern alternative
print(all(ord(c) < 128 for c in text))  # True
Проверить по документации: функции all(), any(), генераторные выражения и метод str.isascii() выходят за рамки исходной практики. Подробнее — в разделе Ресурсы.

Основы Unicode

Unicode — международный стандарт кодирования символов. Каждому символу соответствует уникальный числовой код. Первые 128 кодов совпадают с ASCII и содержат латиницу, цифры и основные знаки препинания. Русские буквы находятся в диапазоне 1040..1103 (большие) и 1072..1103 (маленькие).

📄 examples/unicode_ranges.py
print(ord("А"), ord("Я"))   # 1040 1071
print(ord("а"), ord("я"))   # 1072 1103
print(ord("0"), ord("9"))   # 48 57
print(ord("A"), ord("Z"))   # 65 90
print(ord("a"), ord("z"))   # 97 122

Сравнение символов

Символы можно сравнивать напрямую: Python сравнивает их коды Unicode. Это позволяет проверять, попадает ли символ в диапазон без явного вызова ord().

📄 examples/char_comparison.py
char = "m"
print("a" <= char <= "z")   # True
print("0" <= char <= "9")   # False