{"id":5546,"date":"2012-09-12T20:53:42","date_gmt":"2012-09-13T00:53:42","guid":{"rendered":"http:\/\/cscircles.cemc.uwaterloo.ca\/?page_id=5546"},"modified":"2024-07-11T03:49:34","modified_gmt":"2024-07-11T07:49:34","slug":"3-de","status":"publish","type":"page","link":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/3-de\/","title":{"rendered":"3: Kommentare und Anf\u00fchrungszeichen"},"content":{"rendered":"<p>Ein Computerprogramm ist in einer Computersprache geschrieben - damit der Computer es verstehen kann. Dummerweise sind Computersprachen f\u00fcr den Menschen relativ schlecht lesbar. Um das zu auszugleichen, kann man Notizen in das Programm einf\u00fcgen, die der Computer ignoriert. Man nennt diese <strong>Kommentare<\/strong>.<\/p>\n<p>In Python beginnt ab dem <code>#<\/code>-Symbol (\"Raute-Zeichen\" oder \"Hash\") ein Kommentar. Der Rest dieser Zeile wird dann vom Computer ignoriert. Hier ist ein Beispiel:<\/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>Die Auswirkungen von Kommentaren<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 ist ein Kommentar\n# print(2)\nprint(3) # ein weiterer Kommentar @!#!@$<\/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=\"cf44a5ccdb071ff979acbeadc13159d4\"\/>\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>Da die zweite Zeile mit dem <code>#<\/code>-Symbol beginnt, ignoriert Python diese komplett, so dass - wie du sehen kannst - die Nummer <code>2<\/code> nicht ausgegeben wird. Typischerweise nutzt man Kommentare,<\/p>\n<ul>\n<li>um Teile des Programms zu erkl\u00e4ren, damit andere sie nachher verstehen k\u00f6nnen;<\/li>\n<li>um \"zu erledigen\"-Notizen in gr\u00f6\u00dferen Programmen zu hinterlassen, damit man nicht vergisst, dass da noch etwas hin geh\u00f6rt;<\/li>\n<li>um Code zeitweise zu deaktivieren (\"<em>auskommentieren<\/em>\"),\u00a0ohne ihn zu l\u00f6schen; dann kann man ihn sp\u00e4ter leicht wieder aktivieren.<\/li>\n<\/ul>\n<p>Diese \u00dcbung zeigt, wie Kommentare genutzt werden k\u00f6nnten. Wenn du zu viel editiert hast, kannst du das Original zur\u00fcckbringen, indem du <strong>Code zur\u00fccksetzen<\/strong> anklickst.<\/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'>Second Guessing<\/span><\/div>Debugge dieses Programm, so dass es die Anzahl der Sekunden in einer Woche ausgibt.<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# Ziel: gib die Zahl der Sekunden in einer Woche an\nSekundenProMinute = 60\nSekundenProStunde = SekundenProMinute * 50 # todo: \u00fcberpr\u00fcfe dies!\nSekundenProTag = SekundenProStunde * 24\nTageProWoche = 5\n# TageProWoche = TageProWoche + 2 # Sind die Wochenenden deaktiviert?\nprint(SekundenProTag * TageProWoche)\n<\/textarea><\/div>\n<div id='pbhistory1' class='flexcontain' style='display:none;'><\/div>\n<input type='hidden' id='defaultCode1' value='# Ziel: gib die Zahl der Sekunden in einer Woche an\\nSekundenProMinute = 60\\nSekundenProStunde = SekundenProMinute * 50 # todo: \\u00fcberpr\\u00fcfe dies!\\nSekundenProTag = SekundenProStunde * 24\\nTageProWoche = 5\\n# TageProWoche = TageProWoche + 2 # Sind die Wochenenden deaktiviert?\\nprint(SekundenProTag * TageProWoche)\\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=\"72599cbdce1512c8990ccc3ba13c7245\"\/>\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>Zeichenketten<\/h2>\n<p><strong>Zeichenketten<\/strong> (auch Strings) sind Folgen von Buchstaben und Zahlen oder in anderen Worten: Text(-ausschnitte). Sie sind umgeben von Anf\u00fchrungsstrichen, um sie von normalen Befehlen zu unterscheiden. In <a href=\"\/0-de\/\">Lektion 0<\/a>\u00a0kam bereits die Zeichenkette\u00a0<code>\"Hallo, Welt!\"<\/code>\u00a0vor. Wenn ein <code>#<\/code> in einer Zeichenkette vorkommt, ist das nicht der Anfang eines Kommentars:<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>Ein String, der ein <code>#<\/code>-Symbol enth\u00e4lt.<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 = \"To leave a message, press the # key on your phone.\"\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=\"8af2e2f89a84b580f8c85c8987c4bdad\"\/>\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>Das kommt daher, dass Teile zwischen Anf\u00fchrungsstrichen <code>\"\"<\/code> exakt kopiert und nicht interpretiert werden. Genauso wird <code>print(\"3 + 4\")<\/code> nicht 7 ausgeben, sondern eben <code>3 + 4<\/code>.<\/p>\n<h2>Maskierungen<\/h2>\n<p>Doch wie bekommt man Anf\u00fchrungsstriche <code>\"<\/code> in eine Zeichenkette? Wenn man <code><\/code><code>print(\"I said \"Wow!\" to him\")<\/code> benutzt <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/console\/?consolecode=print%28%22I%20said%20%22Wow%21%22%20to%20him.%22%29\" target=\"_blank\">erzeugt das einen Fehler<\/a>: Das Problem ist, dass Python die Zeichenkette <code>\"I said \"<\/code> gefolgt von <code>Wow!<\/code> (was keine Zeichenkette ist) sieht. Das ist nicht das, was wir wollen!<\/p>\n<p>Python <em>hat<\/em> zwei einfache Wege, um Anf\u00fchrungsstriche in Zeichenketten einzutragen.<\/p>\n<ul>\n<li>Eine Zeichenkette darf auch in einfache Anf\u00fchrungsstriche (auch Apostrophe genannt) gesetzt werden: <code>'blah blah'<\/code>. Dann kann man problemlos doppelte Anf\u00fchrungsstriche einsetzen: <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/console\/?consolecode=print%28%27I%20said%20%22Wow%21%22%20to%20him.%27%29\" target=\"_blank\"><code>'I said \"Wow!\" to him.'<\/code><\/a><\/li>\n<li>Du kannst R\u00fcckw\u00e4rtsschr\u00e4gstriche <code>\\<\/code> gefolgt von Anf\u00fchrungsstrichen nutzen (<code>\"<\/code> oder <code>'<\/code>). Das nennt man <em>Maskierung<\/em>. Python wird die Anf\u00fchrungsstriche dann in die Zeichenkette einsetzen und den R\u00fcckw\u00e4rtsschr\u00e4gstrich entfernen. Hier ist ein Beispiel:<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>R\u00fcckw\u00e4rtsschr\u00e4gstriche maskieren Anf\u00fchrungsstriche, werden aber nicht angezeigt<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('Here\\'s a single-quote escape')\nprint(\"This is an \\\"escape\\\" of a double-quote\")<\/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=\"8c0193821640f0aa2769f8f21fe76d5d\"\/>\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>Aufgrund der Maskierungsf\u00e4higkeit sind R\u00fcckw\u00e4rtsschr\u00e4gstriche (\\<code><\/code>) auch spezielle Zeichen. Um ein R\u00fcckw\u00e4rtsschr\u00e4gstrich in die Zeichenkette zu bekommen, muss auch dieser maskiert werden - mit einem zweiten R\u00fcckw\u00e4rtsschr\u00e4gstrich, so dass du <code><\/code> schreiben musst:<\/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'>Maskierungszeichen<\/span><\/div><div>Was ist die Ausgabe von <code>print(\"Backslashes \\\\ and single quotes \\' and double quotes \\\" and pound signs # are awesome!\")<\/code><\/div><label>Your choice: <\/label><select id=\"pyselect4\"><option value=\"d\" selected>Select one<\/option><option value=\"w\">Backslashes \\\\ and single quotes \\' and double quotes \\\" and pound signs # are awesome!<\/option><option value=\"r\">Backslashes \\ and single quotes ' and double quotes \" and pound signs # are awesome!\n<\/option><option value=\"w\">Causes an error<\/option><option value=\"w\"> and pound signs<\/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>Schreibe ein Programm, das die folgende Ausgabe erzeugt:<\/p>\n<pre>A double-quote's escaped using a backslash, e.g. \\\"<\/pre>Hinweis: Es gibt mehr als einen Weg, dieses Problem zu l\u00f6sen (wie sonst auch)! Zum Beispiel k\u00f6nntest du die gesamte Zeichenkette in einfache oder doppelte Anf\u00fchrungsstriche setzen. Maskierung ist jedoch in beiden F\u00e4llen n\u00f6tig. Zur \u00dcbung solltest du beides ausprobieren. Kannst du das Problem auch noch auf eine <a class=\"hintlink\"  id=\"hintlink6\">dritte Weise<\/a> l\u00f6sen?<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=\"e2be0848ecc2ed520fc2d045bf291361\"\/>\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>Es gibt weitere Maskierungen, wie zum Beispiel den Zeilenumbruch, doch die brauchen wir jetzt nicht n\u00e4her diskutieren. Wir sind jetzt bereit f\u00fcr die n\u00e4chste Lektion.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ein Computerprogramm ist in einer Computersprache geschrieben - damit der Computer es verstehen kann. Dummerweise sind Computersprachen f\u00fcr den Menschen relativ schlecht lesbar. Um das zu auszugleichen, kann man Notizen in das Programm einf\u00fcgen, die der Computer ignoriert. Man nennt &hellip; <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/3-de\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2653,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-5546","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/5546","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\/2653"}],"replies":[{"embeddable":true,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/comments?post=5546"}],"version-history":[{"count":55,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/5546\/revisions"}],"predecessor-version":[{"id":15926,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/5546\/revisions\/15926"}],"wp:attachment":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/media?parent=5546"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}