x
Učitavanje

2.5 Petlja s korakom

Što ću naučiti?
Europska unija - Zajedno do fondova EU
Prethodna jedinica Sljedeća jedinica
Sadržaj jedinice icon sadržaj jedinice

Na početku...

Antonio i zebra
Antonio preskače oznaku na pješačkom prijelazu, tj. prugu na zebri.

Antonio je skejter, a čak i kada nema skejt uz sebe, skejtanje mu je uvijek na pameti. Kada hodajući ide u školu, zamišlja da vozi skejt te na pješačkom prijelazu, ili kako on voli reći "na zebri", preskače svaku drugu zebrinu prugu. Antonio osim skejta ima i drugu strast, a to je programiranje. Odlučio je da će napraviti program koji će brojiti koliko je pruga preskočio na putu do škole.

Za rješenje zadatka iz primjera koji smo upravo naveli može se upotrebljavati petlja s korakom.

Tri oblika for petlje u Pythonu

Petlja
Iz ptičje je perspektive prikazan kružni tok koji predstavlja petlju.

Petlju s korakom najčešće realiziramo petljom s unaprijed zadanim brojem ponavljanja, koja se još naziva for petljom. U Pythonu for petlju možemo zapisati na tri načina. Pogledajmo videozapis koji pobliže objašnjava sva tri načina zapisa for petlje u Pythonu:

Primjer 1.

Primjeri koda u Pythonu, prema prethodnom videozapisu, za sva tri načina zapisa for petlje:

for i in range(n):

print(i) 

for i in range(m, n):

print(i) 

for i in range(m, n, k):

print(i)

Kutak za znatiželjne

Naredba range() unutar for petlje jezikom programera naziva se funkcija. Svaka naredba u Pythonu koja stoji samostalno, a nakon ključne riječi sadrži oble zagrade jest funkcija. Sljedeća poveznica sadrži objašnjenje funkcija na engleskom jeziku. Prouči što su funkcije u programiranju te što su parametri pri pozivu funkcija.

Usporedba petlje s korakom i klasične petlje

Prije negoli se uhvatimo u koštac s Antonijevim problemom, napravit ćemo program koji ispisuje sve parne brojeve od dva do deset.

Za usporedbu, napisat ćemo dva programa:

  1. Program koji koristi klasičnu petlju.
  2. Program koji koristi petlju s korakom.

Koji će program računalo izvesti brže?

Rješenje uz korištenje klasične for petlje bez koraka.

null
null

Program upotrebljava klasičnu for petlju pri čemu kontrolna varijabla i poprima sve vrijednosti od 2 do 10 , a svakim izvršavanjem petlje provjerava se je li ostatak pri dijeljenju kontrolne varijable i s dva jednak nuli kako bi se utvrdila njezina parnost.

Rješenje uz korištenje for petlje s korakom.

null

Program upotrebljava petlju s korakom pri čemu kontrolna varijabla i poprima svaku drugu vrijednost od 2 do 10 .

Računalo će mnogo brže izvesti program koji upotrebljava petlju s korakom zbog dvije stvari:

  • program koji upotrebljava petlju bez koraka izvršit će petlju i za one brojeve koji nisu parni, dok će program koji upotrebljava petlju s korakom izvršiti petlju samo za parne brojeve, dakle upola manje puta
  • program koji upotrebljava petlju bez koraka pri svakom ponavljanju petlje mora provjeriti je li broj paran te ga to dodatno usporava.

Rješenje Antonijeva problema

Korisnik unosi n, broj pješačkih prijelaza te broj oznaka (pruge) za svaki pješački prijelaz. Program ispisuje koliko je pruga Antonio preskočio.

null

Program upotrebljava dvije for petlje, jednu unutar druge. Prva ili vanjska for petlja ponavlja se n puta, odnosno onoliko puta koliko ima pješačkih prijelaza koje je Antonio prešao. Druga ili unutarnja for petlja ponavlja se upola manje puta nego što ima pruga na pješačkom prijelazu na kojem se trenutačno nalazi Antonio. U unutarnjoj for petlji kontrolna varijabla j započinje s vrijednosti jedan, završava s brojem pruga, a preskače svaki drugi broj (korak = 2), odnosno svaku drugu prugu.

Također, program upotrebljava akumulacijsku varijablu broj_preskočenih_pruga u koju pohranjuje koliko je Antonio pruga preskočio.

Budući da for petlje u Pythonu započinju s vrijednosti 0, petlju s korakom moramo postaviti na početnu vrijednost 1, jer Antonio preskače svaku drugu prugu.

Kutak za znatiželjne

Možemo li riješiti ovaj problem bez upotrebe petlje s korakom? Nije li dovoljno broj pruga na svakom pješačkom prijelazu cjelobrojno podijeliti s dva?
Pokušaj na prethodnom primjeru umjesto unutarnje for petlje upisati broj_preskocenih_pruga += pruge // 2.

Cjelobrojnim dijeljenjem broja pruga prebrojit ćemo polovicu pruga.

micro:bit i petlja s korakom

Ponovi prethodnu jedinicu te napravi program za micro:bit koji će koristiti Antoniju za igranje skrivača. Ispisuje se svaki peti broj od pet do sto.

Pomoć:

Prenesi blok count with u dio prozora za slaganje blokova naredbi te podesi vrijednosti tako da piše from 5 to 100 by 5.

Prenesi blok print u dio prozora za slaganje blokova naredbi te ga ubaci kraj naredbe do.

Prenesi blok i u dio prozora za slaganje blokova naredbi te ga ubaci kraj naredbe print.

null

Zadaci

Napravi program koji radi suprotno od prethodnog zadatka. Ispisuje se svaki peti broj od 100 do 1 .

Pomoć:

Početna vrijednost mora biti veća od završne!

Korak je negativan!

Uključuje li se donja granica?

Postupak:

for i in range(100, 0, -5):

    print(i)

Dovrši program koji unosi godinu u budućnosti te ispisuje sve godine u kojima će se održati svjetsko nogometno prvenstvo, od godine posljednjeg prvenstva do unesene godine.

Pomoć:

Koje je godine bilo posljednje svjetsko nogometno prvenstvo? To je početna vrijednost kontrolne varijable i.

Svakih se koliko godina održava svjetsko nogometno prvenstvo? Toliki je korak.

Do koje se godine izvršava petlja?

Postupak:

godina = int(input('Unesi godinu u budućnosti: '))

for i in range(2018, godina, 4):

    print(i)

...i na kraju

Ollie - skok skejtom
Antonio skejtom preskače dijelove koda zapisane kredom na podu.

Petlja s korakom nema široku primjenu, ali programeru uvelike olakšava rješenje pojedinih specifičnih zadataka u kojima se može upotrebljavati. U tim situacijama petlja s korakom optimizira izvođenje programa, a "preskakanjem" suvišnog programskog koda čini ga ljepšim, tj. čitljivijim.

Povratak na vrh