{"id":49,"date":"2019-02-27T08:26:56","date_gmt":"2019-02-27T08:26:56","guid":{"rendered":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvaraarendus\/chapter\/lisalugemine-sone\/"},"modified":"2020-07-22T14:04:13","modified_gmt":"2020-07-22T14:04:13","slug":"lisalugemine-sone","status":"publish","type":"chapter","link":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/chapter\/lisalugemine-sone\/","title":{"raw":"Lisalugemine: S\u00f5ne","rendered":"Lisalugemine: S\u00f5ne"},"content":{"raw":"<p class=\"vspace\">Oleme s\u00f5nedega juba oma kursuste p\u00e4ris algusosast alates tuttavad. Teame, et s\u00f5net raamistavad \u00fclakomad v\u00f5i jutum\u00e4rgid. Teame, et s\u00f5net\u00fc\u00fcpi t\u00e4histatakse <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">str<\/code><\/code> ning n\u00e4iteks arvmuutuja v\u00e4\u00e4rtusele vastava s\u00f5net\u00fc\u00fcpi v\u00e4\u00e4rtuse saame funktsiooniga <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">str<\/code>. Seda viimast on meil olnud tarvis, kui oleme tahtnud arvmuutuja v\u00e4\u00e4rtust tekstis kasutada.<\/p>\n\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">a = 16\nprint(\"Arvu v\u00e4\u00e4rtus on \" + str(a))<\/pre>\n<\/div>\n<\/div>\n<p class=\"vspace\">Siin materjalis vaatleme s\u00f5net kui andmestruktuuri ja v\u00f5rdleme seda teiste andmestruktuuridega, eriti j\u00e4rjendi ja ennikuga. S\u00f5ne on j\u00e4rjendi ja ennikuga mitmes m\u00f5ttes sarnane.<\/p>\n\n<h2>S\u00f5ne elemendid<\/h2>\n<p class=\"vspace\">J\u00e4rjendi ja enniku puhul saame teatud elemendi indeksi abil k\u00e4tte.<\/p>\n\n<div class=\"vspace\"><\/div>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">j\u00e4rjend = [1, 2, 5, 6]\nennik = (1, 2, 5, 6)\nprint(j\u00e4rjend[3])\nprint(ennik[3])<\/pre>\n<\/div>\n<\/div>\n<p class=\"vspace\">Proovime sama ka s\u00f5ne korral.<\/p>\n\n<div class=\"vspace\"><\/div>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">s\u00f5ne =\"1256\"\nprint(s\u00f5ne[3])<\/pre>\n<\/div>\n<\/div>\n<p class=\"vspace\">Mis t\u00fc\u00fcpi on s\u00f5ne elemendid?<\/p>\n\n<div>\n<h3>Enesekontroll (1 \u00fclesanne)<\/h3>\n<code>[h5p id=\"20\"]<\/code>\n\n<\/div>\n<p class=\"vspace\">Mitmetes keeltes on t\u00f5esti olemas eraldi andmet\u00fc\u00fcp s\u00fcmbolite ja t\u00e4hem\u00e4rkide jaoks (nt <em>char<\/em>). Pythonis aga pole ja siin k\u00e4sitletakse s\u00f5ne elemente \u00fchem\u00e4rgiliste s\u00f5nedena.<\/p>\n\n<h2>S\u00f5ne l\u00e4bimine<\/h2>\n<p class=\"vspace\">Sarnaselt j\u00e4rjendile ja ennikule saame ka s\u00f5ne puhul <code>for<\/code>-ts\u00fckliga \u00fchekaupa elementidele ligi, n\u00e4iteks v\u00e4ljastamiseks:<\/p>\n\n<div class=\"vspace\"><\/div>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">for element in j\u00e4rjend:\n    print(element)\n\n\nfor element in ennik:\n    print(element)\n\n\nfor element in s\u00f5ne:\n    print(element)<\/pre>\n<\/div>\n<\/div>\n<p class=\"vspace\">Sama saab korraldada ka indeksite abil:<\/p>\n\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">for i in range(len(j\u00e4rjend)):\n    print(j\u00e4rjend[i])\n\n\nfor i in range(len(ennik)):\n    print(ennik[i])\n\n\nfor i in range(len(s\u00f5ne)):\n    print(s\u00f5ne[i])<\/pre>\n<\/div>\n<\/div>\n<p class=\"vspace\">N\u00e4iteks v\u00f5ime iga elemendi korral leida, mitu korda ta \u00fcldse selles s\u00f5nes leidub:<\/p>\n\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">s\u00f5ne = \"Kui Arno isaga koolimajja j\u00f5udis, olid tunnid juba alanud\"\nfor m\u00e4rk in s\u00f5ne:\n    print(m\u00e4rk + \" on s\u00f5nes \" + str(s\u00f5ne.count(m\u00e4rk)) + \" korda\")<\/pre>\n<\/div>\n<\/div>\n<div>\n<h2>Operatsioone s\u00f5nedega<\/h2>\n<\/div>\n<div>S\u00f5ne puhul toimivad funktsioonid <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">min<\/code> ja <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">max<\/code>.<\/div>\n<div>\n<h3>Enesekontroll (1 \u00fclesanne)<\/h3>\n<span id=\"test2-tog\" class=\"toggle\"> <code>[h5p id=\"21\"]<\/code> <\/span>\n\n<\/div>\n<p class=\"vspace\">S\u00f5nesid saab j\u00e4rjendite ja ennikutega sarnaselt viilutada.<\/p>\n\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">print(j\u00e4rjend[1:3])\nprint(ennik[1:3])\nprint(s\u00f5ne[1:3])<\/pre>\n<\/div>\n<\/div>\n<p class=\"vspace\">K\u00f5ik eelnevad n\u00e4ited t\u00f6\u00f6tasid sarnaselt s\u00f5ne, j\u00e4rjendi ja enniku korral. Proovime n\u00fc\u00fcd s\u00f5ne puhul neid olukordi, kus j\u00e4rjend ja ennik erinevad. Nimelt on erinevused selles osas, kas elemente saab muuta ja kas neid saab lisada ja eemaldada. (M\u00e4letatavasti j\u00e4rjendi puhul saab elemente muuta, lisada ja eemaldada, enniku puhul mitte.)<\/p>\n<p class=\"vspace\">Kuidas on lood s\u00f5nes elemendi v\u00e4\u00e4rtuse muutmisega?<\/p>\n\n<h3 class=\"vspace\">Enesekontroll (1 \u00fclesanne)<\/h3>\n<div>\n\n<span id=\"test3-tog\" class=\"toggle\"> <code>[h5p id=\"22\"]<\/code>\n<\/span>\n\n<\/div>\n<p class=\"vspace\">Proovime n\u00fc\u00fcd s\u00f5ne pikkust muuta.<\/p>\n\n<div class=\"vspace\">\n<h3 class=\"vspace\">Enesekontroll (1 \u00fclesanne)<\/h3>\n<\/div>\n<div>\n\n<span id=\"test4-tog\" class=\"toggle\"> <code>[h5p id=\"23\"]<\/code>\n<\/span>\n\n<\/div>\n<p class=\"vspace\">Samuti ei \u00f5nnestu s\u00f5ne ja enniku puhul elemendi eemaldamine k\u00e4su <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">del<\/code> v\u00f5i funktsiooni <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">remove<\/code><\/code> abil.<\/p>\n<p class=\"vspace\">Seega v\u00f5ib \u00f6elda, et s\u00f5ne kui andmestruktuur sarnaneb pigem enniku kui j\u00e4rjendiga. Tegemist on muutmatute (mittemuteeritavate) andmestruktuuridega.<\/p>\n<p class=\"vspace\">Selle muutmatuse v\u00e4ite valguses v\u00f5ib tunduda vastuolulisena n\u00e4iteks funktsiooni <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">replace<\/code> tegevus, millega nagu saaks s\u00f5net elemente asendades muuta.<\/p>\n\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">nimi = \"Gerd\"\nnimi2 = nimi.replace(\"d\", \"t\")\nprint(nimi)\nprint(nimi2)<\/pre>\n<\/div>\n<\/div>\nKatsetades n\u00e4ed, et esialgne s\u00f5ne ei muutu, vaid luuakse uus s\u00f5ne.","rendered":"<p class=\"vspace\">Oleme s\u00f5nedega juba oma kursuste p\u00e4ris algusosast alates tuttavad. Teame, et s\u00f5net raamistavad \u00fclakomad v\u00f5i jutum\u00e4rgid. Teame, et s\u00f5net\u00fc\u00fcpi t\u00e4histatakse <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">str<\/code><\/code> ning n\u00e4iteks arvmuutuja v\u00e4\u00e4rtusele vastava s\u00f5net\u00fc\u00fcpi v\u00e4\u00e4rtuse saame funktsiooniga <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">str<\/code>. Seda viimast on meil olnud tarvis, kui oleme tahtnud arvmuutuja v\u00e4\u00e4rtust tekstis kasutada.<\/p>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">a = 16\nprint(\"Arvu v\u00e4\u00e4rtus on \" + str(a))<\/pre>\n<\/div>\n<\/div>\n<p class=\"vspace\">Siin materjalis vaatleme s\u00f5net kui andmestruktuuri ja v\u00f5rdleme seda teiste andmestruktuuridega, eriti j\u00e4rjendi ja ennikuga. S\u00f5ne on j\u00e4rjendi ja ennikuga mitmes m\u00f5ttes sarnane.<\/p>\n<h2>S\u00f5ne elemendid<\/h2>\n<p class=\"vspace\">J\u00e4rjendi ja enniku puhul saame teatud elemendi indeksi abil k\u00e4tte.<\/p>\n<div class=\"vspace\"><\/div>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">j\u00e4rjend = [1, 2, 5, 6]\nennik = (1, 2, 5, 6)\nprint(j\u00e4rjend[3])\nprint(ennik[3])<\/pre>\n<\/div>\n<\/div>\n<p class=\"vspace\">Proovime sama ka s\u00f5ne korral.<\/p>\n<div class=\"vspace\"><\/div>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">s\u00f5ne =\"1256\"\nprint(s\u00f5ne[3])<\/pre>\n<\/div>\n<\/div>\n<p class=\"vspace\">Mis t\u00fc\u00fcpi on s\u00f5ne elemendid?<\/p>\n<div>\n<h3>Enesekontroll (1 \u00fclesanne)<\/h3>\n<p><code><\/p>\n<div id=\"h5p-20\">\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-20\" class=\"h5p-iframe\" data-content-id=\"20\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"andmestruktuurid-4-1-\u00fcksk\u00fcs\"><\/iframe><\/div>\n<\/div>\n<p><\/code><\/p>\n<\/div>\n<p class=\"vspace\">Mitmetes keeltes on t\u00f5esti olemas eraldi andmet\u00fc\u00fcp s\u00fcmbolite ja t\u00e4hem\u00e4rkide jaoks (nt <em>char<\/em>). Pythonis aga pole ja siin k\u00e4sitletakse s\u00f5ne elemente \u00fchem\u00e4rgiliste s\u00f5nedena.<\/p>\n<h2>S\u00f5ne l\u00e4bimine<\/h2>\n<p class=\"vspace\">Sarnaselt j\u00e4rjendile ja ennikule saame ka s\u00f5ne puhul <code>for<\/code>-ts\u00fckliga \u00fchekaupa elementidele ligi, n\u00e4iteks v\u00e4ljastamiseks:<\/p>\n<div class=\"vspace\"><\/div>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">for element in j\u00e4rjend:\n    print(element)\n\n\nfor element in ennik:\n    print(element)\n\n\nfor element in s\u00f5ne:\n    print(element)<\/pre>\n<\/div>\n<\/div>\n<p class=\"vspace\">Sama saab korraldada ka indeksite abil:<\/p>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">for i in range(len(j\u00e4rjend)):\n    print(j\u00e4rjend[i])\n\n\nfor i in range(len(ennik)):\n    print(ennik[i])\n\n\nfor i in range(len(s\u00f5ne)):\n    print(s\u00f5ne[i])<\/pre>\n<\/div>\n<\/div>\n<p class=\"vspace\">N\u00e4iteks v\u00f5ime iga elemendi korral leida, mitu korda ta \u00fcldse selles s\u00f5nes leidub:<\/p>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">s\u00f5ne = \"Kui Arno isaga koolimajja j\u00f5udis, olid tunnid juba alanud\"\nfor m\u00e4rk in s\u00f5ne:\n    print(m\u00e4rk + \" on s\u00f5nes \" + str(s\u00f5ne.count(m\u00e4rk)) + \" korda\")<\/pre>\n<\/div>\n<\/div>\n<div>\n<h2>Operatsioone s\u00f5nedega<\/h2>\n<\/div>\n<div>S\u00f5ne puhul toimivad funktsioonid <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">min<\/code> ja <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">max<\/code>.<\/div>\n<div>\n<h3>Enesekontroll (1 \u00fclesanne)<\/h3>\n<p><span id=\"test2-tog\" class=\"toggle\"> <code><\/p>\n<div id=\"h5p-21\">\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-21\" class=\"h5p-iframe\" data-content-id=\"21\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"andmestruktuurid-4-2-\u00fcksk\u00fcs\"><\/iframe><\/div>\n<\/div>\n<p><\/code> <\/span><\/p>\n<\/div>\n<p class=\"vspace\">S\u00f5nesid saab j\u00e4rjendite ja ennikutega sarnaselt viilutada.<\/p>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">print(j\u00e4rjend[1:3])\nprint(ennik[1:3])\nprint(s\u00f5ne[1:3])<\/pre>\n<\/div>\n<\/div>\n<p class=\"vspace\">K\u00f5ik eelnevad n\u00e4ited t\u00f6\u00f6tasid sarnaselt s\u00f5ne, j\u00e4rjendi ja enniku korral. Proovime n\u00fc\u00fcd s\u00f5ne puhul neid olukordi, kus j\u00e4rjend ja ennik erinevad. Nimelt on erinevused selles osas, kas elemente saab muuta ja kas neid saab lisada ja eemaldada. (M\u00e4letatavasti j\u00e4rjendi puhul saab elemente muuta, lisada ja eemaldada, enniku puhul mitte.)<\/p>\n<p class=\"vspace\">Kuidas on lood s\u00f5nes elemendi v\u00e4\u00e4rtuse muutmisega?<\/p>\n<h3 class=\"vspace\">Enesekontroll (1 \u00fclesanne)<\/h3>\n<div>\n<p><span id=\"test3-tog\" class=\"toggle\"> <code><\/p>\n<div id=\"h5p-22\">\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-22\" class=\"h5p-iframe\" data-content-id=\"22\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"andmestruktuurid-4-3-\u00fcksk\u00fcs\"><\/iframe><\/div>\n<\/div>\n<p><\/code><br \/>\n<\/span><\/p>\n<\/div>\n<p class=\"vspace\">Proovime n\u00fc\u00fcd s\u00f5ne pikkust muuta.<\/p>\n<div class=\"vspace\">\n<h3 class=\"vspace\">Enesekontroll (1 \u00fclesanne)<\/h3>\n<\/div>\n<div>\n<p><span id=\"test4-tog\" class=\"toggle\"> <code><\/p>\n<div id=\"h5p-23\">\n<div class=\"h5p-iframe-wrapper\"><iframe id=\"h5p-iframe-23\" class=\"h5p-iframe\" data-content-id=\"23\" style=\"height:1px\" src=\"about:blank\" frameBorder=\"0\" scrolling=\"no\" title=\"andmestruktuurid-4-4-\u00fcksk\u00fcs\"><\/iframe><\/div>\n<\/div>\n<p><\/code><br \/>\n<\/span><\/p>\n<\/div>\n<p class=\"vspace\">Samuti ei \u00f5nnestu s\u00f5ne ja enniku puhul elemendi eemaldamine k\u00e4su <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">del<\/code> v\u00f5i funktsiooni <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">remove<\/code><\/code> abil.<\/p>\n<p class=\"vspace\">Seega v\u00f5ib \u00f6elda, et s\u00f5ne kui andmestruktuur sarnaneb pigem enniku kui j\u00e4rjendiga. Tegemist on muutmatute (mittemuteeritavate) andmestruktuuridega.<\/p>\n<p class=\"vspace\">Selle muutmatuse v\u00e4ite valguses v\u00f5ib tunduda vastuolulisena n\u00e4iteks funktsiooni <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">replace<\/code> tegevus, millega nagu saaks s\u00f5net elemente asendades muuta.<\/p>\n<div>\n<div class=\"syntaxhighlighter nogutter python\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">nimi = \"Gerd\"\nnimi2 = nimi.replace(\"d\", \"t\")\nprint(nimi)\nprint(nimi2)<\/pre>\n<\/div>\n<\/div>\n<p>Katsetades n\u00e4ed, et esialgne s\u00f5ne ei muutu, vaid luuakse uus s\u00f5ne.<\/p>\n","protected":false},"author":3,"menu_order":4,"template":"","meta":{"pb_show_title":"on","pb_short_title":"","pb_subtitle":"","pb_authors":[],"pb_section_license":""},"chapter-type":[],"contributor":[],"license":[],"class_list":["post-49","chapter","type-chapter","status-publish","hentry"],"part":42,"_links":{"self":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/49","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters"}],"about":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/types\/chapter"}],"author":[{"embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/users\/3"}],"version-history":[{"count":1,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/49\/revisions"}],"predecessor-version":[{"id":50,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/49\/revisions\/50"}],"part":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/parts\/42"}],"metadata":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapters\/49\/metadata\/"}],"wp:attachment":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/media?parent=49"}],"wp:term":[{"taxonomy":"chapter-type","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/pressbooks\/v2\/chapter-type?post=49"},{"taxonomy":"contributor","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/contributor?post=49"},{"taxonomy":"license","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/tarkvara2\/wp-json\/wp\/v2\/license?post=49"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}