Водич за Пајтон 2.6/For петље

Извор: Викикњиге
Пређи на навигацију Пређи на претрагу

Овде је нова вежба куцања за ово поглавље:

једандодесет = range(1, 11)
for бројање in једандодесет:
    print бројање

и увек присутни излаз:

1
2
3
4
5
6
7
8
9
10

Излаз изгледа страшно познато, али код програма изгледа другачије. Прва линија користи range функцију. Функција range узима два аргумента као range(почетак, крај). почетак је први број који се ствара. крај је за један већи од последњег броја. Имајте на уму да се овај програм могао урадити на краћи начин:

for бројање in range(1, 11):
    print бројање

Ево неких примера који показују шта се дешава са 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(5)
[0, 1, 2, 3, 4]
>>> range(21, 5)
[]

Следећа линија for бројање in једандодесет: користи for контролну структуру. for контролна структура изгледа као for променљива in листа:. листа кроз кроз коју је прошао почевши од првог елемента листе и иде до последњег. Као што for иде кроз сваки елемент листе ставља сваки у променљива. То дозвољава да се променљива која се користи у сваком сукцесивном времену покреће кроз for петљу. Овде је други пример (не морате да га куцате) за приказивање:

демолиста = ['живот', 42,'универзум', 6, 'и', 9, 'све']
for члан in демолиста:
    print "Тренутни члан је:",
    print члан

Излаз је:

Тренутни члан је: живот
Тренутни члан је: 42
Тренутни члан је: универзум
Тренутни члан је: 6
Тренутни члан је: и
Тренутни члан је: 9
Тренутни члан је: све

Приметите како for петља иде кроз и поставља члан сваком елементу листе. Обратите пажњу како, ако не желите print команда да иде до следеће линије додај зарез на крају изјаве(нпр. Ако желите да одштампате нешто друго на тој линији). Па, за шта је добра for петља? Прва употреба је да иде кроз све елементе листе и уради нешто са сваким од њих. Ево га брз начин да саберете све елементе:

листа = [2, 4, 6, 8]
збир = 0
for број in листа:
    збир = збир + број

print "Збир је:", збир

Са једноставним излазом:

Збир је: 20

Или можете да напишете програм да бисте сазнали да ли постоје дупликати у листи, овако програм ради:

листа = [4, 5, 7, 8, 9, 1, 0, 7, 10]
листа.sort()
прет = листа[0]
del листа[0]
for члан in листа:
    if прет == члан:
        print "Дупликат", прет, "је нађен"
    прет = члан

И за добро мерење:

Дупликат 7 је нађен

Добро, па како се то ради? Овде је специјална верзија отклањања грешака која ће вам помоћи да разумете (не морате да куцате ово):

л = [4, 5, 7, 8, 9, 1, 0, 7, 10]
print "л = [4, 5, 7, 8, 9, 1, 0, 7, 10]", "\t\tл:", л
л.sort()
print "л.sort()", "\t\tл:", л
прет = л[0]
print "прет = л[0]", "\t\tпрет:", прет
del l[0]
print "изб л[0]", "\t\tл:", л
for члан in л:
    if прет == члан:
        print "Дупликат", прет, "пронађен"
    print "if прет == члан:", "\t\tпрет:", прет, "\tчлан:", члан
    прет = члан
    print "прет = члан", "\t\tпрет:", прет, "\tчлан:", члан

Са излазом који је:

л = [4, 5, 7, 8, 9, 1, 0, 7, 10]        л: [4, 5, 7, 8, 9, 1, 0, 7, 10]
л.sort()                л: [0, 1, 4, 5, 7, 7, 8, 9, 10]
прет = л[0]             прет: 0
del л[0]                л: [1, 4, 5, 7, 7, 8, 9, 10]
if прет == члан:        прет: 0         члан: 1
прет = члан             прет: 1         члан: 1
if прет == члан:        прет: 1         члан: 4
прет = члан             прет: 4         члан: 4
if прет == члан:        прет: 4         члан: 5
прет = члан             прет: 5         члан: 5
if прет == члан:        прет: 5         члан: 7
прет = члан             прет: 7         члан: 7
Дупликат 7 пронађен
if прет == члан:        прет: 7         члан: 7
прет = члан             прет: 7         члан: 7
if прет == члан:        прет: 7         члан: 8
прет = члан             прет: 8         члан: 8
if прет == члан:        прет: 8         члан: 9
прет = члан             прет: 9         члан: 9
if прет == члан:        прет: 9         члан: 10
прет = члан             прет: 10        члан: 10

Разлог зашто сам ставио много print у коду је тај да можете да видите шта се дешава у свакој линији. (Уосталом, ако не можете да схватите зашто програм не ради, покушајте да много штампате изјаве тако да можете да видите шта се дешава.) Прво програм почиње са досадном старом листом. Следеће програм сортира листу. То је зато што се неки дупликати стављају један поред другог. Програм затим иницијализује прет(ходну) променљиву. Следеће је, први елемент листе се брише, тако да није погрешно мислио да је прва ставка дупликат. Затим for петља је нестала. Свака ставка листе се проверава да се види да ли је иста као претходна. Ако јесте дупликат је пронађен. Вредност прет се онда мења тако да се следећи пут for покреће кроз прет и то је претходна ставка у тренутну. Наравно, утврђено је да је 7 дупликат. (Приметите како се \t користи за штампање таба.)

Други начин да користите for петље је да урадите нешто одређени број пута. Овде је неки код за штампање првих 9 бројева Фибоначијевих серија:

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 петља нам дозвољава да на лакши начин прођемо кроз све елементе листе или да урадимо нешто одређени број пута.

Шаблон:Водич за Пајтон 2.6/Navigation