V telesu zanke se lahko pojavijo poljubni stavki, tudi druge zanke. Temu pravimo, da je ena zanka (notranja) »vgnezdena« v drugi (zunanji).
Napiši program, ki izpiše praštevila med 1 in 100. (Naravno število n je praštevilo, če je večje od 1 in ni deljivo z nobenim drugim naravnim številom razen z 1 in s samim sabo.)
Kako bi se lotili te naloge? Obdelati moramo števila od 1 do 100, torej si je koristno pomagati z zanko. Število 1 lahko preskočimo, saj že po definiciji vemo, da ni praštevilo. Zametek našega programa bi bil torej lahko takšen:
for n in range(2, 101): # če je n praštevilo, ga izpiši
Naloga pravi, da je n praštevilo, če je deljivo le z 1 in samim sabo, ne pa s katerim od števil od 2 do n-1. Torej je koristno, če gremo v zanki po vseh teh številih in za vsako od njih preverimo, če deli n. Če najdemo takega delitelja, potem vemo, da n ni praštevilo, in ga ne smemo izpisati. To si lahko zapomnimo v spremenljivki, recimo ji jePrastevilo
.
Včasih si želimo zanko predčasno prekiniti. V našem programu za izpis praštevil smo imeli notranjo zanko, ki za vsa števila od 2 do n-1 preveri, če delijo n:
jePrastevilo = True for d in range(2, n): if n % d == 0: jePrastevilo = False
Čim pri nekem d-ju opazimo, da deli n, postavimo jePrastevilo
na False
in ta spremenljivka odtlej potem tudi ostane False
. Tako je tudi prav, saj zdaj vemo, da je n sestavljeno število, ne pa praštevilo. Toda potem je odveč, da z zanko nadaljujemo in pregledujemo še vse preostale d-je. Bolje bi bilo zanko takoj prekiniti in tako prihraniti nekaj časa.
V takih primerih pride prav stavek break
, ki izvajanje zanke, v kateri ga uporabimo, nemudoma prekine (računalnik niti ne dokonča trenutne iteracije zanke). Če imamo več gnezdenih zank, prekine break
le skrajno notranjo zanko, v kateri se nahaja. Ko opazimo, da d deli n, bi se torej izvedel stavek break
, ki prekine notranjo zanko (po d). Izvajanje se nadaljuje za to zanko, s stavkom if jePrastevilo