Срезы, методы строк, разбор текста, подсчёт символов и слов
Строка как последовательность символов
Строка (тип str в Python) — это упорядоченная последовательность символов: букв, цифр, знаков препинания, пробелов. Как и массив, строка поддерживает индексацию: s[i] — символ с индексом i (нумерация с нуля), а len(s) — длина строки, то есть количество символов в ней. Главное отличие строки от списка в Python — неизменяемость (immutability): нельзя присвоить новое значение отдельному символу строки (s[0] = 'A' вызовет ошибку TypeError), для изменения строки всегда создаётся новая строка.
s = 'Информатика'
print(len(s)) # 11
print(s[0]) # 'И'
print(s[-1]) # 'а' — последний символ (отрицательный индекс)
# s[0] = 'и' # ОШИБКА: TypeError, строки неизменяемы
s = 'и' + s[1:] # так создаётся НОВАЯ строка
print(s)
Срезы строк
Срез (slice) позволяет получить часть строки: запись s[a:b] возвращает подстроку от символа с индексом a до символа с индексом b−1 включительно (символ с индексом b в срез не входит). Если начальный или конечный индекс опущен, срез идёт от начала строки или до её конца соответственно. Дополнительный третий параметр s[a:b:c] задаёт шаг c, с которым берутся символы; шаг −1 разворачивает строку в обратном порядке.
s = 'Информатика'
print(s[0:4]) # 'Инфо'
print(s[4:]) # 'рматика'
print(s[:4]) # 'Инфо'
print(s[-3:]) # 'ика' — последние три символа
print(s[::2]) # 'Нфрааиа' — каждый второй символ
print(s[::-1]) # 'акитамрофнИ' — строка в обратном порядке
Конкатенация и повторение строк
Операция + для строк выполняет конкатенацию — соединение двух строк в одну, а операция * — повторение строки заданное число раз. Обе операции создают новую строку, не изменяя исходные.
first = 'ЕГЭ'
second = 'по информатике'
full = first + ' ' + second
print(full) # 'ЕГЭ по информатике'
line = '-' * 20
print(line) # '———————'
Основные методы строк
У объектов типа str есть множество встроенных методов, значительно упрощающих обработку текста. Ниже перечислены наиболее часто используемые из них.
| Метод | Назначение |
|---|---|
s.upper() / s.lower() | перевод строки в верхний / нижний регистр |
s.strip() | удаление пробелов (и переводов строк) в начале и в конце строки |
s.split(sep) | разбиение строки на список подстрок по разделителю sep (по умолчанию — по пробелам) |
sep.join(list) | сборка списка строк в одну строку через разделитель sep |
s.replace(old, new) | замена всех вхождений подстроки old на new |
s.find(sub) | поиск позиции первого вхождения подстроки sub (−1, если не найдена) |
s.count(sub) | подсчёт числа непересекающихся вхождений подстроки sub |
s.isdigit() / s.isalpha() | проверка: состоит ли строка только из цифр / только из букв |
s = ' Привет, Мир! '
print(s.strip()) # 'Привет, Мир!'
print(s.strip().upper()) # 'ПРИВЕТ, МИР!'
print(s.strip().lower()) # 'привет, мир!'
print(s.replace('Мир', 'Python'))
print(s.count('и')) # число вхождений буквы 'и'
print(s.find('Мир')) # индекс начала подстроки 'Мир'
Перебор символов строки
Строку, как и массив, можно перебирать циклом for — на каждом шаге переменная получает очередной символ строки.
s = 'Python3'
for ch in s:
print(ch, end='-')
print()
# Перебор с индексами
for i, ch in enumerate(s):
print(f's[{i}] = {ch}')
Подсчёт количества символов по условию
Типичная задача — посчитать, сколько в строке гласных букв, цифр, заглавных букв и т.п. Алгоритм такой же, как при подсчёте элементов массива по условию: заводится счётчик, и при переборе символов он увеличивается на 1 при выполнении условия.
s = 'Экзамен ЕГЭ-2027 по Информатике'
vowels = 'аеёиоуыэюяАЕЁИОУЫЭЮЯ'
count_vowels = 0
count_digits = 0
count_upper = 0
for ch in s:
if ch in vowels:
count_vowels += 1
if ch.isdigit():
count_digits += 1
if ch.isupper():
count_upper += 1
print('Гласных:', count_vowels)
print('Цифр:', count_digits)
print('Заглавных букв:', count_upper)
Разбор строки на слова и подсчёт слов
Метод split() без аргументов разбивает строку по любому количеству пробельных символов подряд (пробелы, табуляции, переводы строк) и возвращает список слов, что удобно для подсчёта количества слов в тексте и для их независимой обработки.
text = ' Разбор текста на отдельные слова '
words = text.split()
print(words) # ['Разбор', 'текста', 'на', 'отдельные', 'слова']
print('Слов в тексте:', len(words))
# Обратная сборка списка слов в строку через один пробел
restored = ' '.join(words)
print(restored)
# Длина самого длинного слова
max_len = 0
for w in words:
if len(w) > max_len:
max_len = len(w)
print('Длина самого длинного слова:', max_len)
Проверка строки на принадлежность и оператор in
Оператор in позволяет быстро проверить, содержится ли подстрока внутри строки (или элемент внутри списка), без явного использования методов find() или index(). Эта проверка возвращает логическое значение True или False и часто используется в условных операторах при фильтрации текста.
s = 'Единый государственный экзамен'
print('государ' in s) # True
print('универ' in s) # False
if 'экзамен' in s.lower():
print('Строка упоминает экзамен')
Проверка строки на палиндром
Палиндром — строка, которая читается одинаково слева направо и справа налево. Проверить это можно, сравнив исходную строку с её разворотом (срезом с шагом −1).
def is_palindrome(s):
s = s.lower().replace(' ', '')
return s == s[::-1]
print(is_palindrome('шалаш')) # True
print(is_palindrome('А роза упала на лапу Азора')) # True
print(is_palindrome('информатика')) # False
Форматирование строк: f-строки
Для удобного построения строк с подстановкой значений переменных в Python используют f-строки (formatted string literals) — строковые литералы с префиксом f, внутри которых в фигурных скобках можно указывать выражения, значения которых автоматически подставляются в результирующую строку. F-строки поддерживают и указание формата числа, например количества знаков после запятой.
name = 'Мария'
score = 87.456
total = 100
message = f'{name} набрала {score:.1f} баллов из {total}'
print(message) # 'Мария набрала 87.5 баллов из 100'
percent = score / total * 100
print(f'Это {percent:.0f}% от максимума')
Подсчёт частоты каждого символа
Более сложная задача обработки текста — определить, сколько раз в строке встречается каждый отдельный символ, то есть построить частотную таблицу символов. Такая задача решается с помощью словаря (dict): при переборе строки для каждого символа увеличивается соответствующий счётчик в словаре, причём при первой встрече символа его нужно сначала добавить в словарь со значением 0 (либо воспользоваться методом get() со значением по умолчанию).
s = 'абракадабра'
frequency = {}
for ch in s:
frequency[ch] = frequency.get(ch, 0) + 1
for ch, count in sorted(frequency.items()):
print(f"'{ch}': {count}")
# Самый частый символ
most_common = max(frequency, key=frequency.get)
print('Самый частый символ:', most_common, '—', frequency[most_common], 'раз(а)')
Преобразование строки в число и обратно
Функция int(s) преобразует строку в целое число, float(s) — в вещественное, а str(x) — наоборот, число в строку. При этом важно помнить, что int() и float() вызывают ошибку ValueError, если строка не является корректной записью числа, поэтому при обработке ненадёжного ввода такие преобразования оборачивают в конструкцию try/except.
n = int('42')
x = float('3.14')
print(n + 1, x * 2)
text = 'abc'
try:
value = int(text)
except ValueError:
print('Строка не является числом:', text)
Регистронезависимое сравнение и нормализация текста
При сравнении текста, введённого пользователем, с эталонным значением важно учитывать, что одно и то же слово может быть набрано в разном регистре («Питон», «питон», «ПИТОН»), а также содержать лишние пробелы по краям. Перед сравнением строки принято нормализовать: привести к одному регистру методом lower() и убрать лишние пробелы методом strip(). Без такой нормализации формально различные строки, обозначающие одно и то же, не будут признаны равными оператором ==.
answer = ' Python '
correct_answer = 'python'
if answer == correct_answer:
print('Верно')
else:
print('Неверно') # выведется это, хотя по смыслу ответ верный
# Правильное сравнение с нормализацией
if answer.strip().lower() == correct_answer.strip().lower():
print('Верно (после нормализации)')
Типичные ошибки
Начинающие часто пытаются изменить отдельный символ строки присваиванием (s[0] = 'A'), забывая о неизменяемости строк в Python, — правильный способ состоит в создании новой строки из частей старой. Вторая частая ошибка — путаница в границах среза: s[a:b] не включает символ с индексом b, поэтому для получения k символов, начиная с индекса a, нужно писать s[a:a+k]. Ещё одна ошибка — забыть, что split() без аргументов автоматически убирает лишние пробелы между словами, а split(' ') (с явным пробелом-разделителем) — нет, и на «сдвоенных» пробелах даст пустые строки в результирующем списке. Наконец, при сравнении строк с числами или при попытке применить int() к строке с буквами возникает ValueError, которую нужно либо предотвращать проверкой isdigit(), либо перехватывать через try/except.
Краткий словарь терминов
Строка (str) — неизменяемая последовательность символов в Python.
Срез (slice) — способ получить часть строки или списка по диапазону индексов s[a:b:c].
Конкатенация — операция соединения двух строк в одну с помощью оператора +.
Метод split() — разбивает строку на список подстрок по разделителю (по умолчанию — по пробелам).
Метод join() — собирает список строк в одну строку через заданный разделитель.
Палиндром — строка, читающаяся одинаково в обоих направлениях.
ValueError — ошибка, возникающая при попытке преобразовать некорректную строку в число.
Заключение
Строки — важнейший тип данных для обработки текстовой информации, и владение срезами, встроенными методами и приёмами перебора символов позволяет решать большинство задач анализа текста: подсчёт символов и слов, поиск подстрок, проверку свойств текста. Следующий шаг в изучении программирования — научиться оформлять повторяющиеся вычисления в виде подпрограмм: процедур и функций, что делает код короче, понятнее и пригодным для многократного использования.



