Petlje

U ovom odeljku upoznaćete se sa konceptom petlji. Kako nas samo ime navodi petlje predstavljaju određeni deo koda koji se vrti u krug, odnosno ponavlja određeni broj puta. Pred ulazak u petlju postavlja se uslov koji je logičkog (boolean) tipa. Dokle god uslov ima vrednost True ponavlja se deo koda unutar te petlje. U programskom jeziku Pajton postoje dve vrste petlji, while i for petlje. Počećemo sa prvom od njih.


While

Slobodni prevod engleske reči while mogao bi u programiranju da se interpretira kao: “Radi naredni kod dok je ispunjen uslov…”. Pogledajmo odmah jedan primer korišćenja while petlje

  
x = 1
while x<10: #Uslov petlje
    print (x),
    x=x+1 	#Povećavamo broj za jedan
            
Kopiraj

Kao što možemo primetiti,izlaz ovog jednostavnog primera je >> 1 2 3 4 5 6 7 8 9. U svakom krugu petlje, ponavlja se kod unutar tela. Prvo se ispisuje broj nakon čega se x uvećava za 1, sve dok se ne dostigne vrednost 10. Za detaljnije objašnjenje o iteracijama možete pogledati dodatak.

Šta bi se desilo kada se u telu petlje sa istim uslovom x ne bi menjalo? Uslov nikada ne bi bio False i petlja bi se vrtela u beskonačno. Beskonačne petlje su obično nešto što želimo da izbegnemo, stoga treba proveravati da li uslov ikada postaje False.

Dok su kod starijih računara beskonačne petlje bile problematične, danas se program najčešće može prekinuti zatvaranjem prozora aplikacije. Kasnije ćemo naučiti kako se petlja može prekinuti iako je uslov još uvek True, no pre toga pogledajmo jedan mali primer koda sa beskonačnom while petljom.

  
while True:
    pass
            

Ova minimalistička petlja je neki vid prevare, jer smo uslov zamenili fiksnom vrednošću True, a telo izrazom pass koji je samo oznaka za prazan blok, bez naredbi.

Zadatak : Napravite program koji ispisuje sve prirodne brojeve manje od 100 koji su deljivi sa 5. Za pomoć pogledati dodatak.


Break

Break se koristi u onim slučajevima kada nam je neophodno da prekinemo petlju iako njen uslov još uvek nije bio False.

Pretpostavimo da želimo da napravimo program koji omogućava nastavniku da unosi ocene učenika i da ih zapisuje u listu. Na početku prvo pitamo nastavnika koliko ocena se unosi, a zatim unutar petlje proveravamo da li je svaki uneti broj u opsegu od 1 do 5. Ukoliko nije, prekidamo unos.

  
broj_ocena = int(input("Unesite broj ocena"))
niz = []     #Inicijalizacija liste
x=1 
while x<=broj_ocena: 
    ocena= int(input("Unesite ocenu: "))

    x=x+1 

    if ocena<1 or ocena>5:
        print ("Dozvoljeno je unositi samo ocene od 1 do 5, prekid petlje")
        break
    niz.append(ocena) #Dodavanje novog elementa listi

if(len(niz)==broj_ocena): #Proveravamo da li su unete sve ocene
    print ("unete su ocene: "+str(niz))


            
Kopiraj

Ovoga puta while petlja nam omogućava fiksan unos od broj_ocena brojeva, ali može da se završi već u prvoj iteraciji ukoliko je unet broj izvan traženog opsega. Dakle, break komanda funkcioniše baš onako kako bismo očekivali, ona „slama“ while cikluse pre njihovog prirodnog kraja.

Dodatno, ukoliko je došlo do izvršenja break naredbe, naša promenljiva niz nije očekivane dužine od broj_ocena. Ovu činjenicu koristimo kako bismo ispisali niz jedino ukoliko sadrži sve ocene.

Da li postoji bolji način da se proveri da li je while grana stigla do svog „prirodnog“ kraja? Odgovor je potvrdan, i ovo poboljšanje će biti razrađeno u sledećoj glavi.