15 Tsükkel

Selles peatükis tutvume tsükliga, mis on struktuur tegevuste korduvaks teostamiseks. Uurime tsükli osasid (tsüklimuutujat ning tsükli sisu) ja kirjutame esimesed tsükleid sisaldavad programmid. Vaatame ka, kuidas katkestada käivitatud programmi töö ning kuidas vaadelda muutujate olekut programmi erinevates olekutes.

KORDUV TEGEVUS

Tihtipeale esineb programmi kirjutades olukordi, kus mingisugust tegevust on tarvis korrata. Näiteks kui tahame, et programm väljastaks ekraanile viis korda üksteise alla “Tere!”, siis kõlbaks selline programm:

Näitekood. Viis “Tere!”

print("Tere!")
print("Tere!")
print("Tere!")
print("Tere!")
print("Tere!")

Kui me tahame väljastada “Tere” sada korda, peaksime ettevaatlikult loendades lisama veel 95 rida. Miljoni kordusega muutuks olukord lausa naeruväärseks. Tegelikult on programmeerimiskeeltes olemas võimalused korduste lühemaks esituseks. Neist levinuim on while-tsükkel.

WHILE-TSÜKKEL

while-tsükliks nimetame struktuuri, mis koosneb jätkamistingimusest ning tsükli sisust.  Kui jätkamistingimus on täidetud, siis täidetakse tsükli sisu, seejärel tullakse tagasi jätkamistingimuse kontrolli juurde. Nii täidetakse tsükli sisu mingi arv kordi, olenevalt jätkamistingimuse kehtivusest.

Joonis 1. Eelkontrolliga while-tsükli plokkskeem

Kui jätkamistingimust kontrollitakse enne tsükli sisu esmakordset täitmist, nimetame seda eelkontrolliga tsükliks. Olemas on ka järelkontrolliga tsüklid, kuid siin (ning paljudes teistes materjalides) peetakse tsükli puhul vaikimisi silmas eelkontrolliga tsüklit.

while 3 < 5:       # tsükli algus ning jätkamistingimus
   print("Tere!")   # tsükli sisu

Jätkamistingimus

Tsükli jätkamistingimus (nagu ka if-lause tingimus) on tõeväärtustüüpi. Kui tingimus on täidetud (tingimusavaldise väärtus on tõene), siis täidetakse tsükli sisu. Kui tingimus ei ole täidetud, siis tsükkel lõpeb ning tsükli sisu ei täideta.

Tavaliselt on tingimus esitatud võrdlemisena (näiteks i < 5), aga selleks võib olla ka puhas tõeväärtus True või False. Viimane on üsna tarbetu: nii karmi tingimusega ei täideta tsükli sisu kunagi. Jätkamistingimuse True puhul on tegemist lõpmatu tsükliga, sest tingimusavaldis on alati tõene. Siis täidetakse tsükli sisu piiramatu arv kordi ning programm ei lõpeta oma tööd kunagi. Lõpmatut tsüklit kasutatakse ka sihipäraselt, kuid sellisel juhul on tsüklist väljumine teisiti korraldatud.

Tsükli sisu

Tsükli sisu on tegevus, mida soovime korrata. “Tere!” trükkimise ülesandes on selleks rida print("Tere!"). Tsükli sisu võib olla kui tahes keeruline. Seal võib sisalduda erinevaid käske ja ka teisi tsükleid.

Enesekontroll (1 küsimus)

PROGRAMMI KATKESTAMINE

Kui me käivitame Pythonis meelega või kogemata sellise programmi, mis oma tööd ei lõpeta, siis saame Thonnys programmi töö katkestada Stop-märgiga nupu või klahvikombinatsiooni Ctrl + F2 abil. (Keskkonnas IDLE katkestatakse programmi töö Ctrl + C abil.)

KORDUV TEGEVUS WHILE-TSÜKLIT KASUTADES

Lähme tagasi algse ülesande juurde. Me tahame tsükli abil trükkida ekraanile “Tere!” viis korda. Selleks peab tsükli sisus olema midagi, mis muutub selliselt, et pärast viiendat korda tsükli sisu enam ei täideta. Lahendus on loendada, mitu korda on tsükli sisu käivitatud. Kokkuleppeliselt on sellise loendaja (”tsüklimuutuja”) nimeks i. Loome muutuja nimega i. Olgu i väärtus esialgu 0: i = 0. Igal tsükli sammul liidame väärtusele 1. Seda saame teha avaldisega

