Чтение онлайн

на главную - закладки

Жанры

Язык программирования Python
Шрифт:

Основные алгоритмические конструкции

Предполагается, что слушатели уже умеют программировать хотя бы на уровне школьной программы, и потому вполне достаточно провести параллели между алгоритмическими конструкциями и синтаксисом Python. Кроме того, Python как правило не подводит интуицию программиста (по крайней мере, науке хорошо известны типичные ловушки начинающих программистов на Python), поэтому изучать синтаксис Python предпочтительнее на примерах, а не с помощью синтаксических диаграмм или форм Бэкуса–Наура.

Последовательность операторов

Последовательные

действия описываются последовательными строками программы. Стоит, правда, добавить, что в программах важны отступы, поэтому все операторы, входящие в последовательность действий, должны иметь один и тот же отступ:

Листинг

a = 1

b = 2

a = a + b

b = a — b

a = a — b

print a, b

Что делает этот пример? Проверить свою догадку можно с помощью интерактивного режима интерпретатора Python.

При работе с Python в интерактивном режиме как бы вводится одна большая программа, состоящая из последовательных действий. В примере выше использованы операторы присваивания и оператор print.

Оператор условия и выбора

Разумеется, одними только последовательными действиями в программировании не обойтись, поэтому при написании алгоритмов используется еще и ветвление:

Листинг

if a > b:

c = a

else:

c = b

Этот кусок кода на Python интуитивно понятен каждому, кто помнит, что if по–английски значит «если», а else — «иначе». Оператор ветвления имеет в данном случае две части, операторы каждой из которых записываются с отступом вправо относительно оператора ветвления. Более общий случай — оператор выбора — можно записать с помощью следующего синтаксиса (пример вычисления знака числа):

Листинг

if a < 0:

s = -1

elif a == 0:

s = 0

else:

s = 1

Стоит заметить, что elif — это сокращенный else if. Без сокращения пришлось бы применять вложенный оператор ветвления:

Листинг

if a < 0:

s = -1

else:

if a == 0:

s = 0

else:

s = 1

В отличие от оператора print, оператор if–else — составной оператор.

Циклы

Третьей необходимой алгоритмической конструкцией является цикл. С помощью цикла можно описать повторяющиеся действия. В Python имеются два вида циклов: цикл ПОКА (выполняется некоторое действие) и цикл ДЛЯ (всех значений последовательности). Следующий пример иллюстрирует цикл ПОКА на Python:

Листинг

s = «abcdefghijklmnop»

while s != "":

print s

s = s[1: — 1]

Оператор while говорит интерпретатору Python: «пока верно условие цикла, выполнять тело цикла». В языке Python тело цикла выделяется отступом. Каждое исполнение тела цикла будет называться итерацией. В приведенном примере убирается первый и последний символ строки до тех пор, пока не останется пустая строка.

Для большей гибкости при организации циклов применяются операторы break (прервать) и continue (продолжить). Первый позволяет прервать цикл, а второй — продолжить цикл, перейдя к следующей итерации (если, конечно, выполняется условие цикла).

Следующий пример читает строки из файла и выводит те, у которых длина больше 5:

Листинг

f = open(«file.txt», «r»)

while 1:

l = f.readline

if not l:

break

if len(l) > 5:

print l,

f.close

В

этом примере организован бесконечный цикл, который прерывается только при получении из файла пустой строки (l), что обозначает конец файла.

В языке Python логическое значение несет каждый объект: нули, пустые строки и последовательности, специальный объект None и логический литерал False имеют значение «ложь», а прочие объекты значение «истина». Для обозначения истины обычно используется 1 или True.

Примечание:

Литералы True и False для обозначения логических значений появились в Python 2.3.

Цикл ДЛЯ выполняет тело цикла для каждого элемента последовательности. В следующем примере выводится таблица умножения:

Листинг

for i in range(1, 10):

for j in range(1, 10):

print "%2i» % (i*j),

print

