{"id":9872,"date":"2017-05-11T03:06:17","date_gmt":"2017-05-11T07:06:17","guid":{"rendered":"https:\/\/cscircles.cemc.uwaterloo.ca\/?page_id=9872"},"modified":"2017-05-16T05:21:20","modified_gmt":"2017-05-16T09:21:20","slug":"pl-3","status":"publish","type":"page","link":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/pl-3\/","title":{"rendered":"3: Komentarze i Cudzys\u0142owy"},"content":{"rendered":"<!-- Please retain this notice and add more notes if you create a new version.<br \/>\nOriginal lesson author: David Pritchard, daveagp@gmail.com, http:\/\/cscircles.ca<br \/>\nLicense: http:\/\/creativecommons.org\/licenses\/by-nc-sa\/3.0\/-->\n<p>Program komputerowy wygl\u0105da jak j\u0119zyk kodowania, kt\u00f3ry jest konieczny, aby komputer dok\u0142adnie zrozumia\u0142, co twoje komendy znacz\u0105. Ale, jako j\u0119zyk kodowy, w spos\u00f3b istotny utrudnia ludziom czytanie go. Aby zrekompensowa\u0107 to, mo\u017cesz pisa\u0107 w programie dodatkowe notatki dla siebie, a kt\u00f3re komputer zignoruje. Notatki te nazywane s\u0105 <strong>komentarzami<\/strong>.<\/p>\n<p>W Pythonie ka\u017cda linia instrukcji zawieraj\u0105ca symbol <code>#<\/code> (ang. pound sign lub hash, pl. kratka, krzy\u017cyk, p\u0142otek) oznacza pocz\u0105tek komentarza,reszta linii zostanie zignorowana po uruchomieniu programu. Oto przyk\u0142ad.<\/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>Efekt zastosowania komentarza.<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) # oto komentarz\n# print(2)\nprint(3) # inny komentarz @!#!@$<\/textarea><\/div>\n<div id='pbhistory0' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit0' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(0)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(0,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse0\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"0\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"0a29187466265b542a5844fc44619a17\"\/>\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>Poniewa\u017c druga linia zaczyna si\u0119 znakiem <code>#<\/code>, Python ca\u0142kowicie zignorowa\u0142 t\u0119 lini\u0119 i jak wida\u0107, liczba <code>2<\/code> nie zosta\u0142a wydrukowana.<br \/>\nCz\u0119sto komentarze stosujemy dla:<\/p>\n<ul>\n<li>wyja\u015bnienia cz\u0119\u015bci programu, dla siebie lub innych os\u00f3b, kt\u00f3re b\u0119d\u0105 go czyta\u0107 p\u00f3\u017aniej;<\/li>\n<li>zrobienia notatek \"co jest do zrobienia\", podczas pisania d\u0142ugiego programu;<\/li>\n<li>tymczasowego wy\u0142\u0105czenia (\"<em>zakomentowa\u0107<\/em>\") linii programu bez ca\u0142kowitego jej usuni\u0119cia, dzi\u0119ki czemu \u0142atwiej p\u00f3\u017aniej jest j\u0105 w\u0142\u0105czy\u0107 z powrotem.<\/li>\n<\/ul>\n<p>Oto \u0107wiczenie ilustruj\u0105ce to. Je\u015bli edytujesz kod i chcesz przywr\u00f3ci\u0107 jego domy\u015bln\u0105 wersj\u0119, wybierz <strong>Reset kodu do domy\u015blnego<\/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'>Krytycznie Popatrz<\/span><\/div> Debuguj ten program, kt\u00f3ry mia\u0142 oblicza\u0107 liczb\u0119 sekund w ci\u0105gu tygodnia. <a class=\"hintlink\"  id=\"hintlink2\">Wskaz\u00f3wka<\/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='usercode1' id='usercode1'  cols=10 rows=20   class='pyboxCode RW'>\n# goal: print out the number of seconds in a week \nsecondsPerMinute = 60\nsecondsPerHour = secondsPerMinute * 50 # do zrobienia: sprawd\u017a to!!\nsecondsPerDay = secondsPerHour * 24\ndaysPerWeek = 5\n# daysPerWeek = daysPerWeek + 2 # weekends are disabled!?\nprint(secondsPerDay * daysPerWeek)\n<\/textarea><\/div>\n<div id='pbhistory1' class='flexcontain' style='display:none;'><\/div>\n<input type='hidden' id='defaultCode1' value='# goal: print out the number of seconds in a week \\nsecondsPerMinute = 60\\nsecondsPerHour = secondsPerMinute * 50 # do zrobienia: sprawd\\u017a to!!\\nsecondsPerDay = secondsPerHour * 24\\ndaysPerWeek = 5\\n# daysPerWeek = daysPerWeek + 2 # weekends are disabled!?\\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='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(1)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(1,'N')\" ><\/td>\n<td><input type='button' name='history' value=\"History\" onclick=\"historyClick(1,'3.debug')\" ><\/td>\n<\/tr><\/table><select id='pbSelect1' class='selectmore'><option name='more'>More actions...<\/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=\"0ac0b9b8c39cb017153ec8202a56930c\"\/>\n<div id='pbresults1' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(1);});document.getElementById(\"submit1\").value = \"Run program\";document.getElementById(\"inputInUse1\").value = \"N\";<\/script>\n<\/p>\n<h2>\u0141a\u0144cuchy<\/h2>\n<p><strong>\u0141a\u0144cuchami<\/strong> s\u0105 sekwencje liter, cyfr, fragmenty tekstu. Dla wyr\u00f3\u017cnienia s\u0105 otoczone dwoma znakami cudzys\u0142owami: na przyk\u0142ad w <a href=\"\/\">lekcji 0<\/a> cz\u0119\u015b\u0107 pierwszego programu <code>\"Hello, World!\"<\/code> by\u0142a \u0142a\u0144cuchem. Je\u015bli pojawi si\u0119 w nim znak kratki <code>#<\/code>, nie zostanie on potraktowany jako rozpoczynaj\u0105cy si\u0119 komentarz:<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>\u0141a\u0144cuch zawiera znak kratki <code>#<\/code>.<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'>\nmyStr = \"To leave a message, press the # key on your phone.\"\nprint(myStr)<\/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=\"8af2e2f89a84b580f8c85c8987c4bdad\"\/>\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>Zachowanie to jest spowodowane tym, \u017ce cz\u0119\u015b\u0107 wewn\u0105trz znak\u00f3w <code>\"\"<\/code>, jest \u0142a\u0144cuchem znak\u00f3w, co oznacza, \u017ce b\u0119dzie  dos\u0142ownie skopiowana i nie b\u0119dzie interpretowana jako polecenie. Podobnie, polecenie <code>print(\"3 + 4\")<\/code> nie drukuje liczby 7, tylko \u0142a\u0144cuch <code>3 + 4<\/code>.<\/p>\n<h2>Sekwencje Ucieczki<\/h2>\n<p>A co je\u015bli chcesz umie\u015bci\u0107 znak <code>\"<\/code> wewn\u0105trz \u0142a\u0144cucha? Je\u015bli spr\u00f3bujesz wykona\u0107 wydruk <code>print(\"I said \"Wow!\" to him\")<\/code>, to  to <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/console\/?consolecode=print%28%22I%20said%20%22Wow%21%22%20to%20him.%22%29\" target=\"_blank\">przyczyn\u0105 b\u0142\u0119du<\/a>: problem polega na tym, \u017ce Python widzi tylko \u0142a\u0144cuch <code>\"I said \"<\/code> a potem dopiero <code>Wow<\/code>!, czego nie uwa\u017ca ju\u017c za \u0142a\u0144cuch. To nie jest efekt jaki chcieli\u015bmy osi\u0105gn\u0105\u0107!<\/p>\n<p>Python <em>ma<\/em> dwa proste sposoby umieszczania symboli cytat\u00f3w w \u0142a\u0144cuchach<\/p>\n<ul>\n<li>Mo\u017cna rozpocz\u0105\u0107 i zako\u0144czy\u0107 \u0142a\u0144cuch pojedynczym  cudzys\u0142owem (apostrofem), np. <code>'blah blah'<\/code>. Nast\u0119pnie mo\u017cna poda\u0107 podw\u00f3jne cudzys\u0142owy, np. <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>Mo\u017cna umie\u015bci\u0107 znak backslash (uko\u015bnik wsteczny, uko\u015bnik lewy) przed cytatem, a nast\u0119pnie cudzys\u0142\u00f3w (np. <code>\\\"<\/code> lub <code>\\'<\/code>). Nazywamy ten zestaw znak\u00f3w <em>sekwencj\u0105 ucieczki<\/em>. Python usunie backslash, a nast\u0119pnie poda \u0142a\u0144cuch w cudzys\u0142owach. Oto przyk\u0142ad:<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>Backslashe os\u0142aniaj\u0105 cudzys\u0142owy, ale nie s\u0105 drukowane.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 58px;'><textarea wrap='off' name='usercode4' id='usercode4'  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='pbhistory4' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit4' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(4)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(4,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse4\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"4\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"8c0193821640f0aa2769f8f21fe76d5d\"\/>\n<div id='pbresults4' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit4\").value = \"Run program\";document.getElementById(\"inputInUse4\").value = \"N\";<\/script>\n<\/li>\n<\/ul>\n<p>Ponadto, backslahe (<code>\\<\/code>) w sekwencji ucieczki jest specjalnym znakiem. Zatem, aby zawrze\u0107 uko\u015bnik w \u0142a\u0144cuchu, trzeba z nim \"uciec\" za pomoc\u0105 drugiego uko\u015bnika, innymi s\u0142owy, musisz napisa\u0107 <code>\\\\<\/code>  w \u0142a\u0144cuchu znak\u00f3w.<\/p>\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'>Multiple Choice Exercise: <\/span><span class='title'>Znaki ucieczki<\/span><\/div><div>Co wy\u015bwietli poni\u017cszy program?<br \/>\n<code>print(\"Backslashes \\\\ and single quotes \\' and double quotes \\\" and pound signs # are awesome!\")<\/code><\/div><label>Your choice: <\/label><select id=\"pyselect5\"><option value=\"d\" selected>Select one<\/option><option value=\"w\">Causes an error<\/option><option value=\"w\">Backslashes \\\\ and single quotes \\' and double quotes \\\" and pound signs # are awesome!<\/option><option value=\"w\"> and pound signs<\/option><option value=\"r\">Backslashes \\ and single quotes ' and double quotes \" and pound signs # are awesome!\n<\/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(5)'\/><\/div><div class=\"pbresults\" id=\"pyMultiResults5\"><\/div><div class=\"epilogue\">Correct!<\/div><\/div>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform6\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox6'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Coding Exercise: <\/span><span class='title'>Wielka ucieczka<\/span><\/div>Napisz program, kt\u00f3ry drukuje to co poni\u017cej:<\/p>\n<pre>A double-quote's escaped using a backslash, e.g. \\\"<\/pre>Uwaga: istnieje wi\u0119cej ni\u017c jeden spos\u00f3b na zrobienie tego zadania (jak zwykle)! Na przyk\u0142ad mo\u017cna umie\u015bci\u0107 ca\u0142y ci\u0105g mi\u0119dzy pojedynczymi cudzys\u0142owami lub w podw\u00f3jnych cudzys\u0142owach. W obu przypadkach nie jest potrzebna ucieczka. Aby zdoby\u0107 lepsze do\u015bwiadczenie, rozwi\u0105\u017c ten problem jedn\u0105, a nast\u0119pnie drug\u0105 metod\u0105. Czy mo\u017cesz rozwi\u0105za\u0107 ten problem jeszcze inn\u0105, trzeci\u0105 metod\u0105?<a class=\"hintlink\"  id=\"hintlink7\">Podpowied\u017a<\/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='usercode6' id='usercode6'  cols=10 rows=20   class='pyboxCode RW'>\n<\/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<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(6)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(6,'N')\" ><\/td>\n<td><input type='button' name='history' value=\"History\" onclick=\"historyClick(6,'3.escape')\" ><\/td>\n<\/tr><\/table><select id='pbSelect6' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='help' data-pbonclick=\"helpClick(6);\" >Help<\/option>\n<\/select><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse6\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"6\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"436fbfdea89e58ee80645a43019ec1b0\"\/>\n<div id='pbresults6' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(6);});document.getElementById(\"submit6\").value = \"Run program\";document.getElementById(\"inputInUse6\").value = \"N\";<\/script>\n<\/p>\n<p>Istniej\u0105 inne sekwencje ucieczki, takie jak \"nowa linia\", kt\u00f3rej nie om\u00f3wimy teraz. Na razie jeste\u015b gotowy, aby przej\u015b\u0107 do nast\u0119pnej lekcji!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Program komputerowy wygl\u0105da jak j\u0119zyk kodowania, kt\u00f3ry jest konieczny, aby komputer dok\u0142adnie zrozumia\u0142, co twoje komendy znacz\u0105. Ale, jako j\u0119zyk kodowy, w spos\u00f3b istotny utrudnia ludziom czytanie go. Aby zrekompensowa\u0107 to, mo\u017cesz pisa\u0107 w programie dodatkowe notatki dla siebie, a &hellip; <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/pl-3\/\">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-9872","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/9872","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=9872"}],"version-history":[{"count":14,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/9872\/revisions"}],"predecessor-version":[{"id":9934,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/9872\/revisions\/9934"}],"wp:attachment":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/media?parent=9872"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}