{"id":34,"date":"2018-12-03T13:41:05","date_gmt":"2018-12-03T13:41:05","guid":{"rendered":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/?post_type=chapter&#038;p=34"},"modified":"2019-04-08T15:51:06","modified_gmt":"2019-04-08T15:51:06","slug":"3-1-tsukkel","status":"publish","type":"chapter","link":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/chapter\/3-1-tsukkel\/","title":{"raw":"Ts\u00fckkel","rendered":"Ts\u00fckkel"},"content":{"raw":"Selles peat\u00fckis tutvume ts\u00fckliga, mis on struktuur tegevuste korduvaks teostamiseks. Uurime ts\u00fckli osasid (ts\u00fcklimuutujat ning ts\u00fckli sisu) ja kirjutame esimesed ts\u00fckleid sisaldavad programmid. Vaatame ka, kuidas katkestada k\u00e4ivitatud programmi t\u00f6\u00f6 ning kuidas vaadelda muutujate olekut programmi erinevates olekutes.\r\n<h2>KORDUV TEGEVUS<\/h2>\r\nTihtipeale esineb programmi kirjutades olukordi, kus mingisugust tegevust on tarvis korrata. N\u00e4iteks kui tahame, et programm v\u00e4ljastaks ekraanile viis korda \u00fcksteise alla \"Tere!\", siis k\u00f5lbaks selline programm:<code>\r\n<\/code>\r\n\r\n<strong>N\u00e4itekood. Viis \"Tere!\"<\/strong>\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">print(\"Tere!\")\r\nprint(\"Tere!\")\r\nprint(\"Tere!\")\r\nprint(\"Tere!\")\r\nprint(\"Tere!\")<\/pre>\r\n<code><\/code>\r\n\r\nKui me tahame v\u00e4ljastada \"Tere\" sada korda, peaksime ettevaatlikult loendades lisama veel 95 rida. Miljoni kordusega muutuks olukord lausa naeruv\u00e4\u00e4rseks. Tegelikult on programmeerimiskeeltes olemas v\u00f5imalused korduste l\u00fchemaks esituseks. Neist levinuim on <em>while<\/em>-ts\u00fckkel.\r\n<h2>WHILE-TS\u00dcKKEL<\/h2>\r\n<em>while<\/em>-ts\u00fckliks nimetame struktuuri, mis koosneb j\u00e4tkamistingimusest ning ts\u00fckli sisust.\u00a0 Kui j\u00e4tkamistingimus on t\u00e4idetud, siis t\u00e4idetakse ts\u00fckli sisu, seej\u00e4rel tullakse tagasi j\u00e4tkamistingimuse kontrolli juurde. Nii t\u00e4idetakse ts\u00fckli sisu mingi arv kordi, olenevalt j\u00e4tkamistingimuse kehtivusest.\r\n\r\n[caption id=\"attachment_41\" align=\"aligncenter\" width=\"220\"]<img class=\"wp-image-41 size-full\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-content\/uploads\/sites\/6\/2018\/12\/while_tsykkel.png\" alt=\"\" width=\"220\" height=\"258\" \/> Joonis 1. Eelkontrolliga while-ts\u00fckli plokkskeem[\/caption]\r\n\r\nKui j\u00e4tkamistingimust kontrollitakse enne ts\u00fckli sisu esmakordset t\u00e4itmist, nimetame seda eelkontrolliga ts\u00fckliks. Olemas on ka j\u00e4relkontrolliga ts\u00fcklid, kuid siin (ning paljudes teistes materjalides) peetakse ts\u00fckli puhul vaikimisi silmas eelkontrolliga ts\u00fcklit.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-linenumbers=\"false\">while 3 &lt; 5:       # ts\u00fckli algus ning j\u00e4tkamistingimus\r\n   print(\"Tere!\")   # ts\u00fckli sisu<\/pre>\r\n<h3>J\u00e4tkamistingimus<\/h3>\r\nTs\u00fckli j\u00e4tkamistingimus (nagu ka <em>if<\/em>-lause tingimus) on t\u00f5ev\u00e4\u00e4rtust\u00fc\u00fcpi. Kui tingimus on t\u00e4idetud (tingimusavaldise v\u00e4\u00e4rtus on t\u00f5ene), siis t\u00e4idetakse ts\u00fckli sisu. Kui tingimus ei ole t\u00e4idetud, siis ts\u00fckkel l\u00f5peb ning ts\u00fckli sisu ei t\u00e4ideta.\r\n\r\nTavaliselt on tingimus esitatud v\u00f5rdlemisena (n\u00e4iteks <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i &lt; 5<\/code>), aga selleks v\u00f5ib olla ka puhas t\u00f5ev\u00e4\u00e4rtus\u00a0<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">True<\/code> v\u00f5i <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">False<\/code>. Viimane on \u00fcsna tarbetu: nii karmi tingimusega ei t\u00e4ideta ts\u00fckli sisu kunagi. J\u00e4tkamistingimuse\u00a0<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">True<\/code> puhul on tegemist l\u00f5pmatu ts\u00fckliga, sest tingimusavaldis on alati t\u00f5ene. Siis t\u00e4idetakse ts\u00fckli sisu piiramatu arv kordi ning programm ei l\u00f5peta oma t\u00f6\u00f6d kunagi. L\u00f5pmatut ts\u00fcklit kasutatakse ka sihip\u00e4raselt, kuid sellisel juhul on ts\u00fcklist v\u00e4ljumine teisiti korraldatud.\r\n<h3>Ts\u00fckli sisu<\/h3>\r\nTs\u00fckli sisu on tegevus, mida soovime korrata. \"Tere!\" tr\u00fckkimise \u00fclesandes on selleks rida <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">print(\"Tere!\")<\/code>. Ts\u00fckli sisu v\u00f5ib olla kui tahes keeruline. Seal v\u00f5ib sisalduda erinevaid k\u00e4ske ja ka teisi ts\u00fckleid.\r\n<h3>Enesekontroll (1 k\u00fcsimus)<\/h3>\r\n<code>[h5p id=\"2\"]<\/code>\r\n<h2>PROGRAMMI KATKESTAMINE<\/h2>\r\nKui me k\u00e4ivitame Pythonis meelega v\u00f5i kogemata sellise programmi, mis oma t\u00f6\u00f6d ei l\u00f5peta, siis saame Thonnys programmi t\u00f6\u00f6 katkestada Stop-m\u00e4rgiga nupu v\u00f5i klahvikombinatsiooni <em>Ctrl + F2<\/em> abil. (Keskkonnas IDLE katkestatakse programmi t\u00f6\u00f6 <em>Ctrl + C<\/em> abil.)\r\n<h2>KORDUV TEGEVUS WHILE-TS\u00dcKLIT KASUTADES<\/h2>\r\nL\u00e4hme tagasi algse \u00fclesande juurde. Me tahame ts\u00fckli abil tr\u00fckkida ekraanile \"Tere!\" viis korda. Selleks peab ts\u00fckli sisus olema midagi, mis muutub selliselt, et p\u00e4rast viiendat korda ts\u00fckli sisu enam ei t\u00e4ideta. Lahendus on loendada, mitu korda on ts\u00fckli sisu k\u00e4ivitatud. Kokkuleppeliselt on sellise loendaja (''ts\u00fcklimuutuja'') nimeks <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code>. Loome muutuja nimega <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code>. Olgu <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code> v\u00e4\u00e4rtus esialgu 0: <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i = 0<\/code>. Igal ts\u00fckli sammul liidame v\u00e4\u00e4rtusele 1. Seda saame teha avaldisega\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-linenumbers=\"false\">i = i + 1<\/pre>\r\nSelle rea jooksutamisel kasvab <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code> v\u00e4\u00e4rtus \u00fche v\u00f5rra. Pane t\u00e4hele, et programmeerides on v\u00f5rdusm\u00e4rgil erinev t\u00e4hendus kui matemaatikas. Siin t\u00e4histab v\u00f5rdusm\u00e4rk v\u00e4\u00e4rtuse omistamist v\u00f5rdusm\u00e4rgist vasakul asuvale muutujale. V\u00f5rdusm\u00e4rgi parem pool on avaldis, mille tulemus muutujale omistatakse. Hetkel arvutatakse esmalt avaldis <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i + 1<\/code> ning saadud tulemus m\u00e4\u00e4ratakse muutuja <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code> uueks v\u00e4\u00e4rtuseks.\r\n\r\nTeiseks peame m\u00e4\u00e4rama j\u00e4tkamistingimuse. Selleks sobib <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i &lt; 5<\/code>. Kui <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code> on esialgu 0 ja igal sammul liidetakse 1, siis just 5 sammuga j\u00f5uame olukorda, kus tingimus <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i &lt; 5<\/code> ei ole enam t\u00e4idetud. Paneme n\u00fc\u00fcd programmi kokku. Endiselt on olulisel kohal koolon ja taane:\r\n\r\n<strong>N\u00e4iteprogramm. Ts\u00fckliga \"Tere!\"<\/strong>\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i = 0\r\nwhile i &lt; 5:\r\n   print(\"Tere!\")\r\n   i = i + 1<\/pre>\r\n&nbsp;\r\n\r\n[caption id=\"attachment_43\" align=\"aligncenter\" width=\"178\"]<img class=\"wp-image-43 size-full\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-content\/uploads\/sites\/6\/2018\/12\/Ndal3_while2par.png\" alt=\"\" width=\"178\" height=\"391\" \/> Joonis 2. \"Tere!\"-programmi plokkskeem.[\/caption]\r\n\r\nAnal\u00fc\u00fcsime programmi t\u00f6\u00f6d sammude kaupa:\r\n<ul>\r\n \t<li>J\u00e4tkamistingimus (<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i &lt; 5<\/code>) on t\u00e4idetud, kui esimest korda ts\u00fckli juurde j\u00f5uame, sest <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">0 &lt; 5<\/code>.<\/li>\r\n \t<li>P\u00e4rast esmakordset sisu t\u00e4itmist on <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code> v\u00e4\u00e4rtus 1 ja j\u00e4tkamistingimus ikkagi t\u00e4idetud, sest <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">1 &lt; 5<\/code>.<\/li>\r\n \t<li>P\u00e4rast teist korda on <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code> v\u00e4\u00e4rtus 2 ja ikka saame j\u00e4tkata, sest <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">2 &lt; 5<\/code>.<\/li>\r\n \t<li>Ja siis <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code> on 3 ja ikka\u00a0<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">3 &lt; 5<\/code>.<\/li>\r\n \t<li>Ja siis <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code> on 4 ja ikka\u00a0<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">4 &lt; 5<\/code>.<\/li>\r\n \t<li>Ja siis <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code>on 5 ja kontrollime, kas\u00a0<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i &lt; 5<\/code>? Kas\u00a0<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">5 &lt; 5<\/code>? Ei ole, sest 5 ja 5 on v\u00f5rdsed, seega v\u00f5rratus\u00a0<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">5 &lt; 5<\/code> ei kehti ja j\u00e4tkamistingimus on v\u00e4\u00e4r.<\/li>\r\n<\/ul>\r\n<h2>V\u00c4\u00c4RTUSE MUUTMISE L\u00dcHIVARIANDID<\/h2>\r\nKuna muutuja v\u00e4\u00e4rtuse muutmist eelmise v\u00e4\u00e4rtuse alusel tuleb sagedasti ette, siis on selleks ka l\u00fchemad variandid olemas. N\u00e4iteks <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">a = a + 3<\/code> asemel v\u00f5ime kirjutada <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">a += 3<\/code>. Samasugused variandid on ka lahutamise (<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">-=<\/code>), korrutamise (<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">*=<\/code>), jagamise (<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\/=<\/code>), t\u00e4isarvulise jagamise (<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\/\/=<\/code>), j\u00e4\u00e4gi leidmise (<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">%=<\/code>) ja astendamise (<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">**=<\/code>) jaoks.\r\n<h2>MUUTUJA VAATLEMINE PRINT ABIL<\/h2>\r\nLisame ts\u00fckli kehasse \u00fche rea, mis <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code> v\u00e4\u00e4rtuse ekraanile tooks, et seda paremini j\u00e4lgida.\r\n\r\n<strong>N\u00e4iteprogramm. Muutuja vaatlemine print abil<\/strong>\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i = 0\r\nwhile i &lt; 5:\r\n   print(\"Tere!\")\r\n   i = i + 1\r\n   print(i)<\/pre>\r\nK\u00e4ivita programm ja n\u00e4ed, kuidas\u00a0<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code> v\u00e4\u00e4rtused muutuvad.\r\n<h2>MUUTUJATE VAATLEMINE THONNYS<\/h2>\r\nKui me programmi alles teeme, siis on meil kasulik teada, mis v\u00e4\u00e4rtus on muutujail programmi mingites kohtades. Thonnys on muutuja v\u00e4\u00e4rtuste j\u00e4lgimine sisse ehitatud ja seda saab n\u00e4htavale tuua <em>View<\/em>-men\u00fc\u00fcst valikuga <em>Variables<\/em>.\r\nKuna programm t\u00f6\u00f6tab kiiresti, siis tavaliselt k\u00e4ivitades j\u00e4\u00e4vad n\u00e4ha ainult programmi t\u00f6\u00f6 l\u00f5pus kehtivad v\u00e4\u00e4rtused. Selleks, et samm-sammult programmi t\u00f6\u00f6st \u00fclevaadet saada, tuleb programm k\u00e4ivitada silumisre\u017eiimis (<em>debug mode<\/em>) - putukaga nupuga v\u00f5i <em>Run<\/em>-men\u00fc\u00fcst <em>Debug current script<\/em>. Seej\u00e4rel saab erineva ulatusega samme teha vastavate nuppude v\u00f5i <em>Run<\/em>-men\u00fc\u00fc valikute abil.\r\n\r\n[caption id=\"attachment_44\" align=\"aligncenter\" width=\"300\"]<img class=\"wp-image-44 size-medium\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-content\/uploads\/sites\/6\/2018\/12\/N3silum-300x276.png\" alt=\"\" width=\"300\" height=\"276\" \/> Silumisre\u017eiim Thonnys[\/caption]\r\n\r\nKokkuv\u00f5ttev video: <a href=\"http:\/\/www.uttv.ee\/naita?id=23914\">http:\/\/www.uttv.ee\/naita?id=23914<\/a>\r\n<h3>Enesekontroll (5 k\u00fcsimust)<code><\/code><\/h3>\r\n<code>[h5p id=\"5\"]<\/code>\r\n\r\nPalun kommenteerige seda materjali <a href=\"https:\/\/docs.google.com\/forms\/d\/e\/1FAIpQLScfywe1edrFoUSDJ7f7QUA-i97fYAvtY0a6eABvVUDhb3DUig\/viewform\" target=\"_blank\" rel=\"noopener\">Google'i k\u00fcsimustikus<\/a>.","rendered":"<p>Selles peat\u00fckis tutvume ts\u00fckliga, mis on struktuur tegevuste korduvaks teostamiseks. Uurime ts\u00fckli osasid (ts\u00fcklimuutujat ning ts\u00fckli sisu) ja kirjutame esimesed ts\u00fckleid sisaldavad programmid. Vaatame ka, kuidas katkestada k\u00e4ivitatud programmi t\u00f6\u00f6 ning kuidas vaadelda muutujate olekut programmi erinevates olekutes.<\/p>\n<h2>KORDUV TEGEVUS<\/h2>\n<p>Tihtipeale esineb programmi kirjutades olukordi, kus mingisugust tegevust on tarvis korrata. N\u00e4iteks kui tahame, et programm v\u00e4ljastaks ekraanile viis korda \u00fcksteise alla &#8220;Tere!&#8221;, siis k\u00f5lbaks selline programm:<code><br \/>\n<\/code><\/p>\n<p><strong>N\u00e4itekood. Viis &#8220;Tere!&#8221;<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">print(\"Tere!\")\r\nprint(\"Tere!\")\r\nprint(\"Tere!\")\r\nprint(\"Tere!\")\r\nprint(\"Tere!\")<\/pre>\n<p><code><\/code><\/p>\n<p>Kui me tahame v\u00e4ljastada &#8220;Tere&#8221; sada korda, peaksime ettevaatlikult loendades lisama veel 95 rida. Miljoni kordusega muutuks olukord lausa naeruv\u00e4\u00e4rseks. Tegelikult on programmeerimiskeeltes olemas v\u00f5imalused korduste l\u00fchemaks esituseks. Neist levinuim on <em>while<\/em>-ts\u00fckkel.<\/p>\n<h2>WHILE-TS\u00dcKKEL<\/h2>\n<p><em>while<\/em>-ts\u00fckliks nimetame struktuuri, mis koosneb j\u00e4tkamistingimusest ning ts\u00fckli sisust.\u00a0 Kui j\u00e4tkamistingimus on t\u00e4idetud, siis t\u00e4idetakse ts\u00fckli sisu, seej\u00e4rel tullakse tagasi j\u00e4tkamistingimuse kontrolli juurde. Nii t\u00e4idetakse ts\u00fckli sisu mingi arv kordi, olenevalt j\u00e4tkamistingimuse kehtivusest.<\/p>\n<figure id=\"attachment_41\" aria-describedby=\"caption-attachment-41\" style=\"width: 220px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-41 size-full\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-content\/uploads\/sites\/6\/2018\/12\/while_tsykkel.png\" alt=\"\" width=\"220\" height=\"258\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-content\/uploads\/sites\/6\/2018\/12\/while_tsykkel.png 220w, https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-content\/uploads\/sites\/6\/2018\/12\/while_tsykkel-65x76.png 65w\" sizes=\"auto, (max-width: 220px) 100vw, 220px\" \/><figcaption id=\"caption-attachment-41\" class=\"wp-caption-text\">Joonis 1. Eelkontrolliga while-ts\u00fckli plokkskeem<\/figcaption><\/figure>\n<p>Kui j\u00e4tkamistingimust kontrollitakse enne ts\u00fckli sisu esmakordset t\u00e4itmist, nimetame seda eelkontrolliga ts\u00fckliks. Olemas on ka j\u00e4relkontrolliga ts\u00fcklid, kuid siin (ning paljudes teistes materjalides) peetakse ts\u00fckli puhul vaikimisi silmas eelkontrolliga ts\u00fcklit.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-linenumbers=\"false\">while 3 &lt; 5:       # ts\u00fckli algus ning j\u00e4tkamistingimus\r\n   print(\"Tere!\")   # ts\u00fckli sisu<\/pre>\n<h3>J\u00e4tkamistingimus<\/h3>\n<p>Ts\u00fckli j\u00e4tkamistingimus (nagu ka <em>if<\/em>-lause tingimus) on t\u00f5ev\u00e4\u00e4rtust\u00fc\u00fcpi. Kui tingimus on t\u00e4idetud (tingimusavaldise v\u00e4\u00e4rtus on t\u00f5ene), siis t\u00e4idetakse ts\u00fckli sisu. Kui tingimus ei ole t\u00e4idetud, siis ts\u00fckkel l\u00f5peb ning ts\u00fckli sisu ei t\u00e4ideta.<\/p>\n<p>Tavaliselt on tingimus esitatud v\u00f5rdlemisena (n\u00e4iteks <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i &lt; 5<\/code>), aga selleks v\u00f5ib olla ka puhas t\u00f5ev\u00e4\u00e4rtus\u00a0<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">True<\/code> v\u00f5i <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">False<\/code>. Viimane on \u00fcsna tarbetu: nii karmi tingimusega ei t\u00e4ideta ts\u00fckli sisu kunagi. J\u00e4tkamistingimuse\u00a0<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">True<\/code> puhul on tegemist l\u00f5pmatu ts\u00fckliga, sest tingimusavaldis on alati t\u00f5ene. Siis t\u00e4idetakse ts\u00fckli sisu piiramatu arv kordi ning programm ei l\u00f5peta oma t\u00f6\u00f6d kunagi. L\u00f5pmatut ts\u00fcklit kasutatakse ka sihip\u00e4raselt, kuid sellisel juhul on ts\u00fcklist v\u00e4ljumine teisiti korraldatud.<\/p>\n<h3>Ts\u00fckli sisu<\/h3>\n<p>Ts\u00fckli sisu on tegevus, mida soovime korrata. &#8220;Tere!&#8221; tr\u00fckkimise \u00fclesandes on selleks rida <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">print(\"Tere!\")<\/code>. Ts\u00fckli sisu v\u00f5ib olla kui tahes keeruline. Seal v\u00f5ib sisalduda erinevaid k\u00e4ske ja ka teisi ts\u00fckleid.<\/p>\n<h3>Enesekontroll (1 k\u00fcsimus)<\/h3>\n<p><code><\/p>\n<div id=\"h5p-2\">\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-2\" class=\"h5p-iframe\" data-content-id=\"2\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"Ts\u00fckkel-1-while\"><\/iframe><\/div>\n<\/div>\n<p><\/code><\/p>\n<h2>PROGRAMMI KATKESTAMINE<\/h2>\n<p>Kui me k\u00e4ivitame Pythonis meelega v\u00f5i kogemata sellise programmi, mis oma t\u00f6\u00f6d ei l\u00f5peta, siis saame Thonnys programmi t\u00f6\u00f6 katkestada Stop-m\u00e4rgiga nupu v\u00f5i klahvikombinatsiooni <em>Ctrl + F2<\/em> abil. (Keskkonnas IDLE katkestatakse programmi t\u00f6\u00f6 <em>Ctrl + C<\/em> abil.)<\/p>\n<h2>KORDUV TEGEVUS WHILE-TS\u00dcKLIT KASUTADES<\/h2>\n<p>L\u00e4hme tagasi algse \u00fclesande juurde. Me tahame ts\u00fckli abil tr\u00fckkida ekraanile &#8220;Tere!&#8221; viis korda. Selleks peab ts\u00fckli sisus olema midagi, mis muutub selliselt, et p\u00e4rast viiendat korda ts\u00fckli sisu enam ei t\u00e4ideta. Lahendus on loendada, mitu korda on ts\u00fckli sisu k\u00e4ivitatud. Kokkuleppeliselt on sellise loendaja (&#8221;ts\u00fcklimuutuja&#8221;) nimeks <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code>. Loome muutuja nimega <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code>. Olgu <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code> v\u00e4\u00e4rtus esialgu 0: <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i = 0<\/code>. Igal ts\u00fckli sammul liidame v\u00e4\u00e4rtusele 1. Seda saame teha avaldisega<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\" data-enlighter-linenumbers=\"false\">i = i + 1<\/pre>\n<p>Selle rea jooksutamisel kasvab <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code> v\u00e4\u00e4rtus \u00fche v\u00f5rra. Pane t\u00e4hele, et programmeerides on v\u00f5rdusm\u00e4rgil erinev t\u00e4hendus kui matemaatikas. Siin t\u00e4histab v\u00f5rdusm\u00e4rk v\u00e4\u00e4rtuse omistamist v\u00f5rdusm\u00e4rgist vasakul asuvale muutujale. V\u00f5rdusm\u00e4rgi parem pool on avaldis, mille tulemus muutujale omistatakse. Hetkel arvutatakse esmalt avaldis <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i + 1<\/code> ning saadud tulemus m\u00e4\u00e4ratakse muutuja <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code> uueks v\u00e4\u00e4rtuseks.<\/p>\n<p>Teiseks peame m\u00e4\u00e4rama j\u00e4tkamistingimuse. Selleks sobib <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i &lt; 5<\/code>. Kui <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code> on esialgu 0 ja igal sammul liidetakse 1, siis just 5 sammuga j\u00f5uame olukorda, kus tingimus <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i &lt; 5<\/code> ei ole enam t\u00e4idetud. Paneme n\u00fc\u00fcd programmi kokku. Endiselt on olulisel kohal koolon ja taane:<\/p>\n<p><strong>N\u00e4iteprogramm. Ts\u00fckliga &#8220;Tere!&#8221;<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i = 0\r\nwhile i &lt; 5:\r\n   print(\"Tere!\")\r\n   i = i + 1<\/pre>\n<p>&nbsp;<\/p>\n<figure id=\"attachment_43\" aria-describedby=\"caption-attachment-43\" style=\"width: 178px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-43 size-full\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-content\/uploads\/sites\/6\/2018\/12\/Ndal3_while2par.png\" alt=\"\" width=\"178\" height=\"391\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-content\/uploads\/sites\/6\/2018\/12\/Ndal3_while2par.png 178w, https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-content\/uploads\/sites\/6\/2018\/12\/Ndal3_while2par-137x300.png 137w, https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-content\/uploads\/sites\/6\/2018\/12\/Ndal3_while2par-65x143.png 65w\" sizes=\"auto, (max-width: 178px) 100vw, 178px\" \/><figcaption id=\"caption-attachment-43\" class=\"wp-caption-text\">Joonis 2. &#8220;Tere!&#8221;-programmi plokkskeem.<\/figcaption><\/figure>\n<p>Anal\u00fc\u00fcsime programmi t\u00f6\u00f6d sammude kaupa:<\/p>\n<ul>\n<li>J\u00e4tkamistingimus (<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i &lt; 5<\/code>) on t\u00e4idetud, kui esimest korda ts\u00fckli juurde j\u00f5uame, sest <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">0 &lt; 5<\/code>.<\/li>\n<li>P\u00e4rast esmakordset sisu t\u00e4itmist on <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code> v\u00e4\u00e4rtus 1 ja j\u00e4tkamistingimus ikkagi t\u00e4idetud, sest <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">1 &lt; 5<\/code>.<\/li>\n<li>P\u00e4rast teist korda on <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code> v\u00e4\u00e4rtus 2 ja ikka saame j\u00e4tkata, sest <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">2 &lt; 5<\/code>.<\/li>\n<li>Ja siis <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code> on 3 ja ikka\u00a0<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">3 &lt; 5<\/code>.<\/li>\n<li>Ja siis <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code> on 4 ja ikka\u00a0<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">4 &lt; 5<\/code>.<\/li>\n<li>Ja siis <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code>on 5 ja kontrollime, kas\u00a0<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i &lt; 5<\/code>? Kas\u00a0<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">5 &lt; 5<\/code>? Ei ole, sest 5 ja 5 on v\u00f5rdsed, seega v\u00f5rratus\u00a0<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">5 &lt; 5<\/code> ei kehti ja j\u00e4tkamistingimus on v\u00e4\u00e4r.<\/li>\n<\/ul>\n<h2>V\u00c4\u00c4RTUSE MUUTMISE L\u00dcHIVARIANDID<\/h2>\n<p>Kuna muutuja v\u00e4\u00e4rtuse muutmist eelmise v\u00e4\u00e4rtuse alusel tuleb sagedasti ette, siis on selleks ka l\u00fchemad variandid olemas. N\u00e4iteks <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">a = a + 3<\/code> asemel v\u00f5ime kirjutada <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">a += 3<\/code>. Samasugused variandid on ka lahutamise (<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">-=<\/code>), korrutamise (<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">*=<\/code>), jagamise (<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\/=<\/code>), t\u00e4isarvulise jagamise (<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\/\/=<\/code>), j\u00e4\u00e4gi leidmise (<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">%=<\/code>) ja astendamise (<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">**=<\/code>) jaoks.<\/p>\n<h2>MUUTUJA VAATLEMINE PRINT ABIL<\/h2>\n<p>Lisame ts\u00fckli kehasse \u00fche rea, mis <code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code> v\u00e4\u00e4rtuse ekraanile tooks, et seda paremini j\u00e4lgida.<\/p>\n<p><strong>N\u00e4iteprogramm. Muutuja vaatlemine print abil<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i = 0\r\nwhile i &lt; 5:\r\n   print(\"Tere!\")\r\n   i = i + 1\r\n   print(i)<\/pre>\n<p>K\u00e4ivita programm ja n\u00e4ed, kuidas\u00a0<code class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">i<\/code> v\u00e4\u00e4rtused muutuvad.<\/p>\n<h2>MUUTUJATE VAATLEMINE THONNYS<\/h2>\n<p>Kui me programmi alles teeme, siis on meil kasulik teada, mis v\u00e4\u00e4rtus on muutujail programmi mingites kohtades. Thonnys on muutuja v\u00e4\u00e4rtuste j\u00e4lgimine sisse ehitatud ja seda saab n\u00e4htavale tuua <em>View<\/em>-men\u00fc\u00fcst valikuga <em>Variables<\/em>.<br \/>\nKuna programm t\u00f6\u00f6tab kiiresti, siis tavaliselt k\u00e4ivitades j\u00e4\u00e4vad n\u00e4ha ainult programmi t\u00f6\u00f6 l\u00f5pus kehtivad v\u00e4\u00e4rtused. Selleks, et samm-sammult programmi t\u00f6\u00f6st \u00fclevaadet saada, tuleb programm k\u00e4ivitada silumisre\u017eiimis (<em>debug mode<\/em>) &#8211; putukaga nupuga v\u00f5i <em>Run<\/em>-men\u00fc\u00fcst <em>Debug current script<\/em>. Seej\u00e4rel saab erineva ulatusega samme teha vastavate nuppude v\u00f5i <em>Run<\/em>-men\u00fc\u00fc valikute abil.<\/p>\n<figure id=\"attachment_44\" aria-describedby=\"caption-attachment-44\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-44 size-medium\" src=\"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-content\/uploads\/sites\/6\/2018\/12\/N3silum-300x276.png\" alt=\"\" width=\"300\" height=\"276\" srcset=\"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-content\/uploads\/sites\/6\/2018\/12\/N3silum-300x276.png 300w, https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-content\/uploads\/sites\/6\/2018\/12\/N3silum-65x60.png 65w, https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-content\/uploads\/sites\/6\/2018\/12\/N3silum-225x207.png 225w, https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-content\/uploads\/sites\/6\/2018\/12\/N3silum-350x322.png 350w, https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-content\/uploads\/sites\/6\/2018\/12\/N3silum.png 681w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><figcaption id=\"caption-attachment-44\" class=\"wp-caption-text\">Silumisre\u017eiim Thonnys<\/figcaption><\/figure>\n<p>Kokkuv\u00f5ttev video: <a href=\"http:\/\/www.uttv.ee\/naita?id=23914\">http:\/\/www.uttv.ee\/naita?id=23914<\/a><\/p>\n<h3>Enesekontroll (5 k\u00fcsimust)<code><\/code><\/h3>\n<p><code><\/p>\n<div id=\"h5p-5\">\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-5\" class=\"h5p-iframe\" data-content-id=\"5\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"Ts\u00fckkel-1-l\u00f5pp-viis-k\u00fcsimust\"><\/iframe><\/div>\n<\/div>\n<p><\/code><\/p>\n<p>Palun kommenteerige seda materjali <a href=\"https:\/\/docs.google.com\/forms\/d\/e\/1FAIpQLScfywe1edrFoUSDJ7f7QUA-i97fYAvtY0a6eABvVUDhb3DUig\/viewform\" target=\"_blank\" rel=\"noopener\">Google&#8217;i k\u00fcsimustikus<\/a>.<\/p>\n","protected":false},"author":12,"menu_order":2,"template":"","meta":{"pb_show_title":"on","pb_short_title":"","pb_subtitle":"","pb_authors":[],"pb_section_license":""},"chapter-type":[],"contributor":[],"license":[],"class_list":["post-34","chapter","type-chapter","status-publish","hentry"],"part":21,"_links":{"self":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/pressbooks\/v2\/chapters\/34","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/pressbooks\/v2\/chapters"}],"about":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/wp\/v2\/types\/chapter"}],"author":[{"embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/wp\/v2\/users\/12"}],"version-history":[{"count":23,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/pressbooks\/v2\/chapters\/34\/revisions"}],"predecessor-version":[{"id":411,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/pressbooks\/v2\/chapters\/34\/revisions\/411"}],"part":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/pressbooks\/v2\/parts\/21"}],"metadata":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/pressbooks\/v2\/chapters\/34\/metadata\/"}],"wp:attachment":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/wp\/v2\/media?parent=34"}],"wp:term":[{"taxonomy":"chapter-type","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/pressbooks\/v2\/chapter-type?post=34"},{"taxonomy":"contributor","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/wp\/v2\/contributor?post=34"},{"taxonomy":"license","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/wp\/v2\/license?post=34"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}