Još kraći programi¶
Podsetimo se poslednjeg programa prethodne lekcije. Trebalo je da Karel uzme po pet loptica sa svakog od tri naredna polja.
Program koji rešava zadatak mogao je da izgleda ovako:
Vidimo da se u ovom programu sledeća grupa naredbi ponavlja tri puta:
To nam omogućava da dodatno skratimo program. Pri objašnjavanju for naredbe smo pomenuli da u telu petlje mogu da se nađu druge petlje. Sada imamo priliku da to iskoristimo.
Ugnežđene for naredbe¶
Kada se u telu jedne petlje nalazi druga petlja, onda prvu petlju zovemo spoljna petlja, a drugu unutrašnja. Zajedno ih zovemo ugnežđene ili umetnute petlje. U sledećem primeru ćemo videti kako se pišu ugnežđene for naredbe.
Pokupi tri puta po 5 loptica¶
Ispred Karela su tri polja, a na njima po 5 loptica. Karel treba da pokupi sve loptice.
Zadatak je ponovljen, ali sada ćemo ga rešiti na drugačiji način.
Ranije smo pomenuli da je sa i
u dosadašnjim primerima for naredbe imenovano mesto na kome brojimo dokle smo stigli sa ponavljanjem. Sada prvi put treba da u toku brojanja jedne stvari (polja) prebrojimo drugu stvar (loptice). To znači da će na primer biti potrebno da znamo kada smo na trećem polju pri drugoj loptici. Zbog toga ne možemo da koristimo isto ime za oba brojača, pa smo umesto dosadašnjeg i
uveli nova imena za brojače. U programu koji sledi brojač polja smo nazvali i_polje
, a za brojač loptica i_loptica
.
U datom rešenju naredba uzmi() je dodatno uvučena, jer se ona izvršava po jednom za svako i_loptica
iz opsega [0, 1, 2, 3, 4]. Osim toga, cela naredba for i_loptica in range(5):
se (uz naredbu napred(), zajedno sa svojim telom) ponavlja 3 puta, po jednom za svako i_polje
iz opsega [0, 1, 2]. To znači da se naredba uzmi() izvršava ukupno 3 x 5 = 15 puta (na svakom od tri polja po pet puta).
Kod umetnutih petlji je potrebno dodatno paziti na pravilno uvlačenje naredbi, jer ono postaje nešto malo komplikovanije. Pogrešno uvlačenje pojedinih naredbi može da dovede do pogrešnog rezultata, ili do programa koji uopšte ne radi.
Zadaci za vežbu¶
Preskok¶
Ispred Karela je na svakom trećem polju po jedna loptica, a on treba da ih obe pokupi.
Karel treba da ponovi 2 puta grupu naredbi: „tri puta idi napred, a zatim uzmi lopticu”.
Na svakom trećem po 5¶
Ispred Karela je na svakom trećem polju po pet loptica, a on treba da ih sve pokupi.
Zadatak je sličan prethodnom, treba samo ponavljati uzimanje loptice. Pazite da petlja za uzimanje loptica bude ispod petlje za kretanje napred, a ne u njoj.
U krug¶
Karel ponovo treba da pokupi sve loptice.
Spoljna petlja treba da se izvrši 3 puta, a u njoj Karel treba da uradi sledeće:
Dva puta ponovi korake: „idi napred” i „uzmi lopticu”
Okreni se levo
Uputstvo smo još malo približili programu, probajte da ga pretvorite u naredbe. Ako ipak želite da vidite program, kliknite na dugme „Rešenje”.
U krug po 3 loptice¶
Napišite program pomoću koga će Karel da pokupi svih 18 loptica.
Razlika u odnosu na prethodni zadatak je u tome što sada uzimanje loptica treba da bude u dodatnoj petlji. To znači da ćemo imati tri ugnežđene petlje: jednu koja broji strane lavirinta, drugu koja broji polja duž jedne strane, i treću koja broji loptice na polju.
Ponovo dajemo uputstvo koje malo više liči na program (ovaj put bez rešenja).