Здесь циклы for являются вложенными. Функция range порождает список целых чисел из полуоткрытого диапазона [1, 10). Перед каждой итерацией счетчик цикла получает очередное значение из этого списка. Полуоткрытые диапазоны общеприняты в Python. Считается, что их использование более удобно и вызывает меньше программистских ошибок. Например, range(len(s)) порождает список индексов для списка s (в Python–последовательности первый элемент имеет индекс 0). Для красивого вывода таблицы умножения применена операция форматирования % (для целых чисел тот же символ используется для обозначения операции взятия остатка от деления). Строка форматирования (задается слева) строится почти как строка форматирования для printf из C.

Функции

Программист может определять собственные функции двумя способами: с помощью оператора def или прямо в выражении, посредством lambda. Второй способ (да и вообще работа с функциями) будет рассмотрен подробнее в лекции по функциональному программированию на Python, а здесь следует привести пример определения и вызова функции:

Листинг

def cena(rub, kop=0):

return "%i руб. %i коп.» % (rub, kop)

print cena(8, 50)

print cena(7)

print cena(rub=23, kop=70)

В этом примере определена функция двух аргументов (из которых второй имеет значение по умолчанию — 0). Вариантов вызова этой функции с конкретными параметрами также несколько. Стоит только заметить, что при вызове функции сначала должны идти позиционные параметры, а затем, именованные. Аргументы со значениями по умолчанию должны следовать после обычных аргументов. Оператор return возвращает значение функции. Из функции можно возвратить только один объект , но он может быть кортежем из нескольких объектов.

После оператора def имя cena оказывается связанным с функциональным объектом.

Исключения

В современных программах передача управления происходит не всегда так гладко, как в описанных выше конструкциях. Для обработки особых ситуаций (таких как деление на ноль или попытка чтения из несуществующего файла) применяется механизм исключений. Лучше всего пояснить синтаксис оператора try–except следующим примером:

Листинг

try:

res = int(open('a.txt').read) / int(open('c.txt').read)

Поделиться:
Популярные книги

Триумфальная арка

Ремарк Эрих Мария
Эксклюзивная классика
Проза:
классическая проза
9.42
рейтинг книги
Триумфальная арка

Воронцов. Перезагрузка. Книга 4

Тарасов Ник
4. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
фантастика: прочее
6.00
рейтинг книги
Воронцов. Перезагрузка. Книга 4

Многоточие сборки

Андреева Юлия Игоревна
1. От вчера до завтра
Документальная литература:
биографии и мемуары
прочая документальная литература
5.00
рейтинг книги
Многоточие сборки

Хроники Элении (сборник)

Эддингс Дэвид
Шедевры фантастики
Фантастика:
фэнтези
7.86
рейтинг книги
Хроники Элении (сборник)

Кодекс Охотника. Книга XV

Винокуров Юрий
15. Кодекс Охотника
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XV

Сирота

Шмаков Алексей Семенович
1. Светлая Тьма
Фантастика:
юмористическое фэнтези
городское фэнтези
аниме
5.00
рейтинг книги
Сирота

Вторая жизнь майора. Цикл

Сухинин Владимир Александрович
Вторая жизнь майора
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Вторая жизнь майора. Цикл

Атлантида

Касслер Клайв
15. Дирк Питт
Детективы:
боевики
6.67
рейтинг книги
Атлантида

Погоня

Касслер Клайв
1. Исаак Белл
Детективы:
прочие детективы
7.12
рейтинг книги
Погоня

Время зимы

Субботина Айя
Фантастика:
фэнтези
4.00
рейтинг книги
Время зимы

Цикл "Отмороженный". Компиляция. Книги 1-14

Гарцевич Евгений Александрович
Отмороженный
Фантастика:
боевая фантастика
рпг
постапокалипсис
5.00
рейтинг книги
Цикл Отмороженный. Компиляция. Книги 1-14

Тварь. Кассеты Андерсона

Спиллейн Микки
Детективы:
крутой детектив
5.00
рейтинг книги
Тварь. Кассеты Андерсона

Брат за брата

Колычев Владимир Григорьевич
Детективы:
криминальные детективы
6.62
рейтинг книги
Брат за брата

Телепат

Крюкова Тамара Шамильевна
Фантастика:
научная фантастика
7.83
рейтинг книги
Телепат