{"id":6141,"date":"2012-11-05T20:13:40","date_gmt":"2012-11-06T01:13:40","guid":{"rendered":"http:\/\/cscircles.cemc.uwaterloo.ca\/?page_id=6141"},"modified":"2019-03-02T07:26:45","modified_gmt":"2019-03-02T12:26:45","slug":"3-comments-and-quotes-nl","status":"publish","type":"page","link":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/3-comments-and-quotes-nl\/","title":{"rendered":"03: Commentaar en aanhalingstekens"},"content":{"rendered":"<p>Een computerprogramma beschrijft eenduidig de opeenvolgende elementaire berekeningen die we de computer willen laten doen. Voor een computer is dat voldoende; die stelt zich daar verder geen vragen bij. Een menselijke lezer van een computerprogramma wil echter ook het\u00a0<em>waarom\u00a0<\/em>van het programma begrijpen: hij of zij wilt begrijpen wat het <em>doel<\/em> is van elk stuk van het programma, wilt kunnen inzien dat dat stuk zijn doel inderdaad altijd correct bereikt, en wilt kunnen inzien hoe de verschillende stukken in elkaar passen en samen het overkoepelende doel van het programma realiseren. Bij het schrijven van een programma is het onze taak ervoor te zorgen dat het voor een lezer duidelijk is wat de antwoorden zijn op deze vragen. Dat doen we in de eerste plaats door middel van een doelmatige\u00a0<em>naamgeving<\/em> van onze variabelen en functies, en een logische\u00a0<em>structurering<\/em> van ons programma. Maar als dat niet volstaat, laat de programmeertaal ons toe\u00a0<strong>commentaar<\/strong> in te voegen in ons programma. Dit zijn stukken tekst die door de computer genegeerd worden, en waarin we bijkomende verduidelijkingen kunnen geven bij ons programma.<\/p>\n<p>In Python is, in elke regel van een programma waar het symbool <code>#<\/code> (hekje) in voorkomt, het hekje het begin van commentaar. De rest van de regel wordt genegeerd wanneer het programma wordt uitgevoerd. Hier volgt een voorbeeld.<\/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>Het effect van commentaar.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 84px;'><textarea wrap='off' name='usercode0' id='usercode0'  cols=10 rows=3 readonly='readonly'  style = 'height : 84px;'  class='pyboxCode RO'>\nprint(1) # hier volgt commentaar\n# print(2)\nprint(3) # nog wat commentaar @!#!@$<\/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=\"f6b5fc34e3e6e1e16f5eb94eda7a831f\"\/>\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>Omdat de tweede regel start met het <code>#<\/code>-teken, zal Python die regel in zijn geheel negeren, en zoals je kunt zien werd nummer <code>2<\/code> niet afgedrukt. Normaal gebruik van commentaar omvat onder meer:<\/p>\n<ul>\n<li>uitleg over delen van het programma, voor jezelf en anderen om later nog eens door te nemen;<\/li>\n<li>TODO-aantekeningen, die aangeven dat je later nog iets moet doen met betrekking tot die plaats in het programma;<\/li>\n<li>een regel van het programma tijdelijk buiten werking zetten (\"<em>uitcommentari\u00ebren<\/em>\") zonder de regel te wissen. Je kunt de regel later dan weer gemakkelijk invoegen in het programma.<\/li>\n<\/ul>\n<p>Hier volgt een oefening om dit te illustreren. Wanneer je teveel veranderd hebt en terug wilt keren naar de beginsituatie, klik dan op <strong>Reset code to default.<\/strong><\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform1\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox1'>\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'>Seconden raden<\/span><\/div> Verbeter (debug) dit programma zodanig dat het het aantal seconden in een week afdrukt.<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='usercode1' id='usercode1'  cols=10 rows=20   class='pyboxCode RW'>\n# doel: druk het aantal seconden in een week af \nsecondsPerMinute = 60\nsecondsPerHour = secondsPerMinute * 50 # TODO: controleer dit!\nsecondsPerDay = secondsPerHour * 24\ndaysPerWeek = 5\n# daysPerWeek = daysPerWeek + 2 # weekenden tellen niet mee!?\nprint(secondsPerDay * daysPerWeek)\n<\/textarea><\/div>\n<div id='pbhistory1' class='flexcontain' style='display:none;'><\/div>\n<input type='hidden' id='defaultCode1' value='# doel: druk het aantal seconden in een week af \\nsecondsPerMinute = 60\\nsecondsPerHour = secondsPerMinute * 50 # TODO: controleer dit!\\nsecondsPerDay = secondsPerHour * 24\\ndaysPerWeek = 5\\n# daysPerWeek = daysPerWeek + 2 # weekenden tellen niet mee!?\\nprint(secondsPerDay * daysPerWeek)\\n'><\/input>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit1' value=' '\/><\/td>\n<td><input type='button' name='history' value=\"History\" onclick=\"historyClick(1,'3.debug')\" ><\/td>\n<td><input type='button' name='default' value=\"Reset code to default\" onclick=\"pbSetText(1,descape($('#defaultCode1').val()))\" ><\/td>\n<td><input type='button' name='help' value=\"Help\" onclick=\"helpClick(1);\" ><\/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=\"0453365d7b6dacf981069edc2b8afa7f\"\/>\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<h2>Tekenreeksen<\/h2>\n<p>Tekenreeksen (Eng.: <strong><em>strings<\/em><\/strong>)\u00a0zijn rijen van tekens (letters, cijfers, spaties, leestekens, enz., ook <em>karakters<\/em> genoemd), of met andere woorden stukjes tekst. Je kan een Python-programma in zijn geheel zien als \u00e9\u00e9n grote tekenreeks. Als je echter een rij tekens in een programma wilt laten behandelen door dat programma als een <em>waarde<\/em> die je bv. wilt toekennen aan een variabele of meegeven als argument aan een functie-oproep,\u00a0dan moet je de tekens omsluiten met aanhalingstekens. Zo'n uitdrukking noemen we een <em>tekenreeks-citaat<\/em>\u00a0(Eng.:\u00a0<em>string literal<\/em>); ze \"citeert\" een tekenreeks.\u00a0Bijvoorbeeld: in\u00a0<a href=\"\/\">Les 0<\/a>\u00a0was\u00a0<code>\"Hello, World!\"<\/code> van ons allereerste programma een tekenreeks-citaat.<\/p>\n<p>Wanneer het hekje (<code>#<\/code>) verschijnt in een tekenreeks-citaat, dan wordt het niet behandeld als commentaar:<br \/>\n<form class=\"pbform\" action=\"#\" id=\"pbform2\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox2'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div>Een tekenreeks-citaat dat het <code>#-<\/code>teken bevat.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 58px;'><textarea wrap='off' name='usercode2' id='usercode2'  cols=10 rows=2 readonly='readonly'  style = 'height : 58px;'  class='pyboxCode RO'>\nmyStr = \"Om een boodschap achter te laten druk je op de #-toets van je telefoon.\"\nprint(myStr)<\/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=\"b35624c3862e8bfa2efdb55fbb78427b\"\/>\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>Precies zo zal <code>print(\"3 + 4\")<\/code> niet het getal 7 afdrukken, maar alleen maar de tekenreeks\u00a0<code>3 + 4<\/code>.<\/p>\n<h2>Ontsnapsequenties<\/h2>\n<p>Wat als je de aanhalingstekens (<code>\"<\/code>) in een tekenreeks wilt opnemen? Wanneer je <code><\/code><code>print(\"Ik zei \"Wow!\" tegen hem.\")<\/code>\u00a0wilt uitvoeren, zal dat <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/console\/?consolecode=print%28%22Ik%20zei%20%22Wow%21%22%20tegen%20hem.%22%29\" target=\"_blank\">een foutmelding tot gevolg hebben<\/a>: het probleem is dat Python het citaat\u00a0<code>\"Ik zei \"<\/code> ziet, gevolgd door <code>Wow!<\/code>, wat niet tot het citaat behoort en niets betekent in Python. Dat is niet wat we willen!<\/p>\n<p>Er zijn in Python twee eenvoudige manieren om aanhalingstekens in een tekenreeks op te nemen.<\/p>\n<ul>\n<li>Het is toegestaan om een citaat te laten beginnen en eindigen met een enkelvoudig aanhalingsteken (ook wel apostrof genoemd), zoals in <code><code>'bla bla'<\/code><\/code>. Dan is het toegestaan, om in het citaat dubbele aanhalingstekens op te nemen, zoals in <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/console\/?consolecode=print%28%27Ik%20zei%20%22Wow%21%22%20tegen%20hem.%27%29\" target=\"_blank\"><code>'Ik <code>zei<\/code> \"<code>W<\/code>ow!\" t<code>egen hem<\/code>.'<\/code><\/a><\/li>\n<li>Je kunt een <em>backslash<\/em>\u00a0(<code>\\<\/code>) gebruiken gevolgd door een aanhalingsteken (<code><code>\\\"<\/code><\/code> of <code><code>\\'<\/code><\/code>). Dit wordt een <em>ontsnapsequentie<\/em> (Eng.:\u00a0<em>escape sequence<\/em>)\u00a0genoemd, omdat je zo het aanhalingsteken kunt laten ontsnappen aan haar gewoonlijke betekenis. We zeggen dat we het aanhalingsteken <em>escapen<\/em>.\u00a0Python zal de backslash weghalen, en alleen het aanhalingsteken opnemen in de tekenreeks. Hier volgt een voorbeeld.<br \/>\n<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>De backslashes beschermen de aanhalingstekens, maar worden niet opgenomen in de tekenreeks.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 58px;'><textarea wrap='off' name='usercode3' id='usercode3'  cols=10 rows=2 readonly='readonly'  style = 'height : 58px;'  class='pyboxCode RO'>\nprint('Er staan auto\\'s op mijn brooddoos.')\nprint(\"We \\\"escapen\\\" hier de aanhalingstekens.\")<\/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=\"611eaf3a869a61506d6b028b148150b7\"\/>\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<\/li>\n<\/ul>\n<p>De aanhalingstekens zijn niet de enige tekens die je moet <em>escapen<\/em>\u00a0in een citaat om ze letterlijk in de tekenreeks op te nemen. Dat geldt ook voor de backslash zelf:\u00a0als je die wilt opnemen in een tekenreeks moet je haar\u00a0<em>escapen<\/em>\u00a0door middel van een tweede backslash:<\/p>\n<div class='pybox modeNeutral' id='pybox4'>\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'>Ontsnapsequenties<\/span><\/div><div>Wat is de uitvoer van de opdracht <code><code>print(\"Backslashes \\\\ en apostroffen \\' en aanhalingstekens \\\" en hekjes # zijn geweldig!\")<\/code><\/code><\/div><label>Your choice: <\/label><select id=\"pyselect4\"><option value=\"d\" selected>Select one<\/option><option value=\"w\">Geeft een fout.<\/option><option value=\"w\"> en hekjes<\/option><option value=\"w\">Backslashes \\\\ en apostroffen \\' en aanhalingstekens \\\" en hekjes # zijn geweldig!<\/option><option value=\"r\">Backslashes \\ en apostroffen ' en aanhalingstekens \" en hekjes # zijn geweldig!<\/option><\/select><div class='pyboxbuttons'><input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" name=\"slug\" value=\"3.escapemulti\"\/><input type='submit' style='margin:5px;' value='Check answer' onClick='pbMultiCheck(4)'\/><\/div><div class=\"pbresults\" id=\"pyMultiResults4\"><\/div><div class=\"epilogue\">Correct!<\/div><\/div>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform5\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox5'>\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'>The Great Escape<\/span><\/div>Schrijf een programma dat afdrukt: <\/p>\n<pre>Escape 't aanhalingsteken met 'n backslash: \\\"<\/pre> Opmerking: er is (zoals gewoonlijk) meer dan \u00e9\u00e9n manier om dit te doen! Bijvoorbeeld kun je de tekenreeks insluiten in enkelvoudige aanhalingstekens, of in dubbele aanhalingstekens. In beide gevallen is gebruik van een ontsnapsequentie noodzakelijk. Los, als extra oefening, het probleem op de ene manier op en daarna op de andere. Kun je het ook nog <a class=\"hintlink\"  id=\"hintlink6\"> op een derde manier oplossen?<\/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='usercode5' id='usercode5'  cols=10 rows=20   class='pyboxCode RW'>\n<\/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='history' value=\"History\" onclick=\"historyClick(5,'3.escape')\" ><\/td>\n<td><input type='button' name='help' value=\"Help\" onclick=\"helpClick(5);\" ><\/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=\"7b5c1ef6e3ee62789c2dc8b1201d5a0a\"\/>\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>Er zijn nog meer ontsnapsequenties, zoals om een regeleinde in de tekenreeks op te nemen; die zullen we nu niet behandelen. Op naar de volgende les!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Een computerprogramma beschrijft eenduidig de opeenvolgende elementaire berekeningen die we de computer willen laten doen. Voor een computer is dat voldoende; die stelt zich daar verder geen vragen bij. Een menselijke lezer van een computerprogramma wil echter ook het\u00a0waarom\u00a0van het &hellip; <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/3-comments-and-quotes-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-6141","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/6141","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=6141"}],"version-history":[{"count":29,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/6141\/revisions"}],"predecessor-version":[{"id":11183,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/6141\/revisions\/11183"}],"wp:attachment":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/media?parent=6141"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}