Цикл for по строке
Строка — итерируемый объект. Цикл for проходит по каждому символу от начала до конца. Это самый простой способ обработать текст.
text = "Python"
for char in text:
print(char)
# Output:
# P
# y
# t
# h
# o
# n
char получает односимвольную строку. Не нужно извлекать символ по индексу вручную.
Функции ord() и chr()
ord(char) возвращает целочисленный код символа в таблице Unicode. chr(code) делает обратное: по коду возвращает символ.
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() создаёт последовательность целых чисел. В практикуме она нужна для генерации кодов символов, обратного отсчёта и работы по индексам.
# 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
Паттерн «аккумулятор»
Аккумулятор — это переменная, в которой постепенно накапливается результат. В учебных задачах часто используется пустая строка, к которой добавляются символы.
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 проверяет вхождение подстроки или символа в строку. Это удобнее ручного перебора, когда нужно узнать, есть ли элемент.
text = "Python"
print("y" in text) # True
print("z" not in text) # True
print("th" in text) # True
Встроенные функции all() и any()
Эти функции позволяют записать проверку всех или хотя бы одного элемента без явного цикла. Они не входят в исходную практику, но упрощают код.
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 (маленькие).
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().
char = "m"
print("a" <= char <= "z") # True
print("0" <= char <= "9") # False