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 предоставляют простой способ перебрать все элементы списка или сделать что-либо определенное количество раз.