{"id":6159,"date":"2012-11-05T20:30:36","date_gmt":"2012-11-06T01:30:36","guid":{"rendered":"http:\/\/cscircles.cemc.uwaterloo.ca\/?page_id=6159"},"modified":"2019-03-04T10:17:54","modified_gmt":"2019-03-04T15:17:54","slug":"9-else-and-or-not-nl","status":"publish","type":"page","link":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/9-else-and-or-not-nl\/","title":{"rendered":"09: Else, And, Or, Not"},"content":{"rendered":"<p>In deze les leer je om complexe opgaven, waarin een voorwaarde getest wordt, elegant uit te voeren. Daarbij komen twee nieuwe aspecten van Python aan de orde.<\/p>\n<ul>\n<li>Bij een <code>if<\/code>-opdracht kan je optioneel een <code>else<\/code>-blok opgeven; dat wordt uitgevoerd als de voorwaarde van de <code>if<\/code>-opdracht onwaar is.<\/li>\n<\/ul>\n<ul>\n<li>Je kunt Booleaanse voorwaarden <code>A<\/code> en <code>B<\/code> combineren tot <code>A and B<\/code>, <code>A or B<\/code>, en\u00a0<code>not A<\/code>.<\/li>\n<\/ul>\n<h1><code>else<\/code>-blokken<\/h1>\n<p>Het komt vrij vaak voor dat je bij het schrijven van een programma een voorwaarde wilt testen, en afhankelijk van of de voorwaarde waar of niet waar is de ene dan wel de andere actie wilt uitvoeren. We zagen daar eerder een <a href=\"\/6-if\/\">voorbeeld<\/a> van, toen we wilden bepalen welke van de twee getallen <code>x<\/code> en <code>y<\/code> het grootst was, waarbij we twee <code>if<\/code>-opdrachten gebruikten. Laten we het programma herschrijven en een <code>if<\/code>-opdracht met een\u00a0<code>else<\/code>-blok gebruiken:<\/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>Berekening van het maximum en illustratie van\u00a0<code><code>else<\/code><\/code><div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 266px;'><textarea wrap='off' name='usercode0' id='usercode0'  cols=10 rows=10 readonly='readonly'  style = 'height : 266px;'  class='pyboxCode RO'>\nx = int(input())\ny = int(input())\nprint('In this test case x =', x, 'and y =', y)\nif x >= y:\n    print('(The maximum is x)')\n    theMax = x\nelse:\n    print('(The maximum is y)')\n    theMax = y\nprint('The maximum is', theMax)<\/textarea><\/div>\n<div id='pbhistory0' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput0\">You may enter input for the program in the box 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='submit0' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch0\" value=\"Input Switch\" onclick=\"pbInputSwitch(0,'N')\" ><\/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=\"30eaa9582858819f57224b6eba53054f\"\/>\n<div id='pbresults0' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>pbInputSwitch(0,\"N\");<\/script>\n<\/p>\n<p>Je gebruikt <code>else<\/code> als volgt:<\/p>\n<pre>if \u00abvoorwaarde\u00bb:\r\n \u00a0 \u00abwaar-gedeelte\u00bb \u00a0 \u00a0 \u00a0 \u00a0# een inspringend blok\r\nelse:\r\n \u00a0 \u00abonwaar-gedeelte\u00bb \u00a0 \u00a0 \u00a0 # nog een inspringende blok<\/pre>Python evalueert de voorwaarde. Als ze waar is wordt het waar-gedeelte uitgevoerd, en als ze niet waar is wordt het onwaar-gedeelte uitgevoerd.<\/p>\n<h2>De filosofie van <code>else<\/code><\/h2>\n<p>Het is niet zo dat we iets extra's kunnen door het gebruik van <code>else<\/code>, maar het programma is wel gemakkelijker te lezen, fouten zijn makkelijker te vinden, en het programma is gemakkelijker te onderhouden. Hier volgen twee programmafragmenten die hetzelfde doen:<\/p>\n<table id=\"AB\">\n<tbody>\n<tr>\n<td>\n<div>Versie A<\/div>\n<pre>if lengte &lt; 256:\r\n \u00a0 print('Te klein voor deze rit')\r\nelse:\r\n \u00a0 print('Welkom aan boord!')<\/pre>\n<\/td>\n<td>\n<div>Versie B<\/div>\n<pre>if lengte &lt; 256:\r\n \u00a0 print('Te klein voor deze rit')\r\nif lengte &gt;= 256:\r\n \u00a0 print('Welkom aan boord!')<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Beide versies doen hetzelfde, en\u00a0<strong>versie B<\/strong> gebruikt niet eens een\u00a0<code>else<\/code>-blok. Maar de meeste programmeurs zijn het erover eens dat <strong>versie A<\/strong> beter is. Bijvoorbeeld: als bij <strong>versie B<\/strong>\u00a0de voorwaarde veranderd moet worden (bijv., wanneer er met 200 in plaats van 256 vergeleken dient te worden) dan is er maar \u00e9\u00e9n verandering nodig bij de code van <strong>versie A<\/strong> in plaats van twee veranderingen bij de code van <strong>versie B<\/strong>. Ook kan <strong>versie A<\/strong> onmiddellijk begrepen worden, terwijl je in <strong>B<\/strong>\u00a0dient te checken of misschien geen van beide voorwaarden waar zijn, of beide voorwaarden allebei waar zijn.<\/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'>Absolute waarde<\/span><\/div>De <em>absolute waarde<\/em> van een getal is als volgt gedefinieerd. Voor een getal <em>x<\/em>\u00a0dat positief of 0 is,\u00a0is de absolute waarde van <em>x<\/em> gelijk aan\u00a0<em>x<\/em>. Wanneer\u00a0<em>x<\/em>\u00a0een negatief getal is,\u00a0dan is de absolute waarde van <em>x<\/em>\u00a0gelijk aan <em>-x<\/em>, of in andere woorden hetzelfde als <em>x<\/em>\u00a0maar zonder het minteken. Zo is de absolute waarde van <code>5<\/code> gelijk aan <code>5<\/code>, en is de absolute waarde van <code>-10<\/code> gelijk aan <code>--10<\/code> oftewel <code>10<\/code>.\u00a0Schrijf een programma dat een geheel getal als invoer inleest en dat de abolute waarde ervan afdrukt en gebruik daarbij <code>if<\/code> en <code>else<\/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='usercode1' id='usercode1'  cols=10 rows=20   class='pyboxCode RW'>\nx=int(input())\n# delete this comment and enter your code here\n<\/textarea><\/div>\n<div id='pbhistory1' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput1\">You may enter input for the program in the box below.<div class=\"pyboxTextwrap resizy\" style=\"height: 102px;\" ><textarea wrap=\"off\" name=\"userinput\" class=\"pyboxInput\" cols=10 rows=4><\/textarea><\/div><\/div>\n<input type='hidden' id='defaultCode1' value='x=int(input())\\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='switch' id=\"switch1\" value=\"Input Switch\" onclick=\"pbInputSwitch(1,'N')\" ><\/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><select id='pbSelect1' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='history' data-pbonclick=\"historyClick(1,'9.abs')\" >History<\/option>\n<option name='default' data-pbonclick=\"pbSetText(1,descape($('#defaultCode1').val()))\" >Reset code to default<\/option>\n<option name='help' data-pbonclick=\"helpClick(1);\" >Help<\/option>\n<\/select><\/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=\"150f9ed1e20dbfba58a51ab1ca1379b8\"\/>\n<div id='pbresults1' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(1);});pbInputSwitch(1,\"N\");<\/script>\n<\/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> Python heeft een ingebouwde functie <code>abs(x)<\/code> die de absolute waarde van <code>x<\/code> levert. De grader hierboven verhindert het gebruik ervan hier, maar elders kun je <code>abs(x)<\/code> gewoon gebruiken. <\/span><\/td><\/table><\/p>\n<h2><code>elif<\/code>-blokken<\/h2>\n<p>In Python bestaat ook <code>elif<\/code>, waarmee het gemakkelijker gemaakt wordt om meerdere voorwaarden na elkaar te checken. Het normale gebruik van <code>elif<\/code> is het volgende:<\/p>\n<pre>if \u00abvoorwaarde1\u00bb:\r\n \u00a0 \u00abgedeelte1\u00bb \u00a0 \u00a0 \u00a0 \u00a0# wordt uitgevoerd wanneer voorwaarde1 waar is\r\nelif \u00abvoorwaarde2\u00bb:\r\n \u00a0 \u00abgedeelte2\u00bb \u00a0 \u00a0 \u00a0 \u00a0# wordt uitgevoerd wanneer voorwaarde1 niet waar is, en voorwaarde2 waar is<\/pre>Zoals je wel begrepen zult hebben is <code>elif<\/code> de afkorting van <em>else if<\/em>, omdat het hetzelfde is als het opnemen van een <code>if<\/code>-opdracht binnen een <code>else<\/code>-blok. <code>elif<\/code> leidt echter tot kortere code en minder inspringing. En dat maakt dat je programma makkelijker te lezen is, en dat je er makkelijker fouten uit kunt halen en ook dat het makkelijker te schrijven is. Sterker nog: je kunt een <em>willekeurig aantal<\/em> <code>elif<\/code>-blokken na elkaar in de <code>if<\/code>-opdracht opnemen en al of niet een <code>else<\/code>-blok op het eind toevoegen:<\/p>\n<pre>if \u00abvoorwaarde1\u00bb:\r\n \u00a0 \u00abgedeelte1\u00bb \u00a0 \u00a0 \u00a0# wordt uitgevoerd wanneer voorwaarde1 waar is \r\nelif \u00abvoorwaarde2\u00bb:\r\n \u00a0 \u00abgedeelte2\u00bb \u00a0 \u00a0 \u00a0# wordt uitgevoerd wanneer voorwaarde1 niet waar is en voorwaarde2 waar is\r\nelif \u00abvoorwaarde3\u00bb:\r\n \u00a0 \u00abgedeelte3\u00bb \u00a0 \u00a0 \u00a0# wordt uitgevoerd wanneer voorwaarde1 en voorwaarde 2 beiden niet waar zijn en voorwaarde3 waar is\r\nelse: \u00a0 \u00a0 \u00a0 \u00a0       # de laatste twee regels kunnen voorkomen maar dat hoeft niet\r\n \u00a0 \u00abelse-gedeelte\u00bb \u00a0# wordt uitgevoerd wanneer ALLE voorwaarden onwaar zijn<\/pre><form class=\"pbform\" action=\"#\" id=\"pbform2\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox2'>\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'>First, Second, Third<\/span><\/div>De Engelstalige woorden 1st, 2nd, 3rd, 4th, 5th, 6th, 7th, 8th, 9th worden <em>rangtelwoorden<\/em> genoemd. Schrijf een programma dat een geheel getal <em>x<\/em> tussen 1 en 9 als invoer inleest. Het programma dient het bij <em>x<\/em> behorende (Engelse) rangtelwoord af te drukken. <br\/> <strong>Hint<\/strong>: je hoeft geen 9 aparte gevallen te onderscheiden; 4 is genoeg.<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='usercode2' id='usercode2'  cols=10 rows=20   class='pyboxCode RW'>\n# delete this comment and enter your code here\n<\/textarea><\/div>\n<div id='pbhistory2' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput2\">You may enter input for the program in the box 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='submit2' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch2\" value=\"Input Switch\" onclick=\"pbInputSwitch(2,'N')\" ><\/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><select id='pbSelect2' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='history' data-pbonclick=\"historyClick(2,'9.ordinal')\" >History<\/option>\n<option name='help' data-pbonclick=\"helpClick(2);\" >Help<\/option>\n<\/select><\/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=\"c4b3f10cc0deac89d5354ed7137f3680\"\/>\n<div id='pbresults2' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(2);});pbInputSwitch(2,\"N\");<\/script>\n<\/p>\n<h2>Booleaanse operatoren: <code>and<\/code>, <code>or<\/code>, <code>not<\/code><\/h2>\n<p>Je kunt \"<code>and<\/code>\", \"<code>or<\/code>\", en \"<code>not<\/code>\" combineren.<\/p>\n<ul>\n<li>De expressie <code>A and B<\/code> is waar indien zowel <code>A<\/code> als <code>B<\/code> waar zijn, en is niet waar wanneer \u00e9\u00e9n van beiden niet waar is. (Bijvoorbeeld, je wordt nat wanneer het regent <code>and<\/code> je hebt je paraplu vergeten.)<\/li>\n<li>De expressie <code>A or B<\/code> is waar wanneer ofwel <code>A<\/code> waar is of <code>B<\/code> waar is, en is niet waar wanneer beiden niet waar zijn. (Bijvoorbeeld, de school is dicht wanneer het vakantie is <code>or<\/code> wanneer het weekend is.)<\/li>\n<li>De expressie <code>not A<\/code> is waar wanneer <code>A<\/code> niet waar is, en is niet waar wanneer <code>A<\/code> waar is. (Bijvoorbeeld, je hebt trek wanneer je <code>not<\/code> een lunch hebt gehad.)<\/li>\n<\/ul>\n<p>Hier volgt een programma dat alle mogelijkheden laat zien. Precies zoals de 'tafels van vermenigvuldiging' die je je herinnert van de basisschool. Dit wordt een <em>waarheidstabel<\/em> genoemd.<\/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>Waarheidstabel<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 136px;'><textarea wrap='off' name='usercode3' id='usercode3'  cols=10 rows=5 readonly='readonly'  style = 'height : 136px;'  class='pyboxCode RO'>\nprint(\"  A      B       not A  not B  A and B  A or B\")\nprint(\"----------------------------------------------\")\nfor A in [False, True]:               # \"for\" loop with list\t\n    for B in [False, True]:           # will be taught in lesson 13\n        print(A, \" \", B, \"   \", not A, \" \", not B, \" \", A and B, \" \", A or B)<\/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=\"23fac91eb493ba893eb781d9128bd39c\"\/>\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>Een voorbeeld waarbij <code>and<\/code> wordt gebruikt. Hier is een programma dat getallen in letters vertaalt, waarbij gelet wordt op niet-correcte invoer.<br \/>\n<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>Een voorbeeld met <code>and<\/code>: Vertalen van getallen in letters, met 1=A, 2=B, etc.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 136px;'><textarea wrap='off' name='usercode4' id='usercode4'  cols=10 rows=5 readonly='readonly'  style = 'height : 136px;'  class='pyboxCode RO'>\nx = int(input())\nif x>=1 and x<=26:\n    print('letter', x, 'in the alphabet:', chr(ord('A')+(x-1)))\nelse:\n    print('invalid input:', x)<\/textarea><\/div>\n<div id='pbhistory4' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput4\">You may enter input for the program in the box 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='submit4' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch4\" value=\"Input Switch\" onclick=\"pbInputSwitch(4,'N')\" ><\/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=\"4b610da4b77d47e08a914c94baf24596\"\/>\n<div id='pbresults4' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>pbInputSwitch(4,\"N\");<\/script>\n<\/p>\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'>26 Letters<\/span><\/div>Schrijf een programma dat het tegenovergestelde doet van het voorbeeld hierboven: het krijgt als invoer een letter en geeft als uitvoer het corresponderende getal (tussen 1 en 26). Je programma mag alleen maar <em>hoofdletters<\/em> accepteren. Als foutmelding moet je programma <code>niet toegestaan<\/code> afdrukken wanneer de invoer geen hoofdletter is. <a class=\"hintlink\"  id=\"hintlink6\">Hint<\/a><a class=\"hintlink\"  id=\"hintlink7\">Alternatieve stringvergelijkingsmethode<\/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'>\nletter = input()\n# delete this comment and enter your code here\n<\/textarea><\/div>\n<div id='pbhistory5' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput5\">You may enter input for the program in the box below.<div class=\"pyboxTextwrap resizy\" style=\"height: 102px;\" ><textarea wrap=\"off\" name=\"userinput\" class=\"pyboxInput\" cols=10 rows=4><\/textarea><\/div><\/div>\n<input type='hidden' id='defaultCode5' value='letter = input()\\n'><\/input>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit5' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch5\" value=\"Input Switch\" onclick=\"pbInputSwitch(5,'N')\" ><\/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><select id='pbSelect5' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='history' data-pbonclick=\"historyClick(5,'9.numberify')\" >History<\/option>\n<option name='default' data-pbonclick=\"pbSetText(5,descape($('#defaultCode5').val()))\" >Reset code to default<\/option>\n<option name='help' data-pbonclick=\"helpClick(5);\" >Help<\/option>\n<\/select><\/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=\"0ba7383036f48526151d2640bdf040b2\"\/>\n<div id='pbresults5' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(5);});pbInputSwitch(5,\"N\");<\/script>\n<\/p>\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'>Multiple Choice Exercise: <\/span><span class='title'>De wet van De Morgan<\/span><\/div><div>Welke van de volgende expressies is equivalent aan <code>A or B<\/code>?<\/div><label>Your choice: <\/label><select id=\"pyselect8\"><option value=\"d\" selected>Select one<\/option><option value=\"w\">not (A and B)<\/option><option value=\"r\">not ((not A) and (not B))<\/option><option value=\"w\">(not A) and (not B)<\/option><\/select><div class='pyboxbuttons'><input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" name=\"slug\" value=\"9.demorgan\"\/><input type='submit' style='margin:5px;' value='Check answer' onClick='pbMultiCheck(8)'\/><\/div><div class=\"pbresults\" id=\"pyMultiResults8\"><\/div><div class=\"epilogue\">Correct! Here is one way to arrive at this answer. First, <code>not (A or B)<\/code> is only true when both <code>A<\/code> and <code>B<\/code> are false. Also, note that <code>(not A) and (not B)<\/code> is only true if both <code>not A<\/code> and <code>not B<\/code> are true, i.e. if both <code>A<\/code> and <code>B<\/code> are false. So we have the following equality:<pre>(not A) and (not B) = not (A or B)<\/pre>Put a <code>not<\/code> around both sides, so we deduce<pre>not ((not A) and (not B)) = not (not (A or B))<\/pre>and observe that <code>not(not X))<\/code> always equals <code>X<\/code>, so<pre>not ((not A) and (not B)) = not (not (A or B)) = A or B<\/pre>This way of rewriting a boolean expression is one of <a href='http:\/\/en.wikipedia.org\/wiki\/De_Morgan%27s_laws'>De Morgan&#39;s laws<\/a>.<\/div><\/div>\n<h3>Volgorde van de operaties<\/h3>\n<p>Booleaanse operatoren hebben een \"volgorde\" net zoals rekenkundige operatoren. De volgorde is<\/p>\n<p><strong>NAO<\/strong>: not (hoogste voorkeur), and, or (laagste voorkeur)<\/p>\n<p>zo geldt,<\/p>\n<p><code>not x or y and z<\/code> betekent <code>(not x) or (y and z)<\/code><\/p>\n<p>We sluiten deze les af met een korte vraag over deze feiten.<br \/>\n<div class='pybox modeNeutral' id='pybox9'>\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'>Volgorde van de operaties<\/span><\/div><div>Wat is de waarde van <\/p>\n<pre>A or not B and C<\/pre> wanneer (A, B, C) = (False, True, True)? <a class=\"hintlink\"  id=\"hintlink10\">Hint<\/a><\/div><label>Your choice: <\/label><select id=\"pyselect9\"><option value=\"d\" selected>Select one<\/option><option value=\"w\">True<\/option><option value=\"r\">False<\/option><\/select><div class='pyboxbuttons'><input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" name=\"slug\" value=\"9.multi\"\/><input type='submit' style='margin:5px;' value='Check answer' onClick='pbMultiCheck(9)'\/><\/div><div class=\"pbresults\" id=\"pyMultiResults9\"><\/div><div class=\"epilogue\">Correct! The order of operations makes this equivalent to<pre>A or ((not B) and C)<\/pre>substituting the values, we have<pre>False or ((not True) and True)<\/pre>and now simplifying one step at a time gives<pre>False or ((not True) and True)<br\/>= False or (False and True)<br\/>= False or False<br\/>= False<\/pre><\/div><\/div>Wanneer je dit hebt doorgewerkt, ben je klaar voor de volgende les.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In deze les leer je om complexe opgaven, waarin een voorwaarde getest wordt, elegant uit te voeren. Daarbij komen twee nieuwe aspecten van Python aan de orde. Bij een if-opdracht kan je optioneel een else-blok opgeven; dat wordt uitgevoerd als &hellip; <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/9-else-and-or-not-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-6159","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/6159","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=6159"}],"version-history":[{"count":26,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/6159\/revisions"}],"predecessor-version":[{"id":11208,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/6159\/revisions\/11208"}],"wp:attachment":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/media?parent=6159"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}