{"id":6122,"date":"2012-11-05T19:57:38","date_gmt":"2012-11-06T00:57:38","guid":{"rendered":"http:\/\/cscircles.cemc.uwaterloo.ca\/?page_id=6122"},"modified":"2019-03-04T10:52:24","modified_gmt":"2019-03-04T15:52:24","slug":"10-def-nl","status":"publish","type":"page","link":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/10-def-nl\/","title":{"rendered":"10: Functies"},"content":{"rendered":"<p>In deze les laten we je het belangrijkste idee van programmeren zien: je eigen functies defini\u00ebren! Functies zorgen ervoor dat je programma korter wordt, beter gestructureerd, en in onderdelen herbruikbaar. In latere lessen zullen we andere voordelen zien zoals <em>recursie<\/em>.<\/p>\n<h1>Een functie defini\u00ebren<\/h1>\n<p>We beginnen met een voorbeeld. Ken je de functie <code>abs<\/code> nog? Ze neemt \u00e9\u00e9n argument (een getal <em>x<\/em>), en ze geeft als resultaat de absolute waarde van <em>x<\/em> terug\u00a0(m.a.w.\u00a0<em>x<\/em> wanneer <em>x <\/em>\u2265 0, en -<em>x<\/em> wanneer <em>x<\/em> &lt; 0). Kijk hoe we deze functie in Python defini\u00ebren:<\/p>\n<pre>def abs(x): \u00a0 \u00a0 # definieer een functie met als naam 'abs' die \u00e9\u00e9n parameter heeft namelijk 'x'\r\n \u00a0if x &gt;= 0: \u00a0 \u00a0# het lichaam van de functie start hier\r\n    return x\r\n \u00a0else:\r\n \u00a0 \u00a0return -x \u00a0 # het lichaam van de functie stopt hier<\/pre>(Klik <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/console\/?consolecode=def%20abs%28x%29%3A%20%23Functiedefinitie%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%20Het%20hoofd-programma%20begint%20hier%0Aprint%28abs%28-5%29%29%0Aprint%28abs%2810%29%29\" target=\"_blank\">hier<\/a> om deze code in de console te testen.)<\/p>\n<h2>De twee delen van een functiedefinitie<\/h2>\n<p>In de eerste regel van een functiedefinitie staan de <em>naam<\/em> van de functie en haar\u00a0<em>parameters<\/em>. De regel is van de vorm<\/p>\n<p><code>def \u00abfunctie-naam\u00bb(\u00abparameterlijst\u00bb):<\/code><\/p>\n<p>In het voorbeeld hierboven is\u00a0<code>abs<\/code> de naam van de functie en bestaat de parameterlijst uit \u00e9\u00e9n element, namelijk <code>x<\/code>. Het wordt een <em>parameterlijst<\/em> genoemd omdat het meerdere parameters kunnen zijn, zoals\u00a0 <code>x, y, z<\/code>; het is ook mogelijk om 0 parameters te hebben, met andere woorden een lege lijst. Bij een oproep van een functie moet je precies zoveel argumenten opgeven als de functie parameters heeft, dus voor elke parameter van de functie \u00e9\u00e9n argument. Bij een oproep <code>abs(5)<\/code> van de hierboven gedefinieerde functie <code>abs<\/code> zeggen we dan ook dat 5 <em>het argument<\/em> is <em>voor de parameter<\/em> <code>x<\/code>.<\/p>\n<p>Alles na de eerste regel van de definitie van een functie is het <em>lichaam<\/em> van de functie. Het lichaam is een ingesprongen blok met opdrachten. Wanneer de functie wordt aangeroepen, wordt het lichaam uitgevoerd, waarbij elke parameter de waarde krijgt van het overeenkomstige argument van de functie-oproep. Wanneer we tenslotte de volgende regel in het lichaam van de functie bereiken:<\/p>\n<p><code>return \u00abwaarde\u00bb<\/code><\/p>\n<p>stopt de functie en geeft <code>\u00abwaarde\u00bb<\/code> als resultaatwaarde terug<strong>. <\/strong>Zoals het <code>abs<\/code>-voorbeeld laat zien kan het lichaam meerdere <code>return<\/code>-opdrachten bevatten; alleen de eerste heeft echter effect omdat daarna de functie stopt.<\/p>\n<h2>Voorbeeld: Definitie en aanroep van een functie<\/h2>\n<p>Het volgende programma bevat een definitie van een functie en enkele andere opdrachten die worden uitgevoerd nadat de functie is gedefinieerd.<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform0\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox0'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div>Kwadraat-functie<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 162px;'><textarea wrap='off' name='usercode0' id='usercode0'  cols=10 rows=6 readonly='readonly'  style = 'height : 162px;'  class='pyboxCode RO'>\ndef kwadraat(x):  # functiedefinitie\n    return x*x  # de body bestaat slechts uit een enkele regel\n\n# gebruik de functie, nu deze gedefinieerd is\nprint(kwadraat(10))        \nprint(kwadraat(kwadraat(2)))<\/textarea><\/div>\n<div id='pbhistory0' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit0' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(0)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(0,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse0\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"0\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"b47fde4901d2eec5dccfdd8a2fc45ef0\"\/>\n<div id='pbresults0' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit0\").value = \"Run program\";document.getElementById(\"inputInUse0\").value = \"N\";<\/script>\n<\/p>\n<p>We zien dat de naam van de functie <code>square<\/code> is, met slechts \u00e9\u00e9n parameter\u00a0<code>x<\/code>, en dat het lichaam van de functie\u00a0bestaat uit \u00e9\u00e9n regel: <code>return x*x<\/code>. Verder, buiten de functie, zijn er twee opdrachten die de functie in totaal drie keer aanroepen.<\/p>\n<ol>\n<li>Wanneer de eerste opdracht wordt uitgevoerd, moet Python <code>square(10)<\/code> evalueren.\n<ul>\n<li>Python vergelijkt de argumentenlijst <code>(10)<\/code> met de parameterlijst\u00a0<code>(x)<\/code>. Het voert het lichaam van de functie uit, nl.: <code>return x*x<\/code>, waarbij het zich herinnert dat\u00a0<code>x<\/code> gelijk is aan <code>10<\/code>. Dus geeft <code>x*x<\/code> het resultaat <code>100<\/code> en dat wordt afgedrukt.<\/li>\n<\/ul>\n<\/li>\n<li>Wanneer de tweede opdracht wordt uitgevoerd, moet Python\u00a0<code>square(square(2))<\/code> evalueren.\n<ul>\n<li>Het binnenste deel\u00a0<code>square(2)<\/code> wordt eerst uitgevoerd. We nemen voor <code>x<\/code> het getal <code>2<\/code> en voeren het lichaam van de functie uit. Dat geeft als resultaat <code>4<\/code>.<\/li>\n<li>Dan wordt de buitenste uitdrukking uitgevoerd, en omdat <code>square(2)<\/code> het getal <code>4<\/code> heeft teruggegeven, roepen we nu\u00a0<code>square(4)<\/code> aan. Dit levert <code>16<\/code>\u00a0als resultaatwaarde, en dat wordt afgedrukt.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>Zoals gebruikelijk kun je het programma uitproberen in\u00a0<a href=\"http:\/\/cscircles.cemc.uwaterloo.ca\/visualize\">Python3 Visualizer<\/a>.<\/p>\n<h2>Vier vaak voorkomende fouten<\/h2>\n<p>Een vaak voorkomende fout die je kunt maken bij de definitie van een functie is het vergeten van\u00a0de <code>return<\/code>-opdracht.<\/p>\n<p><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>Fout 1: <code>return<\/code> vergeten<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>\n<\/p>\n<p>Zoals je kunt zien: wanneer geen <code>return<\/code>-opdracht in het lichaam voorkomt, geeft de functie <code>None<\/code> als resultaat. Dus, wanneer je bij een oefening niet het gewenste resultaat krijgt omdat de functie\u00a0<code>None<\/code> teruggeeft dan is het probleem vaak dat er bij de uitvoering van de functie geen <code>return<\/code>-opdracht uitgevoerd is.<\/p>\n<p><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> Je kunt ook de <code>return<\/code>-opdracht met reden weglaten. Dit is zinvol als je functie een neveneffect heeft anders dan het geven van een resultaatwaarde: <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'>Een neveneffect en geen return-opdracht<\/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 herhaalPrint(string, herhalingen):   # geen enkele return in deze functie\n  for i in range(0, herhalingen):\n    print(string)\n\nherhaalPrint('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=\"89ffe0e8dd2c4c42db5432bc47e0ddb7\"\/>\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>Een andere veelvoorkomende fout is vergeten om in te springen, hetgeen resulteert in <code>IndentationError<\/code>.<\/p>\n<p><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>Fout 2: vergeten om in te springen<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>Zoals we in les 2 zagen, veroorzaakt het aanroepen van een functie met te weinig of te veel argumenten een fout.<\/p>\n<p><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>Fout 3: aanroep met te veel argumenten<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>Tenslotte, wanneer je een tikfout maakt bij de aanroep van een functie, krijg je een foutmelding waarbij gemeld wordt dat de functie niet gedefinieerd is.<\/p>\n<p><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>Fout 4: verkeerde naam<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>Probeer het zelf<\/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'>Tot de derde macht<\/span><\/div>Definieer een functie <code>derdeMacht(n)<\/code>, die \u00e9\u00e9n getal\u00a0<code>n<\/code>\u00a0als argument neemt, en\u00a0<code>n<\/code>\u00a0\u00d7\u00a0<code>n<\/code>\u00a0\u00d7\u00a0<code>n<\/code> als resultaat teruggeeft.<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=\"3ed377ef613d5e80c4c5d68616fe4276\"\/>\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<h2>Twee of meer argumenten<img loading=\"lazy\" decoding=\"async\" class=\"alignright\" src=\"\/wp-content\/lesson_files\/img\/10\/area-triangle.png\" alt=\"\" width=\"176\" height=\"219\" \/><\/h2>\n<p>De functies hierboven hebben slechts \u00e9\u00e9n argument, maar een functie kan een willekeurig aantal argumenten accepteren. Je hebt bijvoorbeeld al\u00a0<code>input()<\/code> met 0 argumenten aangeroepen (en je zult een functie defini\u00ebren met 0 argumenten in les 15A).<\/p>\n<p>Hier is een voorbeeld van een functie uit de meetkunde met twee argumenten. Neem aan dat we een functie nodig hebben om de oppervlakte van een driehoek uit te rekenen, waarbij de lengte van de basis en de bijbehorende hoogte zijn gegeven. De formule voor de oppervlakte is<\/p>\n<p>oppervlakte = basis \u00d7 hoogte \/ 2<\/p>\n<p>Dan kunnen we in Python een functie\u00a0<code>driehoekOpp<\/code> als volgt defini\u00ebren:<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform7\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox7'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div>Een functie met twee argumenten<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 110px;'><textarea wrap='off' name='usercode7' id='usercode7'  cols=10 rows=4 readonly='readonly'  style = 'height : 110px;'  class='pyboxCode RO'>\ndef driehoekOpp(basis, hoogte):\n  return basis*hoogte\/2\nprint(driehoekOpp(3, 5))\nprint(driehoekOpp(4, 2))<\/textarea><\/div>\n<div id='pbhistory7' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit7' value=' '\/><\/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,'N')\" ><\/td>\n<\/tr><\/table><\/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=\"5e67dbe3d9f3e565818aa4b98df3a8fc\"\/>\n<div id='pbresults7' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit7\").value = \"Run program\";document.getElementById(\"inputInUse7\").value = \"N\";<\/script>\n<\/p>\n<p><img decoding=\"async\" class=\"alignright\" src=\"\/wp-content\/lesson_files\/img\/10\/peri-rect.png\" alt=\"\" \/>Zoals je kunt zien, is de enige verandering dat we <code>def \u00abfunctienaam\u00bb(\u00abargument1\u00bb)<\/code> veranderen in <code>def \u00abfunctienaam\u00bb(\u00abargument1\u00bb, \u00abargument2\u00bb)<\/code>.<\/p>\n<p>In de laatste oefening vragen we je om een functie met twee argumenten te schrijven, waarmee je de omtrek van een rechthoek kunt berekenen (de omtrek is de totale lengte van alle zijden). Bij een rechthoek met een gegeven breedte en hoogte, wordt de omtrek gegeven door de volgende formule:<\/p>\n<p>omtrek = breedte + hoogte + breedte + hoogte<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform8\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox8'>\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'>Rechthoek<\/span><\/div>Definieer een functie <code>omtrek(breedte, hoogte)<\/code>, die de omtrek van een rechthoek berekent.<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='usercode8' id='usercode8'  cols=10 rows=20   class='pyboxCode RW'>\n# delete this comment and enter your code here\n<\/textarea><\/div>\n<div id='pbhistory8' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput8\">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='submit8' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch8\" value=\"Input Switch\" onclick=\"pbInputSwitch(8,'Y')\" ><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(8)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(8,'Y')\" ><\/td>\n<\/tr><\/table><select id='pbSelect8' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='history' data-pbonclick=\"historyClick(8,'10.rectangle')\" >History<\/option>\n<option name='help' data-pbonclick=\"helpClick(8);\" >Help<\/option>\n<\/select><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse8\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"8\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"44d1cedcc62e3ea1658997cb9c2b2842\"\/>\n<div id='pbresults8' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(8);});pbInputSwitch(8,\"Y\");<\/script>\n<\/p>\n<h3>Functies die functies aanroepen<\/h3>\n<p>Functies zijn de bouwstenen van goed geschreven grote programma's: je kunt dezelfde taak twee keer uitvoeren zonder dezelfde code twee keer te schrijven, en je kunt oplossingen van veelvoorkomende taken opnieuw gebruiken. Hier is een voorbeeld van het schrijven van een functie die gebruikt wordt in een andere functie.<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform9\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox9'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div><em>Kun je voorspellen wat deze functie doet voordat je het programma uitvoert?<\/em><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> Herinner je uit les 4 dat de vermenigvuldiging van strings met een geheel getal\u00a0 inhoudt dat de string dit aantal keren herhaald wordt. Zo is bijvoorbeeld\u00a0<code>\"tar\"*2 gelijk aan \"tartar\"<\/code>. <\/span><\/td><\/table><div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 318px;'><textarea wrap='off' name='usercode9' id='usercode9'  cols=10 rows=12 readonly='readonly'  style = 'height : 318px;'  class='pyboxCode RO'>\ndef inner(string, width):\n  return string + \" \" * (width - len(string))\n\ndef outer(string1, string2):\n  w = max(len(string1), len(string2))\n  print(\"*\" * (w + 4))\n  print(\"* \" + inner(string1, w) + \" *\")\n  print(\"* \" + inner(string2, w) + \" *\")\n  print(\"*\" * (w + 4))\n\nouter(\"Box number one\", \"is very fun\")\nouter(\"Box #2\", \"(not False) is \" + str(not False))<\/textarea><\/div>\n<div id='pbhistory9' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit9' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(9)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(9,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse9\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"9\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"b3f1e99d867c3a8e50987a740ff5d87b\"\/>\n<div id='pbresults9' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit9\").value = \"Run program\";document.getElementById(\"inputInUse9\").value = \"N\";<\/script>\n<\/p>\n<p>Je bent nu klaar voor de volgende les!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In deze les laten we je het belangrijkste idee van programmeren zien: je eigen functies defini\u00ebren! Functies zorgen ervoor dat je programma korter wordt, beter gestructureerd, en in onderdelen herbruikbaar. In latere lessen zullen we andere voordelen zien zoals recursie. &hellip; <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/10-def-nl\/\">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-6122","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/6122","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=6122"}],"version-history":[{"count":25,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/6122\/revisions"}],"predecessor-version":[{"id":11210,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/6122\/revisions\/11210"}],"wp:attachment":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/media?parent=6122"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}