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.
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
Analüüsime programmi tööd sammude kaupa:
- Jätkamistingimus (
i < 5
) on täidetud, kui esimest korda tsükli juurde jõuame, sest0 < 5
. - Pärast esmakordset sisu täitmist on
i
väärtus 1 ja jätkamistingimus ikkagi täidetud, sest1 < 5
. - Pärast teist korda on
i
väärtus 2 ja ikka saame jätkata, sest2 < 5
. - Ja siis
i
on 3 ja ikka3 < 5
. - Ja siis
i
on 4 ja ikka4 < 5
. - Ja siis
i
on 5 ja kontrollime, kasi < 5
? Kas5 < 5
? Ei ole, sest 5 ja 5 on võrdsed, seega võrratus5 < 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.
Kokkuvõttev video: http://www.uttv.ee/naita?id=23914
Enesekontroll (5 küsimust)
Palun kommenteerige seda materjali Google’i küsimustikus.