{"id":6197,"date":"2012-11-05T20:46:44","date_gmt":"2012-11-06T01:46:44","guid":{"rendered":"http:\/\/cscircles.cemc.uwaterloo.ca\/?page_id=6197"},"modified":"2019-03-01T11:20:42","modified_gmt":"2019-03-01T16:20:42","slug":"1e-errors-nl","status":"publish","type":"page","link":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/1e-errors-nl\/","title":{"rendered":"01E: Errors"},"content":{"rendered":"<p>Wanneer je programmeert zul je regelmatig fouten (ook wel\u00a0<em>errors<\/em> of\u00a0<em>bugs<\/em> genaamd) maken. Het voorkomen, begrijpen, en herstellen van fouten is een belangrijk onderdeel van programmeren. Python zal zijn best doen om alles precies zo uit te voeren als je het vraagt, maar als Python niet begrijpt wat je vraagt, dan zal het programma niet uitgevoerd worden. Python zal dan proberen je enige informatie te geven over wat er mis ging, om je te helpen de fout te herstellen.<br \/>\nHier volgen twee fouten in een Python-programma.<\/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='type'>Example: <\/span><span class='title'>Een fout tegen de grammatica (syntax error)<\/span><\/div> <div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 32px;'><textarea wrap='off' name='usercode0' id='usercode0'  cols=10 rows=1 readonly='readonly'  style = 'height : 32px;'  class='pyboxCode RO'>\nprint \"Hallo wereld\"<\/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<\/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=\"2f184870fa817126e8d28fd6c9a97671\"\/>\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>In dit eerste voorbeeld vergaten we de haakjes te gebruiken die nodig zijn bij <code>print(...)<\/code>. Python begrijpt niet wat je vraagt te doen.<\/p>\n<p>Hier is een tweede voorbeeld van een bug (fout) in Python.<\/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='type'>Example: <\/span><span class='title'>Een runtime error<\/span><\/div> <div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 32px;'><textarea wrap='off' name='usercode1' id='usercode1'  cols=10 rows=1 readonly='readonly'  style = 'height : 32px;'  class='pyboxCode RO'>\nprint(test)<\/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<\/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=\"ebe6d66d8f4c7a89d0bad6dd18137174\"\/>\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>In het tweede voorbeeld zijn we vergeten de variabele <code>test<\/code>\u00a0te defini\u00ebren. Python begrijpt wat je wilt, maar omdat\u00a0<code>test<\/code>\u00a0niet is gedefinieerd, treedt er een fout op.<\/p>\n<p>Een <strong>syntax error<\/strong> (fout tegen de grammatica) treedt op wanneer Python\u00a0niet begrijpt wat je wilt zeggen. Een <strong>runtime error<\/strong>\u00a0treedt op wanneer Python begrijpt wat je wilt zeggen, maar vervolgens is Python niet in staat de opdracht uit te voeren.<\/p>\n<p>In het Nederlands zou een <strong>syntax error (fout tegen de grammatica)<\/strong> bijvoorbeeld zijn:<\/p>\n<p><em>De kachel kat hond aap.<\/em><\/p>\n<p>Deze zin is grammaticaal onjuist. Er ontbreekt een <em>werkwoord <\/em>(actie). Het is niet te begrijpen wat er bedoeld wordt. <em>Syntax<\/em> betekent hetzelfde als <em>grammatica<\/em>.<\/p>\n<p>In het Nederlands geeft de volgende zin een <strong>runtime error<\/strong>:<\/p>\n<p><em>Eet de piano.<\/em><\/p>\n<p>Grammaticaal is de zin correct \u2014\u00a0er is een werkwoord en een zelfstandig naamwoord op de juiste plaats \u2014 en het is duidelijk wat je moet doen. Maar, er is een probleem wanneer je zou beginnen met het eten van de piano (tenzij je een termiet bent).<\/p>\n<p>Een derde soort fouten zijn de\u00a0<strong>logische fouten<\/strong>: dat houdt in dat je programma wordt uitgevoerd zonder vast te lopen, maar niet het goede resultaat oplevert.<br \/>\nEen voorbeeld hiervan in het Nederlands is:<br \/>\n<em>Sluit aub de achterdeur zodat er geen muizen kunnen binnen komen.<\/em><br \/>\nDit zou een fout zijn tegen de logica als bijvoorbeeld de <em>voordeur<\/em> ook open staat, ook al heeft de opdracht zin en kun je de achterdeur sluiten. Maar het voldoet niet aan het doel de muizen buiten te houden, omdat ze nog steeds door de voordeur naar binnen kunnen komen.<\/p>\n<h2>Vaak voorkomende syntax errors in Python<\/h2>\n<p>Hier volgen enkele vaak voorkomende fouten tegen de grammatica van Python.<br \/>\n<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'>Syntax Error<\/span><\/div> <div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 32px;'><textarea wrap='off' name='usercode2' id='usercode2'  cols=10 rows=1 readonly='readonly'  style = 'height : 32px;'  class='pyboxCode RO'>\nprint(Hello, World!)<\/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<\/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=\"80d6dfb117099dfcb872a4f163891626\"\/>\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<\/p>\n<p>Python reageert met <code>SyntaxError: invalid syntax<\/code> en wijst met <code>^<\/code> naar het uitroepteken <code>!<\/code> . Het probleem is dat dit teken daar geen betekenis heeft in Python. De syntax error treedt niet op als we <code>print(\"Hello, World!\")<\/code> intikken, want dankzij de aanhalingstekens begrijpt Python dat het uitroepteken deel is van de tekst <code>Hello, World!<\/code>.<br \/>\nHier volgt een syntax error die nog meer kennis vraagt:<br \/>\n<form class=\"pbform\" action=\"#\" id=\"pbform3\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox3'>\n<div class=\"heading\"><span class='type'>Example: <\/span><span class='title'>Syntax Error<\/span><\/div> <div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 32px;'><textarea wrap='off' name='usercode3' id='usercode3'  cols=10 rows=1 readonly='readonly'  style = 'height : 32px;'  class='pyboxCode RO'>\nclass = \"Geavanceerde computerkennis voor beginners\"<\/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<\/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=\"4369dd878bcd784492289dfdf4b8cec9\"\/>\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>\nHet probleem is dat <code>class<\/code> een speciaal woord is in Python. Wanneer je <code>course<\/code> in plaats van class had geschreven zou dat in orde zijn geweest. Klik <a class=\"hintlink\"  id=\"hintlink4\">hier<\/a> om de lijst met alle gereserveerde \"woorden\" in Python te bekijken.<\/p>\n<p>Wanneer je aanhalingstekens gebruikt en het tweede vergeet, of wanneer je haakjes gebruikt en het tweede vergeet, zul je ook syntax errors krijgen.<\/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='type'>Example: <\/span><span class='title'>Syntax Error<\/span><\/div>Het tweede aanhalingsteken ontbreekt<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 32px;'><textarea wrap='off' name='usercode5' id='usercode5'  cols=10 rows=1 readonly='readonly'  style = 'height : 32px;'  class='pyboxCode RO'>\nname = \"Jim<\/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<\/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=\"2b9b36f18baf10a204853abe445376e8\"\/>\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<p><strong>EOL<\/strong> is hier de afkorting van <strong>E<\/strong>nd <strong>O<\/strong>f <strong>L<\/strong>ine: Python verwachtte meer, namelijk een <code>\"<\/code>, voordat het het einde van de regel bereikte.<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform6\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox6'>\n<div class=\"heading\"><span class='type'>Example: <\/span><span class='title'>Syntax Error<\/span><\/div>Het haakje sluiten ontbreekt<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 32px;'><textarea wrap='off' name='usercode6' id='usercode6'  cols=10 rows=1 readonly='readonly'  style = 'height : 32px;'  class='pyboxCode RO'>\nprint(77<\/textarea><\/div>\n<div id='pbhistory6' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit6' value=' '\/><\/td>\n<\/tr><\/table><\/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=\"baaaabc8327952d3de7cddd98e61eb2f\"\/>\n<div id='pbresults6' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit6\").value = \"Run program\";document.getElementById(\"inputInUse6\").value = \"N\";<\/script>\n<\/p>\n<p><strong>EOF<\/strong>\u00a0is de afkorting van <strong>E<\/strong>nd <strong>O<\/strong>f <strong>F<\/strong>ile: Python bleef zoeken naar <code>)<\/code>, maar het eind van het programma werd bereikt voordat het sluithaakje werd gevonden.<\/p>\n<h2>Runtime errors<\/h2>\n<p>Nu volgen een paar runtime errors. Python is in staat te begrijpen wat het programma zegt, maar komt in de problemen wanneer het de instructies probeert uit te voeren.<\/p>\n<ul>\n<li>gebruik van een ongedefinieerde variabele. Dit kan ook gebeuren wanneer je de hoofdletters of kleine letters niet precies gebruikt: <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 niet gedefinieerde variabele<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 58px;'><textarea wrap='off' name='usercode7' id='usercode7'  cols=10 rows=2 readonly='readonly'  style = 'height : 58px;'  class='pyboxCode RO'>\ncallMe = \"Misschien\"\nprint(callme)<\/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<\/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=\"d642f851871d252928ebb7620a3df009\"\/>\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<\/li>\n<li>delen door 0, hetgeen geen betekenis heeft in de wiskunde. (Waarom? Omdat 0 keer elk getal gelijk is aan 0. Er is geen waarde voor <em>X<\/em>\u00a0te vinden zodanig dat 1 = <em>X<\/em> * 0, waaruit volgt dat 1\/0 ongedefinieerd is.) <form class=\"pbform\" action=\"#\" id=\"pbform8\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox8'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div>Delen door 0<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 32px;'><textarea wrap='off' name='usercode8' id='usercode8'  cols=10 rows=1 readonly='readonly'  style = 'height : 32px;'  class='pyboxCode RO'>\nprint(1\/0)<\/textarea><\/div>\n<div id='pbhistory8' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit8' value=' '\/><\/td>\n<\/tr><\/table><\/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=\"09f9746176a2d4230f0c6fff91c10e14\"\/>\n<div id='pbresults8' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit8\").value = \"Run program\";document.getElementById(\"inputInUse8\").value = \"N\";<\/script>\n<\/li>\n<li>operatoren gebruiken met verkeerde types van data <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>Optellen van tekst en een getal<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 32px;'><textarea wrap='off' name='usercode9' id='usercode9'  cols=10 rows=1 readonly='readonly'  style = 'height : 32px;'  class='pyboxCode RO'>\nprint(\"Je kunt niet tekst en een getal optellen\" + 12)<\/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<\/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=\"f51f400463a075812e07d2acc39f3110\"\/>\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<\/li>\n<\/ul>\n<p>Je zult meer mogelijkheden ontdekken om fouten te produceren wanneer je meer over Python leert.<\/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> Wat is, in technische zin, het verschil tussen syntax errors and runtime errors? Hier volgt een voorbeeld waarbij een runtime error wordt vergeleken met een syntax error. Kijk naar de uitvoer van elk van de programma's.<form class=\"pbform\" action=\"#\" id=\"pbform10\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox10'>\n<div class=\"heading\"><span class='type'>Example: <\/span><span class='title'>Runtime error<\/span><\/div> <div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 58px;'><textarea wrap='off' name='usercode10' id='usercode10'  cols=10 rows=2 readonly='readonly'  style = 'height : 58px;'  class='pyboxCode RO'>\nprint(\"Hier zie je tekst\")\nprint(1\/0)<\/textarea><\/div>\n<div id='pbhistory10' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit10' value=' '\/><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse10\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"10\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"a6da98cce1d08fc2832e2fbdecab2e40\"\/>\n<div id='pbresults10' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit10\").value = \"Run program\";document.getElementById(\"inputInUse10\").value = \"N\";<\/script>\n <form class=\"pbform\" action=\"#\" id=\"pbform11\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox11'>\n<div class=\"heading\"><span class='type'>Example: <\/span><span class='title'>Syntax Error<\/span><\/div> <div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 58px;'><textarea wrap='off' name='usercode11' id='usercode11'  cols=10 rows=2 readonly='readonly'  style = 'height : 58px;'  class='pyboxCode RO'>\nprint(\"Hier zie je tekst\")\nprint(1*0<\/textarea><\/div>\n<div id='pbhistory11' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit11' value=' '\/><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse11\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"11\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"9bdd57cdc2e86e82a44d55f615212b03\"\/>\n<div id='pbresults11' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit11\").value = \"Run program\";document.getElementById(\"inputInUse11\").value = \"N\";<\/script>\nHet program met een runtime error gaf een uitvoer, maar die met een syntax ervoor niet. Dit komt doordat Python een programma in twee stappen uitvoert: <\/p>\n<ol>  \t<\/p>\n<li>Python gaat na of je programma de juiste syntax heeft. Dit om de structuur en de delen van het programma na te gaan.<\/li>\n<p>  \t<\/p>\n<li>Wanneer geen syntax errors worden aangetroffen in stap 1, wordt het programma uitgevoerd.<\/li>\n<p> <\/ol>\n<p> <\/p>\n<div>Dus een programma met een syntax error zal helemaal niet worden uitgevoerd, terwijl een programma met een runtime error uitgevoerd zal worden totdat de fout plaatsvindt.<\/div>\n<p>  <\/span><\/td><\/table><\/p>\n<h2>Fouten tegen de logica<\/h2>\n<p>Je programma kan tot een einde komen zonder te crashen maar helaas niet het gewenste resultaat opleveren. Je wilt bijvoorbeeld het <em>gemiddelde<\/em> van twee getallen uitrekenen: het gemiddelde van <em>x<\/em> en <em>y<\/em> is gedefinieerd als<\/p>\n<img src='https:\/\/s0.wp.com\/latex.php?latex=%5Cdisplaystyle%7B%5Cfrac%7Bx%2By%7D%7B2%7D%7D&#038;bg=T&#038;fg=000000&#038;s=2' alt='\\displaystyle{\\frac{x+y}{2}}' title='\\displaystyle{\\frac{x+y}{2}}' class='latex' \/>\n<p>Waarom werkt dit programma niet zoals het hoort?<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform12\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox12'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div>Dit berekent <em>niet <\/em>op correcte wijze het gemiddelde.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 110px;'><textarea wrap='off' name='usercode12' id='usercode12'  cols=10 rows=4 readonly='readonly'  style = 'height : 110px;'  class='pyboxCode RO'>\nx = 3\ny = 4\ngemiddelde = x + y \/ 2\nprint(gemiddelde)<\/textarea><\/div>\n<div id='pbhistory12' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit12' value=' '\/><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse12\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"12\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"60960abbf09682795fc115fce2f85ed7\"\/>\n<div id='pbresults12' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit12\").value = \"Run program\";document.getElementById(\"inputInUse12\").value = \"N\";<\/script>\n<\/p>\n<p>Het gemiddelde moet zijn<\/p>\n<img src='https:\/\/s0.wp.com\/latex.php?latex=%5Cdisplaystyle%7B%5Cfrac%7Bx%2By%7D%7B2%7D%3D%5Cfrac%7B3%2B4%7D%7B2%7D%3D%5Cfrac%7B7%7D%7B2%7D%3D3.5%7D&#038;bg=T&#038;fg=000000&#038;s=2' alt='\\displaystyle{\\frac{x+y}{2}=\\frac{3+4}{2}=\\frac{7}{2}=3.5}' title='\\displaystyle{\\frac{x+y}{2}=\\frac{3+4}{2}=\\frac{7}{2}=3.5}' class='latex' \/>\n<p>maar het programma drukt af <code>5.0<\/code>! Deze fout heeft te maken met de \"volgorde van de operaties\" bij rekenen. Wanneer je schrijft <code>x + y \/ 2<\/code>, dan heeft dat dezelfde betekenis als <img src='https:\/\/s0.wp.com\/latex.php?latex=x+%2B+%28y+%2F+2%29+%3D+3+%2B+%284+%2F+2%29+%3D+3+%2B+2+%3D+5&#038;bg=T&#038;fg=000000&#038;s=2' alt='x + (y \/ 2) = 3 + (4 \/ 2) = 3 + 2 = 5' title='x + (y \/ 2) = 3 + (4 \/ 2) = 3 + 2 = 5' class='latex' \/>. Om dit probleem op te lossen, moet de derde regel van je programma worden geschreven als <code>gemiddelde = (x + y) \/ 2<\/code>, hetgeen duidelijk maakt aan Python dat we echt de waarde <img src='https:\/\/s0.wp.com\/latex.php?latex=%5Cfrac%7Bx%2By%7D%7B2%7D&#038;bg=T&#038;fg=000000&#038;s=3' alt='\\frac{x+y}{2}' title='\\frac{x+y}{2}' class='latex' \/> willen, waarbij we eerst willen optellen en dan pas delen.<\/p>\n<p>Je loopt tegen logische fouten op omdat je het programma niet juist hebt <em>ontworpen<\/em>, of wanneer je een programma schrijft dat niet het ontwerp volgt (zoals bij het voorbeeld met het <code>gemiddelde<\/code>). Logische fouten zijn lastig op te sporen, zeker bij een langer programma, maar je zult betere programma's schrijven naarmate je meer ervaring krijgt. In les 6D zullen een aantal tips worden gegeven om logische fouten te voorkomen.<\/p>\n<h2>Oefeningen<\/h2>\n<p>Nu de les af is, volgen drie oefeningen waar je moet <em>debuggen<\/em> (de fouten in een programma verbeteren). Je kunt proberen de fouten te vinden voordat je het programma uitvoert, maar je kunt het programma ook eerst proberen uit te voeren om de reactie die Python geeft te gebruiken om na te gaan wat verbeterd moet worden.<\/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> Ieder programma is al voor een groot gedeelte ingetypt. Je hoeft maar een paar tekens (letters\/symbolen\/getallen) te veranderen om het programma in orde te krijgen. <em>Het nakijkprogramma zal een oplossing dat teveel wijzigingen aanbrengt afwijzen.<\/em> Klik op <strong>Reset code to default<\/strong> wanneer je terug wilt gaan naar de beginsituatie. <\/span><\/td><\/table><\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform13\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox13'>\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'>Zomer<\/span><\/div>Verbeter de syntax error in het volgende programma, zodanig dat de som van de getallen 1 t\/m 10 wordt afgedrukt.<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='usercode13' id='usercode13'  cols=10 rows=20   class='pyboxCode RW'>\nprint(1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 +)\n<\/textarea><\/div>\n<div id='pbhistory13' class='flexcontain' style='display:none;'><\/div>\n<input type='hidden' id='defaultCode13' value='print(1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 +)\\n'><\/input>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit13' value=' '\/><\/td>\n<td><input type='button' name='history' value=\"History\" onclick=\"historyClick(13,'1e.product')\" ><\/td>\n<td><input type='button' name='default' value=\"Reset code to default\" onclick=\"pbSetText(13,descape($('#defaultCode13').val()))\" ><\/td>\n<td><input type='button' name='help' value=\"Help\" onclick=\"helpClick(13);\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse13\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"13\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"7410305f608c54020058d51ab82c2f18\"\/>\n<div id='pbresults13' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit13\").value = \"Run program\";document.getElementById(\"inputInUse13\").value = \"N\";<\/script>\n<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform14\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox14'>\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'>Hello Joe<\/span><\/div>Verbeter de runtime error in het volgende programma, zodanig dat het <code>Hello<\/code> op de eerste regel afdrukt en <code>Joe<\/code> op de tweede regel. Je mag hoogstens twee tekens veranderen.<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='usercode14' id='usercode14'  cols=10 rows=20   class='pyboxCode RW'>\nprint(\"Hello\")\nusername = Joe \nprint(username)\n<\/textarea><\/div>\n<div id='pbhistory14' class='flexcontain' style='display:none;'><\/div>\n<input type='hidden' id='defaultCode14' value='print(\\\"Hello\\\")\\nusername = Joe \\nprint(username)\\n'><\/input>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit14' value=' '\/><\/td>\n<td><input type='button' name='history' value=\"History\" onclick=\"historyClick(14,'1e.joe')\" ><\/td>\n<td><input type='button' name='default' value=\"Reset code to default\" onclick=\"pbSetText(14,descape($('#defaultCode14').val()))\" ><\/td>\n<td><input type='button' name='help' value=\"Help\" onclick=\"helpClick(14);\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse14\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"14\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"d240d37cf33a4191d27980eec17ea5e6\"\/>\n<div id='pbresults14' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit14\").value = \"Run program\";document.getElementById(\"inputInUse14\").value = \"N\";<\/script>\n<\/p>\n<p>De laatste opgave is moeilijker dan de twee voorgaande. Wanneer je vast komt te zitten, kun je deze overslaan en naar de volgende les gaan. Je kunt altijd nakijken welke opgaven je hebt afgemaakt of overgeslagen door naar <a title=\"Mijn voortgang\" href=\"\/user-page\/\">Mijn voortgang<\/a> te gaan.<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform15\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox15'>\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'>Groei<\/span><\/div>Verbeter de logische fout in dit programma: de bedoeling ervan is de hoeveelheid mensen te berekenen van je dorp in de komende drie jaar, ervan uitgaande dat we beginnen met 1000 mensen in 2012, en dat het aantal mensen stijgt met 10% per jaar. Je mag hoogstens drie tekens veranderen. <br\/> <a class=\"hintlink\"  id=\"hintlink16\">Indien je vast zit, klik dan hier voor een hint.<\/a> <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='usercode15' id='usercode15'  cols=10 rows=20   class='pyboxCode RW'>\npopulationIn2012 = 1000\npopulationIn2013 = populationIn2012 * 0.1\npopulationIn2014 = populationIn2013 * 0.1\npopulationIn2015 = populationIn2014 * 0.1\n<\/textarea><\/div>\n<div id='pbhistory15' class='flexcontain' style='display:none;'><\/div>\n<input type='hidden' id='defaultCode15' value='populationIn2012 = 1000\\npopulationIn2013 = populationIn2012 * 0.1\\npopulationIn2014 = populationIn2013 * 0.1\\npopulationIn2015 = populationIn2014 * 0.1\\n'><\/input>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit15' value=' '\/><\/td>\n<td><input type='button' name='history' value=\"History\" onclick=\"historyClick(15,'1e.growth')\" ><\/td>\n<td><input type='button' name='default' value=\"Reset code to default\" onclick=\"pbSetText(15,descape($('#defaultCode15').val()))\" ><\/td>\n<td><input type='button' name='help' value=\"Help\" onclick=\"helpClick(15);\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse15\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"15\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"eb2dbcf7dc4e067a2c8999582ba32ff6\"\/>\n<div id='pbresults15' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit15\").value = \"Run program\";document.getElementById(\"inputInUse15\").value = \"N\";<\/script>\n<\/p>\n<p>Ga door met de volgende les, zodra je alle fouten (bugs) hebt verbeterd.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wanneer je programmeert zul je regelmatig fouten (ook wel\u00a0errors of\u00a0bugs genaamd) maken. Het voorkomen, begrijpen, en herstellen van fouten is een belangrijk onderdeel van programmeren. Python zal zijn best doen om alles precies zo uit te voeren als je het &hellip; <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/1e-errors-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-6197","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/6197","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=6197"}],"version-history":[{"count":25,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/6197\/revisions"}],"predecessor-version":[{"id":14383,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/6197\/revisions\/14383"}],"wp:attachment":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/media?parent=6197"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}