Программа на языке Python может состоять из одного или нескольких модулей. Каждый модуль представляет собой текстовый файл в кодировке, совместимой с 7битной кодировкой ASCII. Для кодировок, использующих старший бит, необходимо явно указывать название кодировки. Например, модуль, комментарии или строковые литералы которого записаны в кодировке KOI8R, должен иметь в первой или второй строке следующую спецификацию:
Листинг
# -*- coding: koi8r -*-
Благодаря этой спецификации интерпретатор Python будет знать, как корректно переводить символы литералов Unicodeстрок в Unicode. Без этой строки новые версии Python будут выдавать предупреждение на каждый модуль, в котором встречаются коды с установленным восьмым битом.
О том, как делать программу модульной, станет известно в следующих лекциях. В примерах ниже используются как фрагменты модулей, записанных в файл, так и фрагменты диалога с интерпретатором Python. Последние отличаются характерным приглашением >>>. Символ решетка (#) отмечает комментарий до конца строки.
Программа на Python, с точки зрения интерпретатора, состоит из логических строк. Одна логическая строка, как правило, располагается в одной физической, но длинные логические строки можно явно (с помощью обратной косой черты) или неявно (внутри скобок) разбить на несколько физических:
Листинг
print a, " очень длинная строка, которая не помещается в», \
80, «знакоместах»
Примечание:
Во всех примерах в основном используется «официальный» стиль оформления кода на Python в соответствии с документом «Python Style Guide», который можно найти на сайте http://python.org
Основные алгоритмические конструкции
Предполагается, что слушатели уже умеют программировать хотя бы на уровне школьной программы, и потому вполне достаточно провести параллели между алгоритмическими конструкциями и синтаксисом 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, оператор ifelse составной оператор.
Циклы
Третьей необходимой алгоритмической конструкцией является цикл. С помощью цикла можно описать повторяющиеся действия. В 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.