Pređi na sadržaj

Vodič za Pajton 2.6/For petlje

Izvor: Викикњиге

Ovde je nova vežba kucanja za ovo poglavlje:

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

i uvek prisutni izlaz:

1
2
3
4
5
6
7
8
9
10

Izlaz izgleda strašno poznato, ali kod programa izgleda drugačije. Prva linija koristi range funkciju. Funkcija range uzima dva argumenta kao range(почетак, крај). почетак je prvi broj koji se stvara. крај je za jedan veći od poslednjeg broja. Imajte na umu da se ovaj program mogao uraditi na kraći način:

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

Evo nekih primera koji pokazuju šta se dešava sa range komandom:

>>> 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)
[]

Sledeća linija for бројање in једандодесет: koristi for kontrolnu strukturu. for kontrolna struktura izgleda kao for променљива in листа:. листа kroz kroz koju je prošao počevši od prvog elementa liste i ide do poslednjeg. Kao što for ide kroz svaki element liste stavlja svaki u променљива. To dozvoljava da se променљива koja se koristi u svakom sukcesivnom vremenu pokreće kroz for petlju. Ovde je drugi primer (ne morate da ga kucate) za prikazivanje:

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

Izlaz je:

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

Primetite kako for petlja ide kroz i postavlja član svakom elementu liste. Obratite pažnju kako, ako ne želite print komanda da ide do sledeće linije dodaj zarez na kraju izjave(npr. Ako želite da odštampate nešto drugo na toj liniji). Pa, za šta je dobra for petlja? Prva upotreba je da ide kroz sve elemente liste i uradi nešto sa svakim od njih. Evo ga brz način da saberete sve elemente:

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

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

Sa jednostavnim izlazom:

Збир је: 20

Ili možete da napišete program da biste saznali da li postoje duplikati u listi, ovako program radi:

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

I za dobro merenje:

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

Dobro, pa kako se to radi? Ovde je specijalna verzija otklanjanja grešaka koja će vam pomoći da razumete (ne morate da kucate ovo):

л = [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члан:", члан

Sa izlazom koji je:

л = [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

Razlog zašto sam stavio mnogo print u kodu je taj da možete da vidite šta se dešava u svakoj liniji. (Uostalom, ako ne možete da shvatite zašto program ne radi, pokušajte da mnogo štampate izjave tako da možete da vidite šta se dešava.) Prvo program počinje sa dosadnom starom listom. Sledeće program sortira listu. To je zato što se neki duplikati stavljaju jedan pored drugog. Program zatim inicijalizuje прет(hodnu) promenljivu. Sledeće je, prvi element liste se briše, tako da nije pogrešno mislio da je prva stavka duplikat. Zatim for petlja je nestala. Svaka stavka liste se proverava da se vidi da li je ista kao prethodna. Ako jeste duplikat je pronađen. Vrednost прет se onda menja tako da se sledeći put for pokreće kroz прет i to je prethodna stavka u trenutnu. Naravno, utvrđeno je da je 7 duplikat. (Primetite kako se \t koristi za štampanje taba.)

Drugi način da koristite for petlje je da uradite nešto određeni broj puta. Ovde je neki kod za štampanje prvih 9 brojeva Fibonačijevih serija:

a = 1
b = 1
for c in range(1, 10):
    print a,
    n = a + b
    a = b
    b = n

sa iznenađujućim izlazom:

1 1 2 3 5 8 13 21 34

Sve što se može uraditi sa for petljama takođe se može odraditi sa while petljama ali for petlja nam dozvoljava da na lakši način prođemo kroz sve elemente liste ili da uradimo nešto određeni broj puta.

Šablon:Vodič za Pajton 2.6/Navigation