Enumerate

Šta ako želimo da se zajedno sa vrednostima u listi, stringu ili rečniku učitavaju i indeksi odnosno redni brojevi tih elemenata u listi. Pajton ima funkciju enumerate koja nam ovo obezbeđuje. Umesto jedne promenljive za upis for petlje imamo dve razdvojene zarezom. U prvoj se učitava trenutni indeks a u drugoj vrednost koja odgovara tom indeksu. Pogledajmo primer koji ilustruje ovu funkciju:

  
for i,slovo in enumerate("Na Drini cuprija"):
    print (str(i)+ " "+slovo)
            
Kopiraj

Pogledajmo sada još jedan primer programa koji implementira korišćenje enumerate. Korisnik unosi redom koja su mu najomiljenija jela, a zatim se ta jela ispisuju zajedno sa gradacijom.

  
jelo = [] 
while(True): #Beskonacna petlja, prekida se samo ako se pokrene break
    rec=raw_input("Unesite jelo ili 'kraj liste' za prekid programa")
    if rec=="kraj liste" :
        break
    jelo.append(rec) #dodajemo rec u listu ukoliko nije 'kraj liste'
    
for i,v in enumerate(jelo):
    """Da bismo dobili zeljeni ispis moramo da dodamo 1 na enumerisane 
brojevi kao i tacku iza broja da bi bio redni"""
    print "Tvoj "+str(i+1)+". "+"izbor je " + v
            
Kopiraj

U ovom slučaju beskonačna petlja nam je olakšala implementaciju. Da smo proveravali u uslovu while petlje da li je rec!=“kraj liste“ onda bismo na listu jelo dodali nepotrebno tu reč, pa bi to iziskivalo dodatnu if naredbu. Tada bismo, međutim imali dve iste provere, što je manje efikasno i zbunjujuće.

Na početku ovog odeljka pomenuto je da je način na koji for petlja uzima ključeve iz rečnika nepredvidiv. Međutim sada smo pomoću enumerate funkcije u mogućnosti da za konkretan rečnik „zapamtimo„ redosled kojim for petlja uzima ključeve. Pa je sada redosled, iako još uvek nepredvidiv, izračunljiv.



Ugnježdene petlje

Jedna ili više petlji mogu da se nalaze ne samo u funkcijama već i u drugim petljama, i ovaj pojam nazivamo ugnježdenim petljama. Pogledajmo odmah jedan primer ugnježdene petlje koja ispisuje pravougaonik ispunjen zvezdicama na izlaz.

  
for i in range(6): 	# petlja koja ispisuje redove
    for j in range(6): # ispisuje zvezdice u jednom redu
        print ('*'),
    print ("")# kraj reda, još uvek unutar spoljnje petlje
            
Kopiraj

Pri analiziranju ugnježdenih petlji često je lakše da se krene od unutrašnje petlje. U našem slučaju unutrašnja petlja ispisuje u istom redu 6 zvezdica, dok spoljašnja petlja ispisuje 6 takvih redova. Postoji i elegantnije rešenje sa istim izlazom.

  
for i in range(6):    
    print '* '*6
            
Kopiraj

Zadatak: Napisati program koji na izlaz ispisuje pravougli trougao sa osnovom od 5 zvezdica, koristeći oba prethodna načina. Za pomoć pogledati dodatak.


levo desno

Uputstvo

Neke od programa nećete moći da pokrenete na našoj konzoli, zato Vam predlažemo da sa zvaničnog sajta www.python.org preuzmete portabilnu verziju. Instalacija je vrlo jednostavna. Mi Vam predažemo da odaberete verziju 3.3.5 koju smo i mi koristili. Tekstualni editor u kome možete pisati svoje programe se pokreće preko programa koji se zove IDLE i automatski se instalira sa celim paketom. Novi program započinjete klikom na padajući meni "FILE" >> "NEW FILE". Možete ga pokrenuti pritiskom na dugme F5 na tastaturi.
Konzola koja se nalazi na sajtu omogućava rad sa većinom prezentovanog materijala, ali je naglašeno kada je potrebno preći na instaliranu konzolu.

;