{"id":8259,"date":"2014-09-27T19:08:52","date_gmt":"2014-09-27T23:08:52","guid":{"rendered":"http:\/\/cscircles.cemc.uwaterloo.ca\/?page_id=8259"},"modified":"2014-10-15T17:50:49","modified_gmt":"2014-10-15T21:50:49","slug":"10-lt","status":"publish","type":"page","link":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/10-lt\/","title":{"rendered":"10: Funkcij\u0173 k\u016brimas"},"content":{"rendered":"<!-- Please retain this notice and add more notes if you create a new version.Lithuanian translators: Jurgis Pralgauskis, jurgis.pralgauskis@gmail.com, Aidis Stukas aidiss@gmail.comOriginal lesson author: David Pritchard, daveagp@gmail.com, http:\/\/cscircles.caLicense: http:\/\/creativecommons.org\/licenses\/by-nc-sa\/3.0\/-->\n<p>\u0160ioje pamokoje i\u0161moksime vien\u0105 svarbiausi\u0173 programavimo id\u0117j\u0173 -- funkcij\u0173 k\u016brim\u0105! Naudodami funkcijas galime programas padaryti trumpesn\u0117mis, geriau-organizuotomis, lengviau skaitomomomis ir panaudojamomis. Tolimesn\u0117se pamokose ap\u017evelgsime kitus naudingus Pitono elementus, tokius kaip rekursij\u0105 (<em>recursion<\/em>).<\/p>\n<h1>Kaip apibr\u0117\u017eti funkcij\u0105?<\/h1>\n<p>Prad\u0117sime nuo pavyzd\u017eio. Ar atsimenate funkcij\u0105 <code>abs<\/code>? Ji priima vien\u0105 argument\u0105 - skai\u010di\u0173 <em>x<\/em>, ir gr\u0105\u017eina jo modul\u012f - teigiam\u0105 reik\u0161m\u0119 (<em>x<\/em> kai <em>x <\/em>\u2265 0, ir -<em>x<\/em> kai <em>x<\/em> &lt; 0). Python\u2019e \u0161i\u0105 funkcij\u0105 galima sukurti (apibr\u0117\u017eti) taip:<\/p>\n<pre>def abs(x): \u00a0 \u00a0 # def - sutrumpintas angl. \u201edefine\u201c - apibr\u0117\u017eti.; pavadinimas \u201eabs\u201c ir argumentas, pavadinimu \u201ex\u201c.\r\n \u00a0if x &gt;= 0: \u00a0 \u00a0# funkcijos veiksmai -- atitrauktame bloke\r\n \u00a0 \u00a0return x\r\n \u00a0else:\r\n \u00a0 \u00a0return -x \u00a0 # funkcijos veiksm\u0173 pabaiga<\/pre>(Spustelkite <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/console\/?consolecode=def%20abs%28x%29%3A%20%23Funkcijos%20apra%C5%A1as%0A%20%20if%20x%20%26gt%3B%3D%200%3A%0A%20%20%20%20return%20x%0A%20%20else%3A%20%20%0A%20%20%20%20return%20-x%0A%0A%23%20Pagrindin%C4%97s%20programos%20prad%C5%BEia%0Aprint%28abs%28-5%29%29%0Aprint%28abs%2810%29%29\" target=\"_blank\">\u010dia<\/a>, kad i\u0161bandytum \u0161\u012f kod\u0105 konsol\u0117je.)<\/p>\n<p>&nbsp;<\/p>\n<h2>Dvi funkcijos apra\u0161ymo dalys<\/h2>\n<p>Pirmoje eilut\u0117je nurodomas funkcijos <em>pavadinimas<\/em> ir skliaustuose -- <em>argumentai (parametrai)<\/em> :<\/p>\n<p style=\"text-align: center;\"><code>def \u00abpavadinimas\u00bb(\u00abargumentai\u00bb):<\/code><\/p>\n<p>Pavyzdyje, <code>abs<\/code> yra vardas, o argumentas -- <code>x<\/code>. Argument\u0173 gali b\u016bti ir daugiau, pvz \u00a0<code>def skaiciuok(x, y, z)<\/code>, o gali ir visai neb\u016bti - tiesiog tu\u0161ti skliaustai <code>def darykkazka()<\/code>. <strong>Argumentai - tai i\u0161kvietimo metu funkcijos gaunami duomenys (\u012fvestis).<\/strong>Kitose eilut\u0117se, atitraukus nuo kra\u0161to, sura\u0161omi funkcijos <em>veiksmai<\/em>. Kai funkcija yra i\u0161kvie\u010diama programoje, Pitonas tiesiog vykdo joje nurodytus veiksmus (su gautais argumentais). <strong>Komanda <\/strong><\/p>\n<p style=\"text-align: center;\"><code>return \u00abrezultatas\u00bb<\/code><\/p>\n<p><strong>baigia funkcijos vykdym\u0105 ir gr\u0105\u017eina funkcijos rezultat\u0105<\/strong> (i\u0161vest\u012f) ten, i\u0161 kur funkcija buvo kviesta. Kaip matote \u201e<code>abs<\/code>\u201c apra\u0161e, <code>return<\/code> veiksmai gali b\u016bti keliose vietose, bet tik vienas b\u016bna \u012fvykdytas (priklausomai nuo aplinkybi\u0173). Jei n\u0117ra <code>return<\/code> komandos, funkcija, baigusi savo veiksmus, gr\u0105\u017eina speciali\u0105 reik\u0161m\u0119 <code>None<\/code>.<\/p>\n<p>&nbsp;<\/p>\n<h2>Pavyzdys: funkcijos k\u016brimas ir kvietimas<\/h2>\n<p>\u0160ioje programoje yra apra\u0161oma funkcija ir keletas veiksm\u0173, naudojan\u010di\u0173 t\u0105 funkcij\u0105. Ar galite atsp\u0117ti k\u0105 atspausdins \u0161i programa?<iframe width='100%' height='480' frameborder='0' scrolling='no' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/OnlinePythonTutor3-cemc\/iframe-embed.html#code=def+square%28x%29%3A++%23+funkcijos+apra%C5%A1ymas%0A++return+x%2Ax++++%23+yra+tik+vienas+veiksmas%0A%0A%23+funkcijos+naudojimas+%28i%C5%A1kvietimas%29%0Aprint%28square%2810%29%29%0Aprint%28square%28square%282%29%29%29&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=3&curInstr=0&resizeContainer=true&highlightLines&width=460&rightStdout=1'><\/iframe><\/p>\n<p>Matome, kad funkcijos pavadinimas yra \u201e<code>square<\/code>\u201c, jai reika pateikti vien\u0105 argument\u0105 (<code>x<\/code>), o funkcijos veiksmuose t\u0117ra viena eilut\u0117 <code>return x*x<\/code>. Po funkcijos yra dvi komandos, kurios j\u0105 i\u0161kvie\u010dia i\u0161 viso 3 kartus.Vykdydami <em>veiksm\u0173 sekim\u0105<\/em>, atkreipkite d\u0117mes\u012f, kad i\u0161kvietus funkcij\u0105, jai yra i\u0161skiriama atskira darbin\u0117 sritis (angl. \"<strong>frame<\/strong>\"). Pasibaigus funkcijai, \u0161i sritis v\u0117l panaikinama (atlaisvinama kompiuterio atmintis).Pasiai\u0161kinkime, kaip pa\u017eingsiniui atliekama programa.<\/p>\n<ol>\n<li>Kai i\u0161kvie\u010diama pirmoji komanda \u00a0<code>square(10)<\/code>,\n<ul>\n<li>Pitonas priskiria duomenis <code>(10)<\/code> argumentui <code>(x)<\/code>. Programa vykdo <code>return x*x<\/code>, \u017einodama, kad <code>x<\/code> reik\u0161m\u0117 yra <code>10<\/code>. Tod\u0117l funkcijos reik\u0161m\u0117 gaunasi <code>100<\/code>. \u00a0Ji ir atspausdinama.<\/li>\n<\/ul>\n<\/li>\n<li>Kai i\u0161kvie\u010diama antroji komanda \u00a0<code>square(square(2))<\/code>,\n<ul>\n<li>Vidin\u0117 dalis (<code>square(2)<\/code>) yra atliekama pirmiau: <code>x<\/code> reik\u0161m\u0117 b\u016bna \u00a0<code>2<\/code>, o funkcijos rezultatas -- <code>4<\/code>.<\/li>\n<li>Po to jau galima \u012fstatyti reik\u0161m\u0119 ir skai\u010diuoti likusi\u0105 i\u0161rai\u0161k\u0105 - dar kart\u0105 kelti kvadratu -- <code>square(4)<\/code>. Tai gr\u0105\u017eina <code>16<\/code>, ir \u0161i reik\u0161m\u0117 atspausdinama.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>Svarbu neu\u017emir\u0161i, kad funkcija yra vykdoma, tik j\u0105 i\u0161kvietus - neu\u017etenka vien apra\u0161ymo. \u00a0Tuo pa\u010diu, i\u0161kviesti funkcij\u0105 galima tik po jos apra\u0161o (ne prie\u0161 j\u012f). \u017dvilgtelkite pavyzd\u012f:<div class='pybox modeNeutral' id='pybox0'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Multiple Choice Exercise: <\/span><span class='title'><\/span><\/div><div> K\u0105 atspausdins \u0161i programa?<\/p>\n<pre>def f(): \u00a0 \u00a0 \u00a0 \u00a0 \u00a0# funkcija su 0 argument\u0173\r\n \u00a0 print(\"in f\")\r\nprint(\"not in f\")\r\nf() \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 # \u010dia i\u0161kvie\u010diame \u201ef\u201c<\/pre><\/div><label>Your choice: <\/label><select id=\"pyselect0\"><option value=\"d\" selected>Select one<\/option><option value=\"w\">2 lines: 'in f', then 'not in f'<\/option><option value=\"w\">3 lines: 'in f', then 'not in f', then 'in f'<\/option><option value=\"r\">2 lines: 'not in f', then 'in f'<\/option><\/select><div class='pyboxbuttons'><input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" name=\"slug\" value=\"10.order\"\/><input type='submit' style='margin:5px;' value='Check answer' onClick='pbMultiCheck(0)'\/><\/div><div class=\"pbresults\" id=\"pyMultiResults0\"><\/div><div class=\"epilogue\">Teisingai! Funkcija <code>f<\/code> yra apibr\u0117\u017eta, ta\u010diau jos veiksmai dar n\u0117ra atliekami. Apibr\u0117\u017e\u0119 funkcij\u0105 mes atspausdiname <code>not in f<\/code>. Tada funkcija kartu su visais joje esamais veiksmai, yra atliekama <code>in f<\/code>.<\/div><\/div>\n<p>Pitone funkcijas galima apra\u0161yti bet kurioje vietoje, bet patartina jas i\u0161vardinti programos prad\u017eioje, kad nesimai\u0161yt\u0173 su pagrindinio algoritmo kodu.<\/p>\n<h2>4 da\u017eniausios klaidos<\/h2>\n<p>1. Da\u017enai, apra\u0161ant funkcij\u0105, <strong>pamir\u0161ima panaudoti <code>return<\/code> <\/strong>komanda.<form class=\"pbform\" action=\"#\" id=\"pbform1\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox1'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div><strong>Pirma klaida<\/strong>: pamir\u0161tas \u00a0<code>return<\/code><div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 84px;'><textarea wrap='off' name='usercode1' id='usercode1'  cols=10 rows=3 readonly='readonly'  style = 'height : 84px;'  class='pyboxCode RO'>\ndef square(x):\n  x*x\nprint(square(10))<\/textarea><\/div>\n<div id='pbhistory1' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit1' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(1)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(1,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse1\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"1\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"d401a99df9d67e64488be6a811464442\"\/>\n<div id='pbresults1' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit1\").value = \"Run program\";document.getElementById(\"inputInUse1\").value = \"N\";<\/script>\nJeigu funkcijoje n\u0117ra <code>return<\/code>, ji gr\u0105\u017eina <code>None<\/code> reik\u0161m\u0119.<table class='pywarn'><tr><td class='pywarnleft'><img src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/warning.png'\/><\/td><td class='pywarnright'><span> Kartais <code>return<\/code> n\u0117ra b\u016btinas. Pavyzd\u017eiui, funkcijose, kurios skirtos rezultato <span style=\"text-decoration: underline;\">atspausdinimui<\/span>:<form class=\"pbform\" action=\"#\" id=\"pbform2\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox2'>\n<div class=\"heading\"><span class='type'>Example: <\/span><span class='title'>Rezultatas spausdinamas, o ne gr\u0105\u017einamas<\/span><\/div> <div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 136px;'><textarea wrap='off' name='usercode2' id='usercode2'  cols=10 rows=5 readonly='readonly'  style = 'height : 136px;'  class='pyboxCode RO'>\ndef repeatedPrint(txt, repetitions):   # funkcija, negr\u0105\u017einanti rezultato \n  for i in range(0, repetitions):\n    print(txt)\n\nrepeatedPrint('Hello, world!', 3)<\/textarea><\/div>\n<div id='pbhistory2' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit2' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(2)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(2,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse2\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"2\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"f05f5fd57252e37580a7b42e50ce51a9\"\/>\n<div id='pbresults2' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit2\").value = \"Run program\";document.getElementById(\"inputInUse2\").value = \"N\";<\/script>\n  <\/span><\/td><\/table><\/p>\n<p>&nbsp;<\/p>\n<p>2. Antra da\u017ena klaida yra susijusi su <strong>atitraukimu - <code>IndentationError<\/code><\/strong>.<form class=\"pbform\" action=\"#\" id=\"pbform3\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox3'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div><strong>Antra klaida<\/strong>: pamir\u0161ome atitraukti<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 84px;'><textarea wrap='off' name='usercode3' id='usercode3'  cols=10 rows=3 readonly='readonly'  style = 'height : 84px;'  class='pyboxCode RO'>\ndef square(x):\nreturn x*x\nprint(square(10))<\/textarea><\/div>\n<div id='pbhistory3' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit3' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(3)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(3,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse3\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"3\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"76a9707ae41952893106ccb9765ef1ba\"\/>\n<div id='pbresults3' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit3\").value = \"Run program\";document.getElementById(\"inputInUse3\").value = \"N\";<\/script>\n<\/p>\n<p>&nbsp;<\/p>\n<p>3. Kaip jau mat\u0117me antrojoje pamokoje, <strong>argument\u0173 skai\u010diaus neatitikimas<\/strong> taip pat i\u0161\u0161aukia klaid\u0105.<form class=\"pbform\" action=\"#\" id=\"pbform4\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox4'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div><strong>Tre\u010dia klaida<\/strong>: kvietimas su per daug argument\u0173.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 84px;'><textarea wrap='off' name='usercode4' id='usercode4'  cols=10 rows=3 readonly='readonly'  style = 'height : 84px;'  class='pyboxCode RO'>\ndef square(x):\n  return x*x\nprint(square(7, 11))<\/textarea><\/div>\n<div id='pbhistory4' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit4' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(4)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(4,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse4\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"4\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"f5b2120c0fc6ad7f25132dea204179c4\"\/>\n<div id='pbresults4' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit4\").value = \"Run program\";document.getElementById(\"inputInUse4\").value = \"N\";<\/script>\n<\/p>\n<p>&nbsp;<\/p>\n<p>4. Gal\u0173 gale, gali pasitaikyti <strong>ra\u0161ybos klaidos<\/strong>. Tai gali atsitikti dviejose vietose, apra\u0161ant arba kvie\u010diant funkcij\u0105. Tokiais atvejais bus prane\u0161imas, kad funkcija n\u0117ra apibr\u0117\u017eta.<form class=\"pbform\" action=\"#\" id=\"pbform5\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox5'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div><strong>Ketvirta klaida<\/strong>: klaidingas pavadinimas<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 84px;'><textarea wrap='off' name='usercode5' id='usercode5'  cols=10 rows=3 readonly='readonly'  style = 'height : 84px;'  class='pyboxCode RO'>\ndef square(x):\n  return x*x\nprint(skware(10))<\/textarea><\/div>\n<div id='pbhistory5' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit5' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(5)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(5,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse5\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"5\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"5155fcb74e9e404c28b06beff82cd471\"\/>\n<div id='pbresults5' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit5\").value = \"Run program\";document.getElementById(\"inputInUse5\").value = \"N\";<\/script>\n<\/p>\n<h2><\/h2>\n<h2>Pabandykite patys<\/h2>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform6\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox6'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Coding Exercise: <\/span><span class='title'>Kubizmas<\/span><\/div>Apra\u0161ykite funkcij\u0105 <code>cube(n)<\/code>, kuri gauna vien\u0105 skai\u010di\u0173 <code>n<\/code> ir gr\u0105\u017eina jo kub\u0105 <code>n<\/code> \u00d7 <code>n<\/code> \u00d7 <code>n<\/code>.<div class=\"helpOuter\" style=\"display: none;\"><div class=\"helpInner\"><div style=\"text-align: center\">You need to create an account and log in to ask a question.<\/div><\/div><\/div><div class='pyboxTextwrap pyboxCodewrap RW resizy'  style='height: 526px;'><textarea wrap='off' name='usercode6' id='usercode6'  cols=10 rows=20   class='pyboxCode RW'>\n# delete this comment and enter your code here\n<\/textarea><\/div>\n<div id='pbhistory6' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput6\">Enter testing statements like <code>print(myfunction(\"test argument\"))<\/code> below.<div class=\"pyboxTextwrap resizy\" style=\"height: 102px;\" ><textarea wrap=\"off\" name=\"userinput\" class=\"pyboxInput\" cols=10 rows=4><\/textarea><\/div><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit6' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch6\" value=\"Input Switch\" onclick=\"pbInputSwitch(6,'Y')\" ><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(6)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(6,'Y')\" ><\/td>\n<\/tr><\/table><select id='pbSelect6' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='history' data-pbonclick=\"historyClick(6,'10.cube')\" >History<\/option>\n<option name='help' data-pbonclick=\"helpClick(6);\" >Help<\/option>\n<\/select><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse6\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"6\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"db59db93007b37005f3abd69d32d50e6\"\/>\n<div id='pbresults6' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(6);});pbInputSwitch(6,\"Y\");<\/script>\n<\/p>\n<p>&nbsp;<\/p>\n<h2>Du ar daugiau argument\u0173 <img decoding=\"async\" class=\"alignright\" src=\"..\/wp-content\/lesson_files\/img\/10\/area-triangle.png\" alt=\"\" \/><\/h2>\n<p>Auk\u0161\u010diau esanti funkcija naudoja tik vien\u0105 argument\u0105, ta\u010diau j\u0173 gali b\u016bti bet kiek. Pavyzd\u017eiui, jau esame kviet\u0119 <code>input()<\/code>, kuriai nereikalingas nei vienas argumentas.Pavyzd\u017eiui, funkcijai trikampio plotui skai\u010diuoti reikalingi <strong>du argumentai<\/strong>: trikampio pagrindo ilgis ir auk\u0161tin\u0117.<\/p>\n<p style=\"text-align: center;\">area = base \u00d7 height \/ 2<br \/>\nplotas = pagrindas \u00d7 auk\u0161tin\u0117 \/ 2<\/p>\n<p>\u010cia reik\u0117s 2 argument\u0173: \u00a0<code>def \u00abfunkcijos_vardas\u00bb(\u00abargumentas1\u00bb, \u00abargumentas2\u00bb)<\/code>.<\/p>\n<p><iframe width='100%' height='480' frameborder='0' scrolling='no' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/OnlinePythonTutor3-cemc\/iframe-embed.html#code=def+triangleArea%28pagrindas%2C+aukstine%29%3A%0A++return+pagrindas%2Aaukstine%2F2%0A%0Aprint%28triangleArea%283%2C+5%29%29%0Aprint%28triangleArea%284%2C+2%29%29&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=3&curInstr=0&resizeContainer=true&highlightLines&width=345&rightStdout=1'><\/iframe><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignright\" style=\"color: #333333; font-style: normal; line-height: 24px; margin-top: 0.4em;\" src=\"..\/wp-content\/lesson_files\/img\/10\/peri-rect.png\" alt=\"\" width=\"232\" height=\"190\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Paskutiniame pratime paskai\u010diuosime sta\u010diakampio perimetr\u0105 (vis\u0173 kra\u0161tini\u0173 sum\u0105). Pagal de\u0161in\u0117je esant\u012f br\u0117\u017einuk\u0105, tikt\u0173 formul\u0117:<\/p>\n<p style=\"text-align: center;\"><img src='https:\/\/s0.wp.com\/latex.php?latex=%5Ctextrm%7Bperimetras+%3D+%28height+%2B+width%29+%2A+2+%7D&#038;bg=T&#038;fg=000000&#038;s=2' alt='\\textrm{perimetras = (height + width) * 2 }' title='\\textrm{perimetras = (height + width) * 2 }' class='latex' \/><\/p>\n<p style=\"text-align: left;\"><br\/> <br\/><\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform7\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox7'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Coding Exercise: <\/span><span class='title'>Sta\u010diakampio perimetras<\/span><\/div>Apibr\u0117\u017ekite funkcij\u0105 <code>rectanglePerimeter(width, height)<\/code>, kuri suskai\u010diuos sta\u010diakampio perimetr\u0105. <div class=\"helpOuter\" style=\"display: none;\"><div class=\"helpInner\"><div style=\"text-align: center\">You need to create an account and log in to ask a question.<\/div><\/div><\/div><div class='pyboxTextwrap pyboxCodewrap RW resizy'  style='height: 526px;'><textarea wrap='off' name='usercode7' id='usercode7'  cols=10 rows=20   class='pyboxCode RW'>\n# delete this comment and enter your code here\n<\/textarea><\/div>\n<div id='pbhistory7' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput7\">Enter testing statements like <code>print(myfunction(\"test argument\"))<\/code> below.<div class=\"pyboxTextwrap resizy\" style=\"height: 102px;\" ><textarea wrap=\"off\" name=\"userinput\" class=\"pyboxInput\" cols=10 rows=4><\/textarea><\/div><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit7' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch7\" value=\"Input Switch\" onclick=\"pbInputSwitch(7,'Y')\" ><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(7)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(7,'Y')\" ><\/td>\n<\/tr><\/table><select id='pbSelect7' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='history' data-pbonclick=\"historyClick(7,'10.rectangle')\" >History<\/option>\n<option name='help' data-pbonclick=\"helpClick(7);\" >Help<\/option>\n<\/select><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse7\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"7\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"d399a30c206ed42ee7fbc04e36169716\"\/>\n<div id='pbresults7' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(7);});pbInputSwitch(7,\"Y\");<\/script>\n<\/p>\n<p>&nbsp;<\/p>\n<h3>Funkcijos, kvie\u010dian\u010dios funkcijas<\/h3>\n<p>Funkcijos yra gerai suprojektuot\u0173 dideli\u0173 program\u0173 \u201eplytos\u201c. Funkcijos leid\u017eia pakartoti veiksmus, j\u0173 neapra\u0161ant daug kart\u0173, o tik pakartotinai i\u0161kvie\u010diant funkcij\u0105. \u00a0Beje, funkcijose galime naudoti kitas funkcijas.Programavimo pratikoje yra rekomenduojama laikytis \u201eDRY KISS\u201c princip\u0173 -- jie rei\u0161kia:<\/p>\n<ul>\n<li>\u201eDon't Repeat Yourself\u201c \u00a0(neapra\u0161in\u0117ti kelis kartus to paties)<\/li>\n<li>\u201eKeep It Simple Stupid\u201c \u00a0(organizuoti program\u0105 taip, kad joje b\u016bt\u0173 kuo lengviau susigaudyti (net ir kvailiams) )<\/li>\n<\/ul>\n<p>Funkcijos padeda \u012fgyvendinti abu \u0161iuos principus :).<table class='pywarn'><tr><td class='pywarnleft'><img src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/warning.png'\/><\/td><td class='pywarnright'><span> <em>Ar galite atsp\u0117ti k\u0105 daro \u0161i programa? <\/em>Prisiminkime, ko mok\u0117m\u0117s 4-oje pamokoje, daugindami tekst\u0105 i\u0161 skai\u010diaus -- gauname teksto pakartojim\u0105. Pavyzd\u017eiui, <code>\"tar\"*2<\/code> tampa <code>\"tartar\"<\/code>. <\/span><\/td><\/table><em id=\"funcfunc\">Galite patraukti vertikali\u0105 pilk\u0105 linij\u0105 \u012f \u0161on\u0105, kad matytume daugiau kodo.<\/em><iframe width='100%' height='480' frameborder='0' scrolling='no' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/OnlinePythonTutor3-cemc\/iframe-embed.html#code=def+inner%28string%2C+width%29%3A%0A++return+string+%2B+%22+%22+%2A+%28width+-+len%28string%29%29%0A%0Adef+outer%28string1%2C+string2%29%3A%0A++w+%3D+max%28len%28string1%29%2C+len%28string2%29%29%0A++print%28%22%2A%22+%2A+%28w+%2B+4%29%29%0A++print%28%22%2A+%22+%2B+inner%28string1%2C+w%29+%2B+%22+%2A%22%29%0A++print%28%22%2A+%22+%2B+inner%28string2%2C+w%29+%2B+%22+%2A%22%29%0A++print%28%22%2A%22+%2A+%28w+%2B+4%29%29%0A%0Aouter%28%22Box+number+one%22%2C+%22is+very+fun%22%29%0Aouter%28%22Box+%232%22%2C+%22%28not+False%29+is+%22+%2B+str%28not+False%29%29&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=3&curInstr=0&resizeContainer=true&highlightLines&width=400&rightStdout=1'><\/iframe>Vykdant veiksm\u0173 sekim\u0105, galite pasteb\u0117ti, kaip funkcija \u201e<code>inner<\/code>\u201c i\u0161kvie\u010diama i\u0161 \u00a0funkcijos \u201e<code>outer<\/code>\u201c. 8-tame vykdymo \u017eingsnyje matome, kad yra 3 darbin\u0117s sritys (\"frames\"): globali, \u201e<code>outer<\/code>\u201c, ir k\u0105 tik atsiradusi \u201e<code>inner<\/code>\u201c. Funkcija \u201e<code>outer<\/code>\u201c laukia, kol \u201e<code>inner<\/code>\u201c baigsis, ir tada toliau t\u0119siama. Pabandykite atid\u017eiai \u201epra\u017eingsniuoti\u201cper vis\u0105 program\u0105 ir sekti funkcij\u0173 darbines sritis.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0160ioje pamokoje i\u0161moksime vien\u0105 svarbiausi\u0173 programavimo id\u0117j\u0173 -- funkcij\u0173 k\u016brim\u0105! Naudodami funkcijas galime programas padaryti trumpesn\u0117mis, geriau-organizuotomis, lengviau skaitomomomis ir panaudojamomis. Tolimesn\u0117se pamokose ap\u017evelgsime kitus naudingus Pitono elementus, tokius kaip rekursij\u0105 (recursion). Kaip apibr\u0117\u017eti funkcij\u0105? Prad\u0117sime nuo pavyzd\u017eio. Ar atsimenate &hellip; <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/10-lt\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-8259","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/8259","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/comments?post=8259"}],"version-history":[{"count":15,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/8259\/revisions"}],"predecessor-version":[{"id":8548,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/8259\/revisions\/8548"}],"wp:attachment":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/media?parent=8259"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}