- •§0.1. Базовые знания
- •§0.2. Где достать интерпретатор языка Питон?
- •§0.3. Установка интерпретатора языка Питон в unix
- •§0.3.1. Установка/обновление Питона из грт-пакета
- •§0.3.2. Установка Питона из исходного кода
- •§0.4. Установка Питона в ос Windows
- •§0.5. Запуск программ, написанных на Питоне
- •§0.6. Среда разработки
- •§1.1. Алгоритмы и программы
- •§1.2. Языки программирования и уровни абстракции
- •Глава 1. Базовые понятия
- •§1.3. Формальные и естественные языки
- •§1.4. Интерпретаторы и компиляторы
- •§1.5. Первая программа
- •§1.6. Что такое отладка?
- •§1.6.1. Синтаксические ошибки (syntax errors)
- •§1.6.2. Ошибки выполнения (runtime errors)
- •§1.6.3. Семантические ошибки (semantic errors)
- •§1.6.4. Процесс отладки
- •Глава 2. Переменные, операции и выражения
- •§2.1. Значения и типы
- •§2.2. Преобразование типов
- •§2.3. Переменные
- •§2.4. Имена переменных и ключевые слова
- •§2.5. Выражения
- •§2.6. Выполнение выражений
- •§2.7. Операторы и операнды
- •§2.8. Порядок операций
- •§2.9. Простейшие операции над строками
- •§2.10. Композиция
- •Глава 3. Функции §3.1. Подпрограммы
- •§3.2. Вызовы функций
- •§3.3. Справочная система
- •§3.4. Импорт модулей и математические функции
- •§3.5. Композиция
- •§3.6. Создание функций
- •§3.7. Параметры и аргументы
- •§3.8. Локальные переменные
- •§3.9. Поток выполнения
- •§3.10. Стековые диаграммы
- •§3.11. Функции, возвращающие результат
- •Глава 4. Компьютерная графика
- •Глава 5. Логические выражения, условия и рекурсия §5.1. Комментарии в программах
- •§5.2. Простые логические выражения и логический тип данных
- •§5.3. Логические операторы
- •§5.4. Выполнение по условию и «пустота»
- •§5.5. Ввод данных с клавиатуры
- •§5.6. Альтернативные ветки программы (Chained conditionals)
- •§5.7. Пустые блоки
- •§5.8. Вложенные условные операторы (Nested conditionals)
- •§5.9. Рекурсия
- •§5.10. Стековые диаграммы рекурсивных вызовов
- •§5.11. Максимальная глубина рекурсии
- •§5.12. Числа Фибоначчи
- •Глава 6. Циклы
- •§6.1. Оператор цикла while
- •§6.2. Счетчики
- •§6.3. Бесконечные циклы
- •§6.4. Альтернативная ветка цикла while
- •§6.5. Табулирование функций
- •§6.6. Специальные и экранируемые символы
- •§6.7. Числа Фибоначчи и оператор цикла while
- •§6.8. Вложенные операторы цикла и двумерные таблицы
- •§6.9. Классификация операторов цикла
- •§6.10. Управляющие структуры
- •Глава 7. Строки
- •§7.1. Оператор индексирования
- •§7.2. Длина строки и отрицательные индексы
- •§7.3. Перебор и цикл for
- •§7.4. Срезы строк
- •§7.5. Сравнение строк
- •§7.6. Строки нельзя изменить
- •§7.7. Функция find
- •§7.8. Циклы и счётчики
- •§7.9. Модуль string
- •§7.10. Классификация символов
- •§10.2. Операции над словарями
- •§10.3. Методы словарей
- •§10.4. Использование псевдонимов и копирование
- •§10.5. Разряженные матрицы
- •§10.6. Подсказки
- •§10.7. Тип «длинное целое число»
- •§10.8. Подсчет букв
Глава 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] 'е'
Таким образом, мы можем индексировать строку с обоих ее концов - это очень удобно. К слову, такая возможность есть в очень немногих языках программирования. А теперь небольшое упражнение для закрепления материала.
Упражнение. Напишите программу, которая выводит длину введенной пользователем строки, а также первый, пятый и последний символ. Не забудьте предусмотреть случай, когда длина строки составляет меньше пяти символов.
