Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[8]

if (A):

print "!"if (A or B):

elif (B): => print " ! "

print " ! "else:

elseprint "?"

print "?"

Совет, данный нами при описании приоритетов различных операций, остается в силе и здесь: не жалейте скобок для того, чтобы сделать выражение более удобным и читабельным для вас - питон всё поймет и всё простит, но простите ли вы себя сами через месяц, пытаясь разобраться в мудреных условиях?

3.11 Комментарии

Комментариями называют части программы, не интересующие интерпретатор. В питоне есть два варианта комментариев: однострочные естественные и многострочные синтаксические. Комментарии первого типа начинаются символом ф и завершаются переходом на новую строку, i = 1 #этого питон уже не видит

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

j = 1+i м и и

Комментарий, поясняющий, что в этом месте программы переменная j

получила инкрементированное значение

переменной i и и и

В новых версиях питона этот возникший чисто синтаксический механизм обмана интерпретатора получил более оправданное применение. Например, при определении функции комментарий записывается в специальную связанную с ней переменную func doc.

4 Циклы и функции

4.1 Оператор перебора и оператор с предусловием

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

for х in (1,3,5,7,11,13,17,19):

и<операторы>

при выполнении этого кода операторы будут выполнены столько раз, какова длина последовательности (в нашем случае это 8) и каждый раз х


будет иметь значение очередного элемента последовательности: 1 на первом витке, 3 - на втором, 5 - на третьем, и т.д. Питон позволяет выполнять оператор перебора относительно нескольких переменных:

for х,у in ((1,2),(3,4),(5,6)):

и<операторы>

При этом на каждом проходе пара х и у (точнее, кортеж, состоящий из этой пары) будет принимать значение соответствующей пары последовательности. Если структура последовательности не подходит, интерпретатор питона выдаст ошибку: Распаковка не-последовательности (unpack поп-sequence).

Конечно, каждый раз указывать все значения - дело достаточно утомительное, поэтому в питоне есть встроеная функция range (), генерирующая список последовательных целых чисел в нужном интервале. С этой функцией мы мельком познакомились еще в прошлой лекции. Эту чрезвычайно полезную функцию можно использовать тремя способами:

range(п)

создаст список целых чисел от 0 включительно до п невключительно, range(f,t)

создаст список целых чисел от f включительно до t невключительно, range(f,t,s)

создаст список чисел из интервала [f ,t) вида /, f+s, f+2*s, ... - может быть полезно при использовании вещественных чисел.

При использовании чрезвычайно больших списков ради экономии памяти можно воспользоваться функцией xrangeO, которая, работая абсолютно аналогичным образом, не вычисляет сразу значение каждого элемента итоговой последовательности, а создает определенный объект, элементы которого вычисляются только при непосредственном обращении к ним. Математик сказал бы, что range О реализует абстракцию актуальной бесконечности, тогда как xrangeO - абстракцию потенциальной достижимости.

Если ваш список содержит несколько миллионов элементов, а одновременно нужны из них бывают только два или три, вы сможете заметить разницу в скорости выполнения программы при переходе с range О на xrange () невооруженным взглядом. Например, программа

from whrandom import choice

from time import clock

beg=clock()

A=range(30000000)

b=choice(A)

print clock()-beg

выполняется на компьютере AMD Duron 750MHz с 256Mb оперативной памяти и операционной системой Windows за 65-75 секунд, не считая пяти, а то и десяти минут выгрузки интерпретатора операционной системой, тогда как версия с xrange () выполняется за немногим более одной десятитысячной доли секунды.

Упражнение. Придумайте пример, когда время работы программы не может существенно измениться при переходе с range О на xrange ().


Но вернемся к операторам циклов. Более высокоуровневую абстракцию повторяющихся операторов представляет собой цикл while - цикл с предусловием. При его использовании вместо прямого перечисления всех пробегаемых значений переменной цикла программист формулирует условие, которое остается истинным, если нужно выполнять итерацию и становится ложным в противном случае. Существуют языки программирования, специально ориентированные на такие условия (там они называются инвариантами) . Все алгоритмы для программирования на подобных языках должны быть переформулированы с определение инварианта для каждой не единожды выполняемой строчки. Так далеко решаются заходить немногие, но циклы с условиями уже успели стать неотъемлимой частью всех алгоритмических языков.

Записывается цикл с предусловием так:

while <условие>

и<операторы>

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

Очевидно, что цикл

while (1): ...

будет вечным (из него никогда не будет выхода), а цикл while (0): ...

не будет выполнен ни разу. Цикл не может быть пустым, в случае необходимости используют ничего не делающий оператор pass: while (1): pass # вечное бездействие

Для экстренного выхода из цикла также существуют особые методы. Для безусловного выхода используется всевдооператор break: while (1): ui/=10

uifuOi) :ubreak

Теперь становится обоснованным применение вечных циклов, не так ли?

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

Ясно, что средства break и continue применимы и к циклу перебора: первый прерывает цикл, а второй вызывает новый виток вычислений, если текущее значение переменной цикла не последнее, иначе также завершает перебор.



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11] [стр.12] [стр.13]