Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Чаплыгин А.Н. Учимся програмировать вместе с Пи...doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
3 Мб
Скачать
☆

Глава 7. Строки

Разобравшись с основами управления потоком выполнения программ, перейдем к более подробному изучению типов данных, ведь для более эффективного управления данными полезно понимать, как они устроены. Начнем с одного из уже знакомых нам по предыдущим главам типов - строк (str).

§7.1. Оператор индексирования

Во второй главе мы уже научились выполнять некоторые операции над строками, но до этого момента мы работали со строками как с единым целым. Известные нам операции над строками (конкатенация и итерация) являются, по сути аналогами сложения и умножения чисел, но этот набор неполон - не хватает аналогов операций вычитания и деления.

Если вы делали упражнения, то должны были заметить, что операции конкатенации и итерации не обладают свойством коммутативности. В следствии этого, трудно представить, как применить к строкам операции вычитания и деления в том виде, в котором они применяются к числам.

Тем не менее, в программировании существуют целый набор специальных операций и функций, позволяющих работать с наборами символов, составляющими строки -подстроками.

Простейший из них - оператор индексирования. Данный оператор позволяет получить любой одиночный символ из строки. У него довольно простой синтаксис:

СТРОКА[ИНДЕКС]

Индекс, указываемый в квадратных скобках, представляет собой порядковый номер символа в строке:

>» 'Hello! ' [1]

'е'

Хм, это не то, что мы ожидали увидеть - интерпретатор почему-то вернул не первый, а второй символ строки. Объясняется эта семантическая ошибка очень просто. Дело в том, что компьютер начинает считать не с единицы, как привыкли мы с вами, а с нуля. Проверим:

>» 'Hello! ' [0] 'Н'

Работает! Идем дальше.

§7.2. Длина строки и отрицательные индексы

Для удобной работы с оператором индексирования хорошо бы было знать длину строки. Впрочем, выяснить это довольно просто. Смотрите:

>» len('Hello world!')

12

>»

Обратите внимание, что пробел тоже считается. Теперь давайте попробуем вывести последний символ строки:

76

Ревизия: 170

Строки

>» а = 'Hello! ' >» а [1еп (а) ]

Traceback (most recent call last):

File "<pyshell#16>", line 1, in -toplevel-a [len(a)] IndexError: string index out of range >»

Т.к. нумерация символов в строках начинается с нуля, мы использовали недопустимое значение индекса - символа с таким индексом в этой строке нет, поэтому интерпретатор сгенерировал исключение IndexError : string index out of range. Исправим ошибку:

>» a = 'Hello! '

>» a[len(a) -1]

Использование функции 1еп() в операторе индексирования выглядит громоздко, поэтому в Питоне предусмотрен более короткий вариант записи:

>» аГ-1"

Еще один маленький эксперимент. Попробуем подставить в качестве индекса другое отрицательное число:

>» а[-5] 'е'

Таким образом, мы можем индексировать строку с обоих ее концов - это очень удобно. К слову, такая возможность есть в очень немногих языках программирования. А теперь небольшое упражнение для закрепления материала.

Упражнение. Напишите программу, которая выводит длину введенной пользователем строки, а также первый, пятый и последний символ. Не забудьте предусмотреть случай, когда длина строки составляет меньше пяти символов.