"Информатика", Поляков К.Ю., Еремин Е.А.
Символьная строка — последовательность символов, с которой программа может работать как с единым значением. В строках хранят имена, сообщения, пароли и другие данные: буквы, цифры, пробелы и знаки препинания. Строки записывают в кавычках, а для обработки используют длину, индексы, срезы и операции соединения. Главное — помнить, что символы нумеруются с нуля, а правая граница среза не попадает в результат.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Символьная строка — упорядоченная последовательность символов. Она может состоять из букв, цифр, пробелов и знаков препинания: например, «Привет, 9 класс!» — одна строка. Порядок важен, потому что перестановка символов меняет значение текста; строками удобно хранить и обрабатывать слова, сообщения и другие текстовые данные.
Строковый литерал — значение строки, которое записано в программе непосредственно и заключено в кавычки. Например, 'кот' — литерал, а имя переменной кот без кавычек программа будет воспринимать как название переменной. Кавычки помогают отличить сам текст от обозначения, под которым он хранится.
Индекс символа — целое число, указывающее позицию символа в строке. В Python нумерация начинается с нуля, поэтому у строки 'кот' индекс 0 указывает на 'к', а индекс 1 — на 'о'. Индекс позволяет обратиться к одному символу, не перебирая всю строку вручную.
Срез строки — часть строки, выбранная по диапазону позиций. В записи s[a:b] начальная граница a указывает, откуда брать символы, а правая граница b — где остановиться; сам символ с индексом b не включается. Срезы нужны, чтобы получать слова или другие фрагменты текста без изменения исходной строки.
Строка в программе задаётся литералом в кавычках, а переменная может хранить это значение после присваивания: s = 'кот'. Кавычки необходимы, потому что без них слово s воспринимается как имя переменной, а не как текст. Затем в выражениях можно обращаться к сохранённой строке по имени переменной, что избавляет от повторного ввода длинного текста.
Длину строки в Python получают функцией len(s). Она считает каждый символ, поэтому пробел между словами и знак препинания тоже увеличивают результат на единицу. Это полезно, например, чтобы проверить размер введённого текста или определить допустимые позиции для обращения к символам.
Индексация выбирает один символ, а срез — несколько соседних символов. При записи s[a:b] Python включает позицию a, но останавливается перед позицией b; поэтому количество символов во фрагменте обычно равно b − a. Правая граница не включается, чтобы длина среза сразу вычислялась как разность границ, а соседние фрагменты было легко задавать без пересечений.
Сцепление с помощью + ставит строки друг за другом, а умножение на целое число повторяет их содержимое. Например, 'добро' + 'е' даёт 'доброе', а 'ха' * 3 — 'хахаха'. Эти операции создают новое строковое значение: оно составляется из исходных частей, но исходные строки остаются прежними.
Оператор in проверяет, встречается ли заданная подстрока: выражение 'о' in 'кот' даёт True, то есть истину. Для поиска позиции фрагмента у строки есть метод find, а для получения текста с заменой — метод replace; например, 'кот'.replace('о', 'а') вернёт 'кат'. Поскольку строки неизменяемы, результат замены нужно сохранить, если он понадобится дальше: t = s.replace('о', 'а').
| Операция | Что делает | Пример результата |
|---|---|---|
| Определение строки | Задаёт последовательность символов | 'кот' |
| Длина строки | Возвращает число символов | len('кот') → 3 |
| Индексация | Возвращает символ с указанной позиции | 'кот'[0] → 'к' |
| Срез | Возвращает часть строки | 'кошка'[1:4] → 'ошк' |
| Сцепление | Объединяет строки подряд | 'добро' + 'е' → 'доброе' |
| Повторение | Повторяет строку заданное число раз | 'ха' * 3 → 'хахаха' |
| Проверка вхождения | Проверяет, встречается ли подстрока | 'о' in 'кот' → True |
Сначала определите, что требуется получить: длину, один символ, фрагмент или новую строку. Затем выберите соответствующую операцию и проверьте границы индексов, если работаете с позицией или срезом. Стрелка показывает результат выражения, а True означает, что проверяемый фрагмент найден.
Задача 1. Дана строка «информатика». Найдите её длину и символ с индексом 2. Сначала считаем все символы, не забывая, что отсчёт позиции начинается с нуля. Затем определяем третий по счёту символ, так как его индекс на единицу меньше привычного порядкового номера.
Ответ: длина строки равна 11, символ с индексом 2 — 'ф'. Проверить результат можно, выписав индексы над буквами, начиная с нуля. Такой способ особенно полезен, если нужная позиция находится не в начале слова.
Задача 2. Из строки «программирование» получите подстроку «грамм», используя срез. Чтобы не ошибиться в границах, сначала найдём индексы букв искомого фрагмента. В Python правая граница среза не включается, поэтому после последней нужной буквы указывают следующий индекс.
Ответ: s[3:8] даёт 'грамм'. В срезе пять символов, что совпадает с разностью границ 8 − 3. Если бы справа указали 7, последняя буква «м» не попала бы в результат.
Задача 3. Дана строка с именем и фамилией через пробел. Составьте строку вида «Фамилия, Имя» и проверьте, есть ли в исходной строке пробел. Разделитель помогает отделить части имени, а сцепление позволяет собрать их в нужном порядке. Для примера возьмём s = 'Анна Смирнова'.
Ответ: результат — 'Смирнова, Анна', наличие пробела подтверждается значением True. В этой задаче split делит текст на части, а сцепление соединяет фамилию, запятую и имя. Если формат исходных данных может отличаться, перед обращением к parts[1] следует проверить, что разделение действительно дало две части.
Ошибка: считать, что первый символ имеет индекс 1. Её допускают, потому что в обычной жизни нумерацию часто начинают с единицы, но в Python первый индекс равен 0; обращение по индексу 1 вернёт второй символ. Проверка: выпишите индексы строки от нуля или сравните результат s[0] с первым символом.
Ошибка: включать правую границу среза в результат. Тогда ученик может выбрать границу на один больше нужной или, наоборот, получить фрагмент без последнего символа. Помните, что s[a:b] включает a и не включает b; проверьте длину результата, вычислив b − a.
Ошибка: путать строку с числом, записанным в кавычках. Например, '25' — текст, а не число 25, поэтому строку нельзя напрямую использовать в арифметическом сложении с числом. Путаница возникает из-за одинаковых на вид цифр; проверить себя можно по кавычкам и типу значения, а для вычислений преобразовать текст в число.
Ошибка: считать, что сцепление или замена меняют исходную строку. В Python такие операции возвращают новое значение, поэтому без присваивания результат не сохраняется; это путают с изменением обычной переменной. Проверьте, куда записан результат: например, после t = s.replace('а', 'о') новое значение находится в t, а s остаётся прежней.
Для работы со строками нужны знакомые понятия: переменная, присваивание, тип данных и выражение. Они позволяют хранить текст, выполнять над ним операции и использовать полученный результат в программе. Строки применяются при вводе и выводе данных, обработке текста, проверке паролей и поиске информации.
Индексы и срезы связывают строки с массивами и другими последовательностями: в них тоже выбирают элементы по позиции. Освоив нумерацию и правила границ на строках, легче разбираться с обработкой последовательностей при программировании. При этом набор доступных операций зависит от конкретного типа данных.
Может ли строка содержать цифры и пробелы?
Да. Строка может содержать буквы, цифры, пробелы, знаки препинания и другие символы. Например, «ул. Лесная, 12» — строка, хотя в ней есть цифры.
Почему индекс первого символа равен нулю?
Индекс показывает смещение символа от начала строки. У первого символа смещение равно нулю, у следующего — единице. Поэтому индекс — это не порядковый номер в привычном счёте.
Как получить последний символ строки?
В Python последний символ можно получить по индексу -1: например, 'кот'[-1] даёт 'т'. Отрицательные индексы отсчитываются с конца, где -1 обозначает последний символ.
Почему правая граница среза не входит в результат?
В Python срез берёт символы от начальной позиции до позиции, указанной справа, но не включая её. Такое правило позволяет задавать длину фрагмента вычитанием границ: например, в [1:4] попадут три символа.
Можно ли изменить один символ строки по индексу?
Нет, в Python нельзя присвоить новое значение отдельному символу строки по индексу. Можно создать новую строку, например соединить нужные части с заменённым символом, и сохранить результат в переменную.
§ 19. Символьные строки