Python za radoznale: Petlje (loop) u Python programskom jeziku

1,297 views
Skip to first unread message

Hrvoje Katić

unread,
Dec 17, 2011, 9:53:02 AM12/17/11
to hrprog...@googlegroups.com
Petlje (loop) u Python programskom jeziku

Petlja (loop) u programskim jezicima omogućuje izvršavanje blokova
naredbi određeni broj puta, ili izvršavanje blokova naredbi dok se
određeni uvjet ne ispuni. Ako se nađemo u takvoj situaciji da trebamo
izvršiti neki blok naredbi više puta, nije niti malo praktično
ponavljati tj. kopirati isti taj blok više puta kako bi se isti više
puta izvršio. To ne samo da usporava program, nego i naš rad na njemu.
Zato su ovdje praktične petlje. Sada ćemo se upoznati sa petljama u
Python programskom jeziku, te koje sve vrste petlji možemo u njemu
koristiti.

While petlja

Počet ćemo s while petljom, s obzirom da je ona jednostavnija za
objasniti i za uporabu. While petlju koristimo kada želimo da naš
program izvrši neki blok naredbi toliko dugo dok se određeni uvjet ne
ispuni. Kao i kod if naredbe, kada spominjemo uvjet misli se na neki
Python izraz.
Ispravna sintaksa while petlje je:
while uvjet:
# izvrši ovaj blok dok se uvjet ne ispuni
Primijetili ste da i while naredba završava dvotočkom, što znači da je i
ovdje indentacija u igri, jer ovdje uvlačimo blok naredbi koje se moraju
izvršiti unutar petlje. Također i ovdje koristimo neka pravila kao i kod
if naredbe, pa tako možemo koristiti i negaciju (not), te operatore and
i or.
Slijedi jednostavan primjer while petlje, koji napišimo u datoteci
primjer8.py.
broj = 0
while broj < 5:
broj += 1
print broj
Kada izvršimo ovaj program, na ekranu će se ispisati brojevi od 1 do 5.
Slijedi objašnjenje kako smo to postigli:
1. U prvoj liniji koda kreirali smo varijablu zvanu broj kojoj smo
dodijelili cjelobrojnu vrijednost 0.
2. U drugoj liniji koda pokrenuli smo while petlju, te postavili uvjet
da će se petlja izvršavati dokle god je vrijednost varijable broj manja
od 5.
3. U bloku naredbi unutar while petlje, u prvoj liniji tog bloka
naredili smo programu da poveća vrijednost varijable broj za jedan broj
više svaki put kada se ponavlja izvršavanje bloka naredbi ove while
petlje, dok smo u drugoj liniji naredili programu da naredbom print
ispiše novu vrijednost varijable broj nakon što joj je vrijednost
povećana za jedan broj.
Da objasnim i zašto smo uvećavali vrijednost varijable broj kod svakog
ponavljanja izvršavanja bloka naredbi unutar while petlje. Izmijenimo
sada naš kod tako da ne sadrži liniju koja uvećava vrijednost varijable
broj.
broj = 0
while broj < 5:
print broj
Pažnja! Nemojte pokušavati izvršavati ovaj program! Kada se ovaj program
pokrene, na ekranu će se konstantno ispisivati broj 0. Razlog tome je
što nigdje nismo promijenili vrijednost varijable broj u minimalno 5 što
je bio uvjet naše while petlje, što je prouzrokovalo izvršavanje petlje
u beskonačnost tj. beskrajnu petlju. To ujedno znači da će se ovaj
program izvršavati trajno, računalo će se usporiti, a program nećemo
moči ugasiti nikako drugačije nego da zaustavimo proces command prompta
iz task managera, ili da odaberemo opciju Close iz sistemskog izbornika
(alt + razmaknica).
Sada slijedi još nekoliko proširenijih primjera gdje je while petlja
praktična. Sljedeći primjer napišimo u datoteci primjer9.py. U ovom
programu, radimo klasičnu igru u kojoj korisnik pogađa broj, te će se
program izvršavati toliko dugo dok korisnik nije pogodio broj.
broj = 42
pogadjanje_u_tijeku = True
while pogadjanje_u_tijeku:
pogodak = int(input("Unesi broj:"))
if pogodak == broj:
print "Cestitamo! Pogodio si!"
pogadjanje_u_tijeku = False # obavezno napisati kako bi se
while petlja ovdje zaustavila
elif pogodak < broj:
print "Netocno, vise malo."
else:
print "Netocno, manje malo."
raw_input()
Dakle, ovaj program će omogućiti krajnjem korisniku da pogađa broj
toliko dugo dok ga ne pogodi. Prođimo malo kroz ovaj primjer:
1. Prvo smo stvorili varijablu broj i dodijelili joj 42. To je broj koji
tražimo od korisnika da ga unese.
2. Stvorili smo također i Boolean varijablu pogadjanje_u_tijeku, kojoj
smo dodijelili vrijednost True (istinita). Istoj ćemo promijeniti
vrijednost u False (lažna) nakon što korisnik pogodi broj, jer nakon
toga pogađanje više nije u tijeku, nego završeno.
3. Pokrenuli smo zatim while petlju koja će se izvršavati toliko dugo
dok se vrijednost varijable pogadjanje_u_tijeku ne promijeni u False.
4. Unutar te while petlje, prvo smo naredili programu da zatraži od
korisnika unos broja. Funkciju int smo koristili samo zato da bi string
pretvorili u cjelobrojnu vrijednost, stoga nek vas to ne zbunjuje.
5. Zatim smo također unutar while petlje uključili if naredbu koja
ispituje je li unesen broj jednak traženom broju. Ako jest, program
ispisuje cestitku, a vrijednost varijable pogadjanje_u_tijeku mijenjamo
u False, jer je pogadjanje zavrseno. No, ukoliko je broj neispravan,
slijedi elif naredba koja provjerava nije li onda korisnik mozda unio
manji broj. Ako jest, program ce to saopciti, te nakon toga izvrsavanje
while petlje krece ispocetka. No, ako u pitanju nije niti manji broj,
slijedi else blok, koji predpostavlja da je korisnik unio veci broj. Ako
jest, ispisuje se poruka koja ce to saopciti, a izvrsavanje while petlje
opet se vraca na pocetak.
Dakle, vrijednost varijable pogadjanje_u_tijeku mijenjali smo u False
jedino ako je korisnik pogodio broj, dok u nekom drugom slućaju ona
ostaje True, što znači da while petlja nastavlja s ponavljanjem svog
izvršavanja. No, ukoliko bismo htjeli izmijeniti program da dozvoli
korisniku ogranićen broj šansi za pogađanje npr. 6 pogađanja, te
prekinuti zavrsavanje petlje ukoliko je broj pogodjen, možemo to
napraviti tako da izmijenimo naš kod na sljedeći način:
broj = 42
pokusaj = 0
while pokusaj != 6:
pokusaj += 1
print "Pokusaj", pokusaj
pogodak = int(input("Unesi broj:"))
if pogodak == broj:
print "Cestitamo! Pogodio si!"
break
elif pogodak < broj:
print "Netocno, vise malo."
else:
print "Netocno, manje malo."
raw_input()
Evo što je novo u ovom izmijenjenom kodu:
1. Umjesto varijable pogadjanje_u_tijeku, stvorili smo varijablu pokusaj
koja broji pokušaje korisnika, i dodijelili joj vrijednost 0 budući da
je korisnik tek pokrenuo program i nije još imao niti jedan pokušaj.
2. Kod while petlje, postavili smo uvjet da se ona ponavlja toliko dugo
dok korisnik ne dođe do šestog pokušaja.
3. U prvu liniju bloka naredbi unutar while petlje naredili smo programu
da svaki put poveća broj pokušaja za jedan broj više svaki put kada se
izvršavanje petlje ponavlja tj. vraća na početak.
4. Unutar prve if naredbe, gdje program ispituje da li je unesen broj
jednak traženom, na mjestu gdje smo prije mijenjali vrijednost varijable
pogadjanje_u_tijeku u False, sada smo stavili jednu novu ključnu riječ
tj. naredbu, break. Naredba break naređuje programu da na ovom mjestu
zaustavi izvršavanje petlje, te nastavi dalje sa izvršavanjem preostalog
dijela programa.
Napomena, primijetili ste ovdje da je blok naredbi koji pripada if
naredbama povećan za još 4 razmaka. Razlog tome je taj što ove if
naredbe pripadaju bloku naredbi while petlje. Stoga je vrlo važno
obraćati pozornost na indentaciju kada pišemo blokove naredbi unutar
blokova naredbi, jer u suprotnom dolazi do pogreške, a i do čuđenja
samog programera.
Za kraj diskusije o while petlji, predstavimo još jednu naredbu koja se
koristi unutar petlji, naredba continue. Krenimo odmah s jednostavnim
primjerom koji napišimo u primjer10.py, a nakon toga ćemo proći kroz
cijeli kod i objasniti što smo napravili.
broj = 0
while broj < 10:
broj += 1
if broj == 6:
continue
print broj
raw_input()
Dakle, u ovom primjeru napravili smo sljedeće:
1. Postavili smo uvjet u while petlji da se izvršavanje petlje ponavlja
dokle vrijednost varijable broj nije 10.
2. Nakon što smo povećali vrijednost varijable broj za jedan broj više,
dodali smo if naredbu koja ispituje je li trenutna vrijednost 6, te ako
jest, broj se neće ispisati na ekranu nego će se prijeći na sljedeći
broj. To smo postigli naredbom continue. Naredba continue koristi se
unutar petlje kako bi preskočila ostatak bloka naredbi unutar while
petlje, vratila njeno izvršavanje na početak, te ponovila izvršavanje
bloka naredbi prije continue naredbe.
Kada pokrenemo ovaj program, na ekranu će se ispisivati brojevi od 1 do
10, osim broja 6, čije smo ispisivanje preskočili naredbom continue.

