"Информатика (базовый и углублённый уровни) (в 2 частях)", Поляков К.Ю., Еремин Е.А.
Символьная строка — упорядоченный набор символов, с которым программа может работать как с единым значением. Строки нужны, чтобы хранить и обрабатывать слова, сообщения и другие тексты. В Python к отдельным символам обращаются по индексам, получают части строк с помощью срезов и применяют операции соединения, повторения и поиска. Главное правило: индексация начинается с нуля, а сама строка после создания неизменяема.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Символьная строка — последовательность символов, записанная в программе в кавычках, например 'кот' или "добрый день". Кавычки показывают Python, где начинается и заканчивается текст. Строка отличается от отдельного символа тем, что может содержать любое число символов, в том числе ноль. В Python тип строки обозначается str.
Символ — один элемент строки: буква, цифра, знак препинания или пробел. Например, в строке 'дом 7' есть буквы, пробел и цифра. Пробел тоже занимает место и считается символом. Это нужно учитывать при поиске позиций и вычислении длины.
Индекс символа — его позиция в строке, записанная числом в квадратных скобках после имени строки. В Python нумерация начинается с нуля: у строки 'кот' индексы букв равны 0, 1 и 2. Можно обращаться и с конца: индекс −1 означает последний символ, −2 — предпоследний. Индексы позволяют получить нужный символ без перебора всего текста.
Срез — часть строки, которую получают по диапазону индексов. Запись s[a:b] выбирает символы начиная с a и до b, не включая b; в полной форме s[a:b:step] можно указать шаг. Например, 'котёнок'[0:3] даёт 'кот'. Срез удобен, когда нужно извлечь слово или выбрать символы через равные промежутки.
Строка хранит символы в определённом порядке, поэтому два одинаковых набора букв в разном порядке — это разные строки. Каждый символ занимает позицию, а число таких позиций составляет длину строки. Функция len(s) возвращает это число, включая пробелы и знаки препинания. Например, в строке 'дом 7' длина равна пяти, потому что пробел тоже входит в последовательность.
Обращение s[i] позволяет взять символ, не просматривая строку вручную. Нумерация с нуля связана с тем, что индекс обозначает смещение от начала: до первого символа нужно пройти ноль позиций. Поэтому последний индекс равен длине минус один, а попытка обратиться к позиции за ним вызывает ошибку. Отрицательные индексы дают удобный способ отсчитывать с конца: −1 — последний символ, −2 — предыдущий.
Срез нужен, когда требуется не один символ, а часть строки. В записи s[a:b] позиция a входит в результат, а b служит границей остановки и не включается. Например, s[2:5] выбирает символы с индексами 2, 3 и 4. Если указать шаг, как в s[a:b:step], Python будет переходить от выбранной позиции к следующей через указанное число индексов; запись s[::2] берёт каждый второй символ.
Оператор + соединяет строки в новом порядке, а оператор * повторяет содержимое заданное число раз. Например, 'инфо' + 'рма' даёт 'информа', а 'ха' * 3 — 'хахаха'. Проверка part in s отвечает, встречается ли подстрока part внутри s: результатом будет True или False. Например, 'кот' in 'котёнок' даёт True, потому что первые три символа образуют искомую часть.
Строки в Python неизменяемы: после создания нельзя заменить символ непосредственно по индексу. Это помогает программе надёжно обращаться к данным, не опасаясь, что одна операция незаметно изменит исходный текст. Если нужно получить другой текст, следует создать новую строку с помощью срезов, соединения или других операций. Например, вместо изменения s[0] формируют новую строку из нового первого символа и оставшейся части.
| Действие | Запись | Что получается | Пример |
|---|---|---|---|
| Длина строки | len(s) | Число символов | len("кот") → 3 |
| Доступ к символу | s[i] | Символ с индексом i | "кот"[0] → "к" |
| Доступ с конца | s[-i] | Символ, отсчитанный с конца | "кот"[-1] → "т" |
| Получение среза | s[a:b:step] | Символы от a до b−1 с заданным шагом | "информатика"[0:4] → "инфо" |
| Сложение строк | s1 + s2 | Новая строка из двух строк | "инфо" + "рма" → "информа" |
| Повторение строки | s * n | Новая строка из n повторений | "ха" * 3 → "хахаха" |
| Проверка вхождения | part in s | Логический результат проверки | "кот" in "котёнок" → True |
Сначала определите, какой результат нужен: длина, один символ, часть строки или новая строка. Затем выберите соответствующую запись и проверьте границы индексов, если работаете со срезом. Помните, что операция соединения или повторения создаёт новое значение, а не меняет исходные строки.
Дана строка s = "информатика". Нужно найти её длину и символы с индексами 0 и −1. Сначала выясним, сколько символов хранится в строке, а затем отдельно посмотрим на начало и конец. Так мы не будем путать прямую нумерацию с отсчётом от конца.
Ответ: длина строки равна 11, s[0] = «и», s[-1] = «а». Проверка проста: индексы прямого отсчёта идут от 0 до 10, а последний символ также доступен как −1. Оба способа указывают на одну и ту же конечную позицию.
Дана строка s, нужно получить её первые пять символов и строку из символов с чётными индексами. Граница среза не включается, поэтому для первых пяти позиций конечным индексом будет 5. Чётные индексы — это 0, 2, 4 и далее, значит, здесь удобно задать шаг 2.
Ответ: первые пять символов — s[:5], символы с чётными индексами — s[::2]. Если строка короче пяти символов, первый срез вернёт её целиком, а ошибки не возникнет. Это удобно, когда заранее неизвестна длина текста.
Дана строка s, нужно подсчитать буквы «а», не изменяя исходную строку. Для этого перебирают символы по очереди и сравнивают каждый с искомой буквой. Отдельная переменная-счётчик хранит число совпадений, найденных к текущему моменту.
Ответ: алгоритм можно записать так: count = 0; for ch in s: if ch == 'а': count += 1. Перебор только читает символы, поэтому строка s остаётся прежней. Сравнение учитывает именно строчную «а»; чтобы считать также заглавную «А», текст перед проверкой нужно привести к одному регистру.
Первый символ ищут по индексу 1. Такую ошибку допускают, перенося привычную нумерацию предметов в список индексов Python. В результате s[1] возвращает второй символ, а не первый. Для проверки выпишите позиции короткой строки: первый символ имеет индекс 0.
Считают, что конечная граница среза включается. Например, s[0:3] содержит позиции 0, 1 и 2, а символ с индексом 3 в результат не попадёт. Путаница возникает потому, что диапазон часто понимают как две включённые границы. Проверьте число символов: длина такого среза обычно равна 3 − 0, а не четырём.
Обращаются к несуществующему индексу. Для строки длины n положительные индексы лежат от 0 до n − 1; индекс n уже выходит за пределы. Ошибка часто появляется после подсчёта длины без учёта нулевого начала нумерации. Перед обращением убедитесь, что индекс меньше длины, а отрицательный индекс не меньше −n.
Пытаются присвоить значение символу по индексу. Запись вроде s[0] = 'А' не сработает, потому что строки неизменяемы. Это может показаться неожиданным, если сравнивать строку со списком, элементы которого можно заменять. Создайте новую строку и проверьте её отдельно, оставив исходное значение без изменений.
Для работы со строками нужны переменные, типы данных и базовые операции Python: строку следует сохранить в переменной, а результат выражений — правильно интерпретировать. Понимание условий и циклов помогает искать символы и считать их количество. Строковые операции применяют при чтении и обработке текстовых файлов, поиске и преобразовании текста. Они также встречаются в алгоритмических задачах, где нужно проверять или перестраивать последовательности символов.
Почему индекс первого символа равен нулю?
В Python индекс показывает смещение от начала строки. У первого символа смещение равно нулю, у следующего — единице. Поэтому строка из трёх символов имеет индексы 0, 1 и 2.
Как получить последний символ строки?
Используйте отрицательный индекс −1: например, s[-1]. Отрицательные индексы отсчитываются от конца, поэтому −1 обозначает последний символ, а −2 — предпоследний.
Почему конечный символ не входит в срез?
В срезе s[a:b] начальная граница включается, а конечная — нет. Так удобно задавать длину части строки как разность b − a и соединять соседние срезы без пересечений.
Можно ли изменить один символ строки по индексу?
Нет, строка в Python неизменяема, поэтому присваивание вида s[0] = 'А' вызовет ошибку. Чтобы получить изменённый текст, создайте новую строку, например соедините нужный символ с оставшимися частями.
Чем срез отличается от обращения к одному символу?
Обращение s[i] возвращает один символ с индексом i. Срез s[a:b] возвращает новую строку из нескольких символов между заданными границами; шаг позволяет выбирать символы через определённые промежутки.
§ 66. Символьные строки