next up previous contents
Далее: Логические выражения Наверх: Курс языка Python для начинающих Назад: Списки   Содержание

Циклы for

Новое упражнение по работе с клавиатурой на компьютере:
onetoten = range(1,11)
for count in onetoten:
        print count
и уже знакомый результат:
1
2
3
4
5
6
7
8
9
10
Результат уже очень знаком, но программа выглядит по-другому. В первой строке используется функция range. Эта функция использует два аргумента: range(start, finish). start – это первое число, с которого начинается отсчет. finish – число, перед которым отсчет заканчивается. Обратите внимание, что программа может быть написана более коротко:
for count in range(1,11):
        print count
Примеры, показывающие как работает range:
>>> range(1,10)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(-32, -20)
[-32, -31, -30, -29, -28, -27, -26, -25, -24, -23, -22, -21]
>>> range(5,21)
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
>>> range(21,5)
[]
Вторая строка в первой программе использует команду управления for. Часто она используется следующим образом: for variable in list. При этом list проходится, начиная с первого элемента до последнего. Когда for перебирает list, он присваивает каждый элемент списка в переменную variable. Это позволяет использовать variable в каждой итерации цикла. Еще один пример (можете его не печатать):
demolist = ['life',42, 'the universe', 6,'and',7,'everything']
for item in demolist:
    print "The Current item is:",
    print item
Результат:
The Current item is: life
The Current item is: 42
The Current item is: the universe
The Current item is: 6
The Current item is: and
The Current item is: 7
The Current item is: everything
Как было сказано выше, цикл пробегает весь список и присваивает каждый элемент списка в переменную. (Помните, если вы не хотите, чтобы после выполнения команды print следующая часть вывода начиналась на следующей строке – то есть вы хотите вывести что-то еще на текущей строке, добавьте запятую в конце команды). Так для чего же еще используется for? Первый способ использования – пойти через каждый элемент списка и что-нибудь сделать с ним. Вот быстрый способ просуммировать все элементы:
list = [2,4,6,8]
sum = 0
for num in list:
        sum = sum + num
print "The sum is: ",sum
И результат – просто одна строка:
The sum is:  20
Также можно написать программу проверки, есть ли совпадающие элементы в списке:
list = [4, 5, 7, 8, 9, 1,0,7,10]
list.sort()
prev = list[0]
del list[0]
for item in list:
        if prev == item:
                print "Duplicate of ",prev," Found"
        prev = item
Результат:
Duplicate of  7  Found
Как же она работает? Вот специальная отладочная версия, которая поможет вам это понять (можете ее не печатать).
l = [4, 5, 7, 8, 9, 1,0,7,10]
print "l = [4, 5, 7, 8, 9, 1,0,7,10]","\tl:",l
l.sort()
print "l.sort()","\tl:",l
prev = l[0]
print "prev = l[0]","\tprev:",prev
del l[0]
print "del l[0]","\tl:",l
for item in l:
        if prev == item:
                print "Duplicate of ",prev," Found"
        print "if prev == item:","\tprev:",prev,"\titem:",item
        prev = item
        print "prev = item","\t\tprev:",prev,"\titem:",item
Результат:
l = [4, 5, 7, 8, 9, 1,0,7,10]   l: [4, 5, 7, 8, 9, 1, 0, 7, 10]
l.sort()        l: [0, 1, 4, 5, 7, 7, 8, 9, 10]
prev = l[0]     prev: 0
del l[0]        l: [1, 4, 5, 7, 7, 8, 9, 10]
if prev == item:        prev: 0         item: 1
prev = item             prev: 1         item: 1
if prev == item:        prev: 1         item: 4
prev = item             prev: 4         item: 4
if prev == item:        prev: 4         item: 5
prev = item             prev: 5         item: 5
if prev == item:        prev: 5         item: 7
prev = item             prev: 7         item: 7
Duplicate of  7  Found
if prev == item:        prev: 7         item: 7
prev = item             prev: 7         item: 7
if prev == item:        prev: 7         item: 8
prev = item             prev: 8         item: 8
if prev == item:        prev: 8         item: 9
prev = item             prev: 9         item: 9
if prev == item:        prev: 9         item: 10
prev = item             prev: 10        item: 10
Причина, по которой я использовал так много команд print – чтобы вы могли понять, что происходит в каждой строке программы. (Кстати, если вы не можете понять, почему программа не работает, попробуйте вставить множество команд print, чтобы увидеть, что же делает программа). Наша программа начинается со старого скучного списка. Далее программа сортирует его. Это делается для того чтобы совпадающие элементы попали рядом друг с другом. Затем программа присваивает значение в переменную prev. Затем мы удаляем первый элемент, чтобы мы не подумали по ошибке, что он совпадает с prev. Затем начинается цикл for. В нем проверяется, совпадает ли каждый элемент списка с предыдущим. Если да, то мы нашли дубликат. Далее меняем значение переменной prev, чтобы на следующей итерации цикла она содержала элемент, предыдущий относительно рассматриваемого. Разумеется, мы находим два элемента 7. (Обратите внимание, что \t используется для вывода знака табуляции).

Другое использование цикла for – это сделать что-либо определенное количество раз. Ниже приводится программа для вычисления первых девяти чисел Фибоначчи:

a = 1
b = 1
for c in range(1,10):
        print a,
        n = a + b
        a = b
        b = n
А вот и ее поразительный результат:
1 1 2 3 5 8 13 21 34
Все, что можно сделать с циклами for, можно сделать циклами while, но циклы for предоставляют простой способ перебрать все элементы списка или сделать что-либо определенное количество раз.


next up previous contents
Далее: Логические выражения Наверх: Курс языка Python для начинающих Назад: Списки   Содержание
Джош Коглиати jjc@honors.montana.edu Версия Wikibooks: Курс языка Python Для начинающих на Wikibooks