For - in Petlja

For - in petlja u Python programskom jeziku je nešto drugačija od while
petlje s obzirom na način na koji se izvršava. Ova petlja prolazi kroz
svaku pojedinu stavku tj. element u nekom nizu. Taj način prolaženja
petlje kroz nizove još se naziva iteracija. Pod nizovima podrazumijevamo
niz znakova tj. string, niz brojeva tj. cjelobrojnih vrijednosti
(integer), ili neku drugu vrstu nizova o kojima će riječ biti kasnije.
Ukratko, nizovi kroz koje prolazi for - in petlja su raspoređeni skup
elemenata.
Sintaksa for - in petlje:
for element in niz:
# izvrši ovaj blok koda
Ovdje element predstavlja varijablu koja sadrži trenutni element kroz
koji petlja prolazi, dok niz predstavlja Python objekt koji vraća
nizove. Varijablu koja predstavlja trenutni element možemo imenovati
kako želimo, a pravila imenovanja su ista kao i kod običnih varijabli.
Krenimo sa jednostavnim primjerom for - in petlje, koji napišimo u
datoteci primjer11.py. U ovom primjeru pokazat ćemo kako se u Python
programskom jeziku radi petlja koja ponavlja izvršavanje bloka naredbi
određeni broj puta.
for i in range(1, 10):
print i
raw_input()
Dakle, napravili smo sljedeće:
1. Pomoću for - in petlje, naredili smo programu da na ekranu ispiše
brojeve od 1 do 10. Za to smo upotrijebili ugrađenu Python funkciju
range, koja generira niz brojeva u zadanom opsegu (u ovom slućaju
brojeve od 1 do 10).
2. Unutar bloka naredbi for - in petlje, naredili smo programu da ispiše
trenutni element kroz koji petlja prolazi, dakle u ovom slućaju trenutni
broj u nizu kroz koji petlja prolazi, a koji je pohranjen u varijabli
elementa i.
For - in petlja se izvršava toliko dugo dok ne prođe kroz sve elemente u
zadanom nizu, a njeno izvršavanje može se također prekinuti naredbom
break, kao i preskočiti pojedini element kad je to potrebno naredbom
continue.
Slijedi još jedan primjer, koji napišimo u datoteci primjer12.py.
ime = "Perica"
for slovo in ime:
print slovo
raw_input()
Ovaj primjer prolazi kroz cijeli zadani string, te ispisuje svako slovo
stringa posebno. No, budući da su for - in petlje najkorištenije kod
podatkovnih nizova, više primjera for petlji vidjet ćemo u sljedećem
poglavlju.

Reply all
Reply to author
Forward
0 new messages