- •§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. Подсчет букв
§6.9. Классификация операторов цикла
В различных языках программирования существует четыре типа циклов. Мы рассмотрели один из них на примере оператора while. Такие циклы называются циклами с предусловием. Их характерная черта заключается в том, что Условие повторения цикла проверяется до выполнения его тела.
Второй тип циклов - циклы с постусловием. Их отличие состоит в том, что они имеют условие выхода из цикла, которое проверяется после выполнения тела цикла. Т.е. в таких циклах обязательно выполняется хотя бы одна итерация. Например, в языке Pascal цикл с постусловием выглядит так:
do |
{Цикл с постусловием в языке Pascal} |
ТЕЛО ЦИКЛА |
|
until УСЛОВИЕ ВЫХОДА; |
|
В Питоне цикла с постусловием нет, т.к. он легко заменяется циклом с предусловием -достаточно на первой итерации сделать истинным условие повторения цикла.
Еще один тип циклов - арифметические циклы. Такие циклы специально предназначены для работы с переменными-счетчиками. Например, в Pascal'e арифметический цикл выглядит так:
for i:=0 to15 9 do {Арифметический цикл в языке Pascal}
ТЕЛО_ЦИКЛА;
В С арифметический цикл немного сложнее - в его заголовке можно отдельно указывать начальное значение счетчика (причем, их может быть несколько), условие повторения цикла и операции, которые должны выполняться в конце каждой итерации (например, приращение счетчика):
for |
(i = |
9; i <= |
9; |
i |
+= |
1) |
{ |
// |
Арифме |
тический |
цикл |
в |
языке |
С |
|
} |
ТЕЛО |
ЦИКЛА; |
|
|
|
|
|
|
|
|
|
|
|
|
|
Арифметического цикла в Питоне тоже нет, но он имеет средство, которое прекрасно его заменяет: цикл перебора элементов множества. Такие циклы базируются на концепции итераторов, о которой мы еще поговорим немного позже. Такой цикл в Питоне выглядит так:
for i in range(0,10): ТЕЛО_ЦИКЛА
Немного позже мы к нему еще вернемся и узнаем на что он способен - по гибкости он превосходит обычные арифметические циклы.
15 Для обратного отсчета может использоваться ключевое слово downto.
74
Ревизия: 170
Циклы
§6.10. Управляющие структуры
Настало время оглянуться назад. В первой главе речь шла о том, что высокоуровневые программы строятся на нескольких видах конструкций. Давайте вспомним их и сопоставим каждую из них со знаниями приобретенными в пройденных главах. Итак, в высокоуровневые программы строятся на основе следующих типов операций:
Ввод данных (пока мы умеем вводить данные только с клавиатуры с помощью функций input и raw_input);
Вывод данных (данные мы выводили на экран; вывод производится с помощью команды print);
Выполнение некоторых операций над числами, строками или другими объектами (большинство выражений, в том числе, с использованием функций относятся как раз к этим операциям);
Выбор ветви выполнения программы на основе принятого решения (условный оператор if);
Повторение группы операций чаще всего с изменением одного или нескольких параметров (операторы цикла while и for).
Кроме того, в третьей главе мы разобрались с функциями, предоставляющими нам множество преимуществ, в том числе:
Любой часто повторяемой последовательности операций мы можем назначить имя и по нему вызывать ее на выполнение;
Использование функций упрощает понимание программы и процесс ее отладки: мы можем отладить каждую функцию по отдельности с предельными значениями параметров, а затем собрать их в единую систему, устойчивую к ошибкам при вводе данных пользователем и другим непредвиденным ситуациям;
Функции позволяют избежать дублирование кода, поэтому изменение хорошо спроектированной программы требует не так много усилий;
Хорошо продуманные функции могут использоваться в других проектах, что повышает нашу производительность и позволяет в полной мере насладиться процессом решения текущей задачи;
И, наконец, с помощью рекурсивных функций можно элегантно решать довольно сложные задачи, и программа при этом будет занимать всего несколько строк.
Итак, первая ступень пройдена: теперь мы владеем вопросами, на основе которых строится подавляющее большинство приложений - программ, позволяющих решать повседневные задачи (иногда их называют прикладными программами). В следующих главах мы продолжим изучать новые возможности Питона и концепции программирования, но самое трудное уже позади.
75
Ревизия: 170
Строки
