Gnezdenje zank

V telesu zanke se lahko pojavijo poljubni stavki, tudi druge zanke. Temu pravimo, da je ena zanka (notranja) »vgnezdena« v drugi (zunanji).

Primer

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.

Izvedi Počisti



					

Predčasni izhod iz zanke

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.

Izvedi Počisti