i = i + 1

Selle rea jooksutamisel kasvab i väärtus ühe võrra. Pane tähele, et programmeerides on võrdusmärgil erinev tähendus kui matemaatikas. Siin tähistab võrdusmärk väärtuse omistamist võrdusmärgist vasakul asuvale muutujale. Võrdusmärgi parem pool on avaldis, mille tulemus muutujale omistatakse. Hetkel arvutatakse esmalt avaldis i + 1 ning saadud tulemus määratakse muutuja i uueks väärtuseks.

Teiseks peame määrama jätkamistingimuse. Selleks sobib i < 5. Kui i on esialgu 0 ja igal sammul liidetakse 1, siis just 5 sammuga jõuame olukorda, kus tingimus i < 5 ei ole enam täidetud. Paneme nüüd programmi kokku. Endiselt on olulisel kohal koolon ja taane:

Näiteprogramm. Tsükliga “Tere!”

i = 0
while i < 5:
   print("Tere!")
   i = i + 1

 

Joonis 2. “Tere!”-programmi plokkskeem.

Analüüsime programmi tööd sammude kaupa:

  • Jätkamistingimus (i < 5) on täidetud, kui esimest korda tsükli juurde jõuame, sest 0 < 5.
  • Pärast esmakordset sisu täitmist on i väärtus 1 ja jätkamistingimus ikkagi täidetud, sest 1 < 5.
  • Pärast teist korda on i väärtus 2 ja ikka saame jätkata, sest 2 < 5.
  • Ja siis i on 3 ja ikka 3 < 5.
  • Ja siis i on 4 ja ikka 4 < 5.
  • Ja siis ion 5 ja kontrollime, kas i < 5? Kas 5 < 5? Ei ole, sest 5 ja 5 on võrdsed, seega võrratus 5 < 5 ei kehti ja jätkamistingimus on väär.

VÄÄRTUSE MUUTMISE LÜHIVARIANDID

Kuna muutuja väärtuse muutmist eelmise väärtuse alusel tuleb sagedasti ette, siis on selleks ka lühemad variandid olemas. Näiteks a = a + 3 asemel võime kirjutada a += 3. Samasugused variandid on ka lahutamise (-=), korrutamise (*=), jagamise (/=), täisarvulise jagamise (//=), jäägi leidmise (%=) ja astendamise (**=) jaoks.

MUUTUJA VAATLEMINE PRINT ABIL

Lisame tsükli kehasse ühe rea, mis i väärtuse ekraanile tooks, et seda paremini jälgida.

Näiteprogramm. Muutuja vaatlemine print abil

i = 0
while i < 5:
   print("Tere!")
   i = i + 1
   print(i)

Käivita programm ja näed, kuidas i väärtused muutuvad.

MUUTUJATE VAATLEMINE THONNYS

Kui me programmi alles teeme, siis on meil kasulik teada, mis väärtus on muutujail programmi mingites kohtades. Thonnys on muutuja väärtuste jälgimine sisse ehitatud ja seda saab nähtavale tuua View-menüüst valikuga Variables.
Kuna programm töötab kiiresti, siis tavaliselt käivitades jäävad näha ainult programmi töö lõpus kehtivad väärtused. Selleks, et samm-sammult programmi tööst ülevaadet saada, tuleb programm käivitada silumisrežiimis (debug mode) – putukaga nupuga või Run-menüüst Debug current script. Seejärel saab erineva ulatusega samme teha vastavate nuppude või Run-menüü valikute abil.

Silumisrežiim Thonnys

Kokkuvõttev video: http://www.uttv.ee/naita?id=23914

Enesekontroll (5 küsimust)

Palun kommenteerige seda materjali Google’i küsimustikus.

Litsents

Icon for the Creative Commons Attribution 4.0 International License

Programmeerimine on loodud Eno Tõnisson, Tauno Palts, Merilin Säde, Kaarel Tõnisson jt poolt Creative Commons Attribution 4.0 International License litsentsi alusel, kui pole teisiti märgitud.

Jaga seda raamatut