Ciklo sakiniai Spausdinti
( 4 Votes )
Parašė Vidmantas Šarkys   

Ciklas For

Veiksmų kartojimui realizuoti Python programavimo kalboje galime naudotis
dviejų tipų ciklais: For ir While

Ciklas For savo sintakse kiek skiriasi nuo savo atitikmenų C/C++ bei FPS
programavimo kalbose ir kur kas labiau primena foreach konstrukciją PHP kalboje.
For ciklas baziniu atveju aprašomas taip:

for kintamasis in struktūra:
      vykdomi_sakiniai

Pavyzdyje struktūrą sudaro keletas elementų - tai gali būti skaitinės, tekstinės reikšmės,
 tam tikrais atvejais net objektai ar failai. Kintamajam paeiliui priskiriama vis kita
struktūros elemento reikšmė bei atliekami nurodyti veiksmai su ja - pavyzdžiui,
kintamojo reikšmės spausdinimas. Svarbu paminėti, kad, kitaip nei minėtose C/C++
ar FPS kalbose, For sakinyje nėra deklaratyviai nurodomos ciklo kintamojo pradžios ar
pabaigos reikšmės - ciklas vyksta tol, kol pereinami visi struktūros elementai (nebent
nutrauktume ciklą kitais būdais, pavyzdžiui, break sakiniu).

Vis dėlto, kartais būtina tiksliai nurodyti, kiek kartų vyks For ciklas. Tam puikiai
pasitarnauja standartinė Python funkcija range(). Panagrinėkime paprastą pavyzdį:

for i in range(1, 10):
      print(i)

Programa šiuo atveju išspausdins skaičius nuo 1 iki 10, neįskaitant 10. Pirmasis
skaičius, šiuo atveju 1, nurodo pradinę ciklo kintamojo i reikšmę.
Šios reikšmės nurodyti nebūtina; tokiu atveju ciklas vyktų nuo 0 iki nurodytos
galinės reikšmės.


Ciklas While

Paprastesne sintakse pasižymi kitas Python (kaip ir daugybėje kitų kalbų)
palaikomas ciklas - While. Pažvelkime į jo aprašymą:

while ( sąlyga ):
      vykdomi_sakiniai

Kaip matome, šio ciklo sintaksė žymiai elementaresnė. Ją galima nusakyti
tokiu sakiniu: "Kol sąlyga tenkinama, vykdome šiuos sakinius...".
Sąlygos vietoje gali būti tam tikras lyginimo reiškinys, tokių reiškinių kombinacija
 arba paprastas loginio tipo (bool) kintamasis. Kaip jau minėjome, ciklas vykdomas
tol, kol sąlygos reikšmė lygi True. Verta pastebėti, kad šio tipo cikle  gan nesudėtinga
patekti į vadinamąjį "amžiną ciklą", kuomet nėra pasiekiama ciklo  stabdymo sąlyga.
Būkime atidūs. 

Panagrinėkime while ciklo pavyzdį:

a = 1
b = 15
while (a!=15 and b!=1):
      print(a+b)
      a = a+1
      b = b-1

Programa šiuo atveju 14 kartų išspausdins skaičių 16 - keičiasi kintamųjų a ir b
reikšmės, tačiau jų suma lieka ta pati. Ciklas vyksta tol, kol tenkinamos abi sąlygos,
susietos konjunkciją reprezentuojančiu operatoriumi and. Nusikopijavę ir išbandę kodą
galime jį paredaguoti - ištrinti paskutines dvi eilutes. Pamatytumėme, jog ciklas niekada
nesustoja, mat nėra pasiekiamos tokios kintamųjų reikšmės, kurios leistų sąlygai įgyti
False reikšmę.


Ciklo valdymo sakiniai

Pasitaiko ir tokių situacijų, kai klasikinis ciklo vyksmas mūsų netenkina - norime jį
nutraukti iškilus tam tikrai problemai arba sudėtingai sąlygai, o gal norime jį tik "pristabdyti"
vienai iteracijai.
Tokiu atveju galime pasinaudoti Python ciklo valdymo sakiniais break, continue ir pass.

Sakinys break paprasčiausiai nutraukia ciklo vykdymą. Jeigu ciklo pabaigos sąlyga nėra
nurodama pakankamai tiksliai arba nėra galimybių ją taip nurodyti, galima panaudoti
break sakinį ciklo viduje: 

i = 1
while (True):
      if (i == 5):
            break
      print(i)
      i = i+1

Ciklas, nepanaudojus sakinio break, vyktų amžinybę - galite tuo įsitikinti patys. Gi šiuo
atveju programa išspausdins skaičius nuo 1 iki 4, o kintamajam i pasiekus reikšmę
5 - ciklas bus nutrauktas.

Sakinys continue, skirtingai nuo break, nenutraukia ciklo - tiesiog praleidžia vieną
jo žingsnį:

i = 0
while (True):
      i = i+1
      if (i == 5):
            continue
      if (i == 10):
            break
      print(i)

Ciklas vykdomas panašiai kaip ir ankstesniame pavyzdyje - šįkart spausdinami skaičiai
nuo 1 iki 9. Tiesa - ciklo kintamajam i įgijus reikšmę 5, tolesni sakiniai nėra vykdomi,
t.y. ir skaičius 5 nėra išspausdinamas. Tiesa, ciklas vyksta toliau - nuo
sekančios iteracijos.

Dar kitokia specifika pasižymi ciklo valdymo sakinys pass:

i = 0
while (True):
      i = i+1
      if (i == 5):
            pass
      if (i == 10):
            break
      print(i)

Programa vyksta labai panašiai kaip ir praeitame pavyzdyje - spausdinamos reikšmės
nuo 1 iki 9. Tik šį kartą išspausdinami visi skaičiai, net ir 5.
Skirtingai nuo continue, sakinys pass nenutraukia dabartinės iteracijos vykdymo -
jis tiesiog leidžia toliau vykdyti kodą. Iš esmės sakinys pass neturi jokios praktinės
paskirties; kartais gali būti naudojamas kodo skaitomumui pagerinti.