Строка в Python — это неизменяемая последовательность символов типа str: каждый символ имеет индекс, один символ получают через квадратные скобки, а часть строки — срезом [start:stop:step]. Например, "PYTHON"[1:5] возвращает "YTHO", потому что граница stop в результат не входит.
Будем вести одну строку course = "STEMskills" от создания до готовой подписи. Так легче увидеть механизм: строка похожа на подписанную полку, где у каждого символа есть адрес. Граница аналогии важна: адрес помогает читать символ, но заменить символ на полке нельзя — строковые объекты в Python неизменяемы.
Как создать строку и увидеть её символы
Текст заключают в одинарные или двойные кавычки. Внутри одной программы обе формы равноправны: name = 'Ada' и name = "Ada" создают строки. Функция len(course) возвращает количество символов; у "STEMskills" их 10.
course = "STEMskills"Положительная нумерация начинается с нуля: course[0] даёт "S", а course[4] — "s". Отрицательные индексы идут справа: course[-1] даёт последний символ "s", course[-2] — предпоследний "l". Если обратиться к несуществующему одиночному индексу, например course[20], Python возбуждает IndexError.
Теперь отдельные адреса понятны; следующий вопрос — как взять сразу диапазон символов и не собирать его вручную.
Срезы: start входит, stop не входит
Срез записывают как text[start:stop]. Он берёт символ с позиции start и продолжает до позиции перед stop. Поэтому длина обычного среза без шага равна stop - start. Открытая правая граница удобна в программировании: соседние части text[:4] и text[4:] стыкуются без пропуска и повторения символа.
| Выражение | Результат | Почему |
|---|---|---|
course[:4] | "STEM" | От начала до индекса 4, не включая его |
course[4:] | "skills" | С индекса 4 до конца |
course[-6:] | "skills" | Шесть последних символов |
course[::2] | "SEsil" | Каждый второй символ от начала |
course[::-1] | "slliksMETS" | Шаг −1 разворачивает порядок |
Разобранный пример 1: выделяем название направления
Задача: из строки course = "STEMskills" получить "STEM". Первый символ имеет индекс 0, а буква M — индекс 3. Правая граница должна стоять после неё, поэтому пишем course[0:4] или короче course[:4]. Ответ: "STEM". Проверка: в результате четыре символа, а 4 - 0 = 4.
Разобранный пример 2: берём окончание неизвестной длины
Задача: получить слово "skills", не вычисляя длину всей строки. У нужной буквы s отрицательный индекс −6, а пропущенная правая граница означает «до конца». Пишем course[-6:]. Ответ: "skills". Независимая проверка справа налево даёт шесть символов: s, k, i, l, l, s.
Срез за пределами строки обычно не падает: course[:100] просто вернёт всю строку. Это отличается от одиночного индекса и полезно при безопасном ограничении подписи, например caption[:30].
Почему символ нельзя заменить на месте
Строка неизменяема: команда course[0] = "X" завершится ошибкой TypeError. Метод строки тоже не переписывает исходный объект, а возвращает новую строку. Например, после lower = course.lower() переменная lower хранит "stemskills", но course по-прежнему равна "STEMskills".
Чтобы «заменить» начало, собирают новое значение: course = "Data" + course[4:]. Срез сохраняет "skills", конкатенация добавляет "Data", и только присваивание связывает имя course с результатом "Dataskills". Модель полки здесь заканчивается: Python не двигает буквы в прежнем объекте, а создаёт новый объект и меняет ссылку переменной.
Методы строк для реальной обработки текста
В реальной жизни программы получают текст из форм, файлов и сообщений. Перед сравнением полезно убрать края методом strip() и привести регистр через lower(): answer.strip().lower(). Для разбиения строки подходит split(), а для склейки частей — separator.join(parts). Методы find() и оператор in помогают искать фрагмент; replace(old, new) создаёт копию с заменами.
raw = " Python, Строки "clean = raw.strip()→"Python, Строки"parts = clean.split(",")→["Python", " Строки"]tags = [part.strip().lower() for part in parts]→["python", "строки"]
Каждый шаг возвращает новое значение; исходная строка raw остаётся прежней.
Почему индексы начинаются с нуля? Для последовательностей индекс удобно понимать как смещение от начала: у первого элемента смещение 0, у второго — 1. Это не историческая подробность ради памяти, а механизм, который объясняет и нулевой индекс, и формулу длины среза.
Проверьте прогноз до запуска
Если тренажёр не загрузился, разберите первый случай вручную: у PYTHON[1:5] индексы 1, 2, 3, 4 соответствуют буквам Y, T, H, O, поэтому результат — YTHO. Правая граница 5 указывает, где остановиться, а не какой символ добавить.
Практика с ответами
Задача 1. Последний символ
Задача 1. Что вернёт "robot"[-1]? Ответ: "t". Индекс −1 выбирает последний символ непустой строки.
Задача 2. Две соседние части
Задача 2. Разделите "algorithm" после первых четырёх символов. Ответ: "algorithm"[:4] даёт "algo", а "algorithm"[4:] даёт "rithm". Обе части вместе снова образуют исходную строку.
Задача 3. Каждый второй символ
Задача 3. Найдите результат "АЛГОРИТМ"[::2]. Ответ: "АГРТ". Шаг 2 оставляет символы с индексами 0, 2, 4 и 6: А, Г, Р, Т.
Ошибки, которые полезно ловить заранее
- Считать первый индекс единицей. Перед срезом подпишите над символами 0, 1, 2.
- Включать позицию stop. Проговорите: «дойти до stop, но не брать его».
- Путать индекс и срез за границей.
text[100]вызывает ошибку, аtext[:100]ограничивается концом строки. - Ждать изменения после метода. Сохраните результат:
text = text.strip(). - Разворачивать текст без объяснения. В
[::-1]пустые границы охватывают строку, а шаг −1 задаёт движение справа налево.
Следующий шаг
Возьмите собственную короткую строку, подпишите положительные и отрицательные индексы, затем без запуска предскажите три результата: первый символ, последние три символа и строку с шагом 2. После проверки переходите к курсу «Алгоритмы на Python»: там работа с последовательностями становится частью алгоритмического мышления.