{"id":9835,"date":"2017-05-11T03:01:57","date_gmt":"2017-05-11T07:01:57","guid":{"rendered":"https:\/\/cscircles.cemc.uwaterloo.ca\/?page_id=9835"},"modified":"2017-05-16T05:01:09","modified_gmt":"2017-05-16T09:01:09","slug":"pl-1e","status":"publish","type":"page","link":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/pl-1e\/","title":{"rendered":"1E: B\u0142\u0119dy"},"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>Im wi\u0119cej b\u0119dziesz programowa\u0107, tym wi\u0119cej, w spos\u00f3b naturalny, napotkasz b\u0142\u0119d\u00f3w (<em>errors<\/em> lub <em>bugs<\/em>). Poznanie przyczyny, zrozumienie i naprawienie b\u0142\u0119d\u00f3w jest wa\u017cn\u0105 cz\u0119\u015bci\u0105 programowania. Python dok\u0142ada wszelkich stara\u0144, aby uruchomi\u0107 wszystko, co ka\u017cesz mu zrobi\u0107, ale je\u015bli nie potrafi zrozumie\u0107 tego, o co prosisz, nie uruchomi programu i wy\u015bwietla informacje o b\u0142\u0119dach. W ten sam spos\u00f3b Python pr\u00f3buje przekaza\u0107 ci troch\u0119 informacji o tym, co posz\u0142o nie tak, aby pom\u00f3c Ci to naprawi\u0107.<\/p>\n<p>Oto dwa przyk\u0142ady b\u0142\u0119d\u00f3w w Pythonie.<\/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'>A 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 \"Gee golly\"<\/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=\"1f60d53abbdb5b1f708b6999e4ea05f2\"\/>\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>W tym pierwszym przyk\u0142adzie zapomniano o nawiasach, kt\u00f3re s\u0105 wymagane przy poleceniu <code>print(...)<\/code>. Python nie rozumie, co pr\u00f3bujesz zrobi\u0107.<\/p>\n<p>Tutaj znajduje si\u0119 drugi przyk\u0142ad b\u0142\u0119du w Pythonie.<\/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'>A Run-Time 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(greeting)<\/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<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><\/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=\"d537913a9837de0249e9af12b7818e6c\"\/>\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>W drugim przyk\u0142adzie zapomniano zdefiniowa\u0107 zmienn\u0105 <code>greeting<\/code>. Python wie, co chcesz, ale poniewa\u017c nie zdefiniowano <code>greeting<\/code>, pojawia si\u0119 b\u0142\u0105d.<\/p>\n<p><strong>B\u0142\u0105d sk\u0142adniowy<\/strong> (<strong>syntax error<\/strong>) jest wtedy, gdy Python nie mo\u017ce zrozumie\u0107, co od niego chcesz. <strong>B\u0142\u0105d wykonania<\/strong> (<strong>run-time error<\/strong>) jest wtedy, gdy Python rozumie to, co m\u00f3wisz, ale ma problem z wykonaniem twoich instrukcji.<\/p>\n<p>W j\u0119zyku polskim <strong>b\u0142\u0105d sk\u0142adnikowy<\/strong> (<strong>syntax error<\/strong>) by\u0142by podobny do zdania:<\/p>\n<p style=\"text-align: center;\"><em>Prosz\u0119 kot pies ma\u0142pa.<\/em><\/p>\n<p>Gramatyka tego zdania nie ma sensu. Z punktu widzenia gramatyki brak jest <em>czasownika <\/em>(dzia\u0142ania). Nie mo\u017cna zrozumie\u0107, o co chodzi w tym zdaniu. <em>Sk\u0142adnia<\/em> w programowaniu oznacza to samo co <em>gramatyka<\/em> dla j\u0119zyka polskiego.<\/p>\n<p>W j\u0119zyku polskim <strong>b\u0142\u0105d wykonania<\/strong> (<strong>run-time error<\/strong>) by\u0142by podobny do zdania:<\/p>\n<p style=\"text-align: center;\"><em>Prosz\u0119 zjedz pianino.<\/em><\/p>\n<p>Z perspektywy gramatycznej zdanie ma sens - we w\u0142a\u015bciwym miejscu znajduje si\u0119 czasownik i rzeczownik - wi\u0119c wiesz, o co poproszono. Ale napotykasz problemy, gdy zaczniesz stara\u0107 si\u0119 je\u015b\u0107  fortepian (chyba, \u017ce  jeste\u015b termitem). Jest to <em>b\u0142\u0105d wykonania<\/em> (<em>run-time error<\/em>), poniewa\u017c wyst\u0119puje po uruchomieniu programu.<\/p>\n<p>M\u00f3wimy r\u00f3wnie\u017c o <strong>b\u0142\u0119dach logicznych<\/strong> (<strong>logic errors<\/strong>), kiedy program dzia\u0142a bez awarii, ale nadal generuje nieprawid\u0142owy wynik. Przyk\u0142ad<\/p>\n<p style=\"text-align: center;\"><em>Prosz\u0119 zamkn\u0105\u0107 tylne drzwi tak, aby nie dosta\u0142y si\u0119 insekty.<\/em><\/p>\n<p>Je\u015bli <em>drzwi przednie<\/em> s\u0105 r\u00f3wnie\u017c otwarte, by\u0142oby to b\u0142\u0105d logiczny: mimo \u017ce polecenie ma sens i mo\u017cna zamkn\u0105\u0107 tylne drzwi, to w rzeczywisto\u015bci nie osi\u0105ga si\u0119 celu, jakim jest zabezpieczenie przed insektami, poniewa\u017c b\u0119d\u0105 one mog\u0142y nadal wchodzi\u0107 przednimi drzwi.<\/p>\n<h2>Typowe b\u0142edy sk\u0142adniowe w Pythonie<\/h2>\n<p>Oto kilka dodatkowych przyk\u0142ad\u00f3w b\u0142\u0119d\u00f3w sk\u0142adniowych w Pythonie. Jedn\u0105 z rzeczy, kt\u00f3ra mo\u017ce si\u0119 zdarzy\u0107, jest to, \u017ce Python napotyka specjalny symbol w miejscu, kt\u00f3rego si\u0119 nie spodziewa.<\/p>\n<p><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<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><\/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 m\u00f3wi <code>SyntaxError: invalid syntax<\/code> i wskazuje symbolem <code>^<\/code> na  <code>!<\/code> wykrzyknik. Problemem jest nast\u0119puj\u0105cy, <code>!<\/code> nie ma okre\u015blonego znaczenia w Pythonie. B\u0142\u0105d sk\u0142adniowy znik\u0142by, gdyby\u015bmy mieli wydrukowa\u0107 (\"Hello, World!\"), Poniewa\u017c wtedy Python zrozumia\u0142by, \u017ce <code>!<\/code> jest cz\u0119\u015bci\u0105 tekstu <code>Hello, World<\/code>.<\/p>\n<p>Oto inny b\u0142\u0105d sk\u0142adniowy (syntax error), bardziej subtelny.<\/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='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 = \"Advanced Computronics for 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<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=\"118855f6921ffbe7b56deadcc1d42a35\"\/>\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>Problem polega na tym, \u017ce <code>class<\/code> jest specjalnym s\u0142owem w Pythonie. Gdy by  napisa\u0107 <code>course<\/code> zamiast <code>class<\/code>, by\u0142oby dobrze. Kliknij <a class=\"hintlink\"  id=\"hintlink4\">tutaj<\/a>, aby wy\u015bwietli\u0107 list\u0119 wszystkich specjalnych \"s\u0142\u00f3w kluczowych\" w Pythonie.<\/p>\n<p>Je\u015bli chcesz u\u017cy\u0107 cudzys\u0142ow\u00f3w wok\u00f3\u0142 tekstu, ale  zapominasz o drugim ze znak\u00f3w, lub u\u017cywasz nawias\u00f3w i zapominasz o drugim z nawias\u00f3w, wtedy otrzymasz b\u0142\u0105d sk\u0142adniowy (syntax errors):<\/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>Zapomnienie drugiego cudzys\u0142owu<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<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><\/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>W tym b\u0142\u0119dzie (<strong>EOL<\/strong> to skr\u00f3t od <strong>E<\/strong>nd <strong>O<\/strong>f <strong>L<\/strong>ine): Python spodziewa\u0142 jeszcze jednego znaku <code>\"<\/code>, ale linia zako\u0144czy\u0142a si\u0119 przed jego znalezieniem.<\/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>Zapomnienie drugiego nawiasu<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<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<\/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>Podobnie (<strong>EOF<\/strong> to skr\u00f3t od <strong>E<\/strong>nd <strong>O<\/strong>f <strong>F<\/strong>ile): Python szuka\u0142 drugiego <code>)<\/code>, ale plik programu zako\u0144czy\u0142 si\u0119, zanim zosta\u0142 on znaleziony.<\/p>\n<p>Czasami dwa bardzo podobne b\u0142\u0119dy sk\u0142adniowe (syntax errors) mog\u0105 da\u0107 dwa bardzo r\u00f3\u017cne komunikaty o b\u0142\u0119dach. Ale ka\u017cdy komunikat o b\u0142\u0119dzie pr\u00f3buje przekaza\u0107 jakie\u015b informacje naprowadzaj\u0105ce.<\/p>\n<h2>B\u0142\u0119dy wykonania<\/h2>\n<p>Oto kilka typowych b\u0142\u0119d\u00f3w wykonania (run-time errors). Python potrafi zrozumie\u0107, co program m\u00f3wi, ale ma problem z wykonaniem instrukcji:<\/p>\n<ul>\n<li>u\u017cywaj\u0105c niezdefiniowanej zmiennej lub funkcji. Mo\u017ce si\u0119  zdarzy\u0107, \u017ce u\u017cywasz du\u017cych liter niezgodnie z nazw\u0105 zmiennej: <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>Niezdefiniowanie zmiennej<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 = \"Maybe\"\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<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(7)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(7,'N')\" ><\/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=\"4f31cdc433eda08b09f9520f4297481d\"\/>\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>dziel\u0105c przez zero, co nie ma sensu w matematyce. (Poniewa\u017c 0 razy dowolna liczba wynosi 0, wi\u0119c nie ma rozwi\u0105zania dla 1 = <em>X<\/em> * 0, zatem 1\/0 jest niezdefiniowane). <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>Dzielenie przez zero<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<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(8)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(8,'N')\" ><\/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>u\u017cywaj\u0105c operator\u00f3w do nieprawid\u0142owych typ\u00f3w danych <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>Dodawanie tekstu i liczby<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(\"you cannot add text and numbers\" + 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<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(9)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(9,'N')\" ><\/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=\"751a7ab390bfdd3c27346bc7449b2b2f\"\/>\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>Gdy dowiesz si\u0119 wi\u0119cej o Pythonie, poznasz wi\u0119cej sytuacji, w kt\u00f3rych powstaj\u0105 b\u0142\u0119dy.<\/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> Jaka jest r\u00f3\u017cnica techniczna pomi\u0119dzy b\u0142\u0119dem sk\u0142adniowym a b\u0142\u0119dem wykonania? Oto przyk\u0142ad por\u00f3wnuj\u0105cy b\u0142\u0105d wykonania z b\u0142\u0119dem sk\u0142adni. Sp\u00f3jrz na wyj\u015bcie ka\u017cdego programu.<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'>Run-Time 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(\"Here is some text\")\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<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(10)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(10,'N')\" ><\/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=\"bc12716281bbeb154fe607750970cff1\"\/>\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(\"Here is some text\")\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<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(11)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(11,'N')\" ><\/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=\"c31d93a3646a6bb4156e3a70091aaf3b\"\/>\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>\nProgram z b\u0142\u0119dem wykonania (run-time error) wy\u015bwietli\u0142 pewne dane wyj\u015bciowe, ale program z b\u0142\u0119dem sk\u0142adniowym (syntax error) nie. Dzieje si\u0119 tak, poniewa\u017c Python dzia\u0142a w dw\u00f3ch krokach: <\/p>\n<ol> \t<\/p>\n<li>Python sprawdza, czy program ma poprawn\u0105 sk\u0142adni\u0119, czy ma okre\u015blon\u0105 struktur\u0119 i cz\u0119\u015bci.<\/li>\n<p> \t<\/p>\n<li>Je\u015bli w kroku 1 nie napotka b\u0142\u0119d\u00f3w sk\u0142adniowych, program zostanie wykonany.<\/li>\n<p> <\/ol>\n<p> <\/p>\n<div>Zatem, program z b\u0142\u0119dami sk\u0142adniowymi nie wykona \u017cadnego kroku, ale program z b\u0142\u0119dem wykonania wykona kroki do miejsca przed wyst\u0105pieniem b\u0142\u0119du.<\/div>\n<p>  <\/span><\/td><\/table><\/p>\n<h2>B\u0142\u0119dy logiczne<\/h2>\n<p>Tw\u00f3j program mo\u017ce dzia\u0142a\u0107 bez awarii (nie ma b\u0142\u0119d\u00f3w sk\u0142adni ani b\u0142\u0119d\u00f3w wykonania), ale nadal mo\u017ce nie robi\u0107 tego co trzeba. Na przyk\u0142ad, je\u015bli chcesz, aby program obliczy\u0142 <em>\u015bredni\u0105<\/em> z dw\u00f3ch liczb <em>x<\/em> i <em>y<\/em> zdefiniowan\u0105 jako:<\/p>\n<p style=\"text-align: center;\"><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' \/><\/p>\n<p>Dlaczego ten program nie dzia\u0142a?<\/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>Ten przyk\u0142ad <em>nie<\/em> oblicza \u015bredniej.<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\naverage = x + y \/ 2\nprint(average)<\/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<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(12)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(12,'N')\" ><\/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=\"2495b74069089ef3bf1c45449394ab3d\"\/>\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>\u015arednia powinna by\u0107<\/p>\n<p style=\"text-align: center;\"><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' \/><\/p>\n<p>ale program wy\u015bwietla <code>5.0<\/code>! Ten b\u0142\u0105d ma teraz zwi\u0105zek z \"kolejno\u015bci\u0105 operacji\" w arytmetyce. Kiedy piszesz <code>x + y \/ 2<\/code>, ma to samo znaczenie matematyczne co: <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' \/>. Aby rozwi\u0105za\u0107 ten problem, trzecia linia naszego programu powinna by\u0107 zapisana jako <code>\u015brednia = (x + y) \/ 2<\/code>, co czyni jasne dla Pythona, \u017ce my warto\u015bci: <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' \/>, gdzie najpierw dodajemy a potem dzielimy.<\/p>\n<p>B\u0142\u0119dy logiczne mog\u0105 wyst\u0105pi\u0107, gdy program nieprawid\u0142owo zostanie <em>zaprojektowany <\/em>lub gdy kod zostanie nieprawid\u0142owo wpisany (tak jak w przyk\u0142adzie ze <code>\u015bredni\u0105<\/code>). B\u0142\u0119dy logiczne mog\u0105 by\u0107 trudne do zauwa\u017cenia, zw\u0142aszcza w d\u0142u\u017cszym programie, ale im lepszy b\u0119dziesz w pisaniu kodu, tym \u0142atwiej b\u0119dziesz unika\u0107 b\u0142\u0119d\u00f3w logicznych. Lekcja 6D zawiera wskaz\u00f3wki dotycz\u0105ce unikania b\u0142\u0119d\u00f3w logicznych.<\/p>\n<h2>\u0106wiczenia<\/h2>\n<p>Teraz, gdy lekcja jest kompletna, mamy trzy \u0107wiczenia dotycz\u0105ce <em>debugowania <\/em>(identyfikowania i naprawiania b\u0142\u0119d\u00f3w w programach). Przed uruchomieniem program\u00f3w mo\u017cna spr\u00f3bowa\u0107 wykry\u0107 b\u0142\u0119dy, albo najpierw uruchomi\u0107 je i u\u017cy\u0107 podpowiedzi Python, w celu  ustalenia, co trzeba zmieni\u0107.<\/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> Kod ka\u017cdego programu jest ju\u017c odpowiednio dla Ciebie przygotowany. Aby naprawi\u0107 ka\u017cdy z program\u00f3w, wystarczy zmieni\u0107 kilka znak\u00f3w (litery\/symbole\/cyfry). <em>Automatyczny tester odrzuci rozwi\u0105zania ze zbyt wieloma zmianami znak\u00f3w.<\/em> Wybierz opcj\u0119 <strong>Resetuj kod<\/strong>, je\u015bli chcesz przywr\u00f3ci\u0107 pierwotn\u0105 wersj\u0119. <\/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'>Sumowanie<\/span><\/div>Popraw b\u0142\u0105d sk\u0142adniowy w nast\u0119puj\u0105cym programie tak, aby wydrukowa\u0107 sum\u0119 wszystkich liczb od 1 do 10. Mo\u017cesz zmieni\u0107 co najwy\u017cej jeden znak.<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='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(13)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(13,'N')\" ><\/td>\n<td><input type='button' name='history' value=\"History\" onclick=\"historyClick(13,'1e.product')\" ><\/td>\n<\/tr><\/table><select id='pbSelect13' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='default' data-pbonclick=\"pbSetText(13,descape($('#defaultCode13').val()))\" >Reset code to default<\/option>\n<option name='help' data-pbonclick=\"helpClick(13);\" >Help<\/option>\n<\/select><\/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=\"b51f029973812d22d50bc1fd48c667b1\"\/>\n<div id='pbresults13' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(13);});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>Napraw b\u0142\u0105d wykonania w programie tak, aby wydrukowa\u0142 on <code>Hello <\/code>w pierwszej linii i <code>Joe <\/code>w drugiej linii. Mo\u017cesz zmieni\u0107 co najwy\u017cej dwa znaki.<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='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(14)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(14,'N')\" ><\/td>\n<td><input type='button' name='history' value=\"History\" onclick=\"historyClick(14,'1e.joe')\" ><\/td>\n<\/tr><\/table><select id='pbSelect14' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='default' data-pbonclick=\"pbSetText(14,descape($('#defaultCode14').val()))\" >Reset code to default<\/option>\n<option name='help' data-pbonclick=\"helpClick(14);\" >Help<\/option>\n<\/select><\/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 avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(14);});document.getElementById(\"submit14\").value = \"Run program\";document.getElementById(\"inputInUse14\").value = \"N\";<\/script>\n<\/p>\n<p><!--The last problem is more difficult than the previous two. If you get stuck, feel free to skip to the next lesson. You can always check which problems you have completed or skipped by going to the <a title=\"My Progress\" href=\"\/user-page\/\">My Progress<\/a> page.--><\/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'>Zakupy<\/span><\/div> Idziesz na zakupy po mi\u0119so i mleko, ale produkty te s\u0105 opodatkowane. Mleko kupujesz za 2,00z\u0142 a mi\u0119sa za 4,00z\u0142, a podatek wynosi 3%. Wydrukuj ca\u0142kowity koszt twoich artyku\u0142\u00f3w spo\u017cywczych (nie wy\u015bwietlaj znaku waluty). <a class=\"hintlink\"  id=\"hintlink16\"> 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='usercode15' id='usercode15'  cols=10 rows=20   class='pyboxCode RW'>\nmeatPrice = 4.00\nmeatTax = 0.03 * meatPrice\nmilkPrice = 2.00\nmilkTax = 0.03 * milkPrice\nprint(meatTax + meatPrice + milkTax + meatPrice)\n<\/textarea><\/div>\n<div id='pbhistory15' class='flexcontain' style='display:none;'><\/div>\n<input type='hidden' id='defaultCode15' value='meatPrice = 4.00\\nmeatTax = 0.03 * meatPrice\\nmilkPrice = 2.00\\nmilkTax = 0.03 * milkPrice\\nprint(meatTax + meatPrice + milkTax + meatPrice)\\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='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(15)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(15,'N')\" ><\/td>\n<td><input type='button' name='history' value=\"History\" onclick=\"historyClick(15,'1e.shopping')\" ><\/td>\n<\/tr><\/table><select id='pbSelect15' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='default' data-pbonclick=\"pbSetText(15,descape($('#defaultCode15').val()))\" >Reset code to default<\/option>\n<option name='help' data-pbonclick=\"helpClick(15);\" >Help<\/option>\n<\/select><\/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=\"45e404eef4f5d6fa87d2fa360254efd1\"\/>\n<div id='pbresults15' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(15);});document.getElementById(\"submit15\").value = \"Run program\";document.getElementById(\"inputInUse15\").value = \"N\";<\/script>\n<\/p>\n<p>Kiedy pozb\u0119dziesz si\u0119 wszystkich b\u0142\u0119d\u00f3w, mo\u017cesz przej\u015b\u0107 do nast\u0119pnej lekcji!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im wi\u0119cej b\u0119dziesz programowa\u0107, tym wi\u0119cej, w spos\u00f3b naturalny, napotkasz b\u0142\u0119d\u00f3w (errors lub bugs). Poznanie przyczyny, zrozumienie i naprawienie b\u0142\u0119d\u00f3w jest wa\u017cn\u0105 cz\u0119\u015bci\u0105 programowania. Python dok\u0142ada wszelkich stara\u0144, aby uruchomi\u0107 wszystko, co ka\u017cesz mu zrobi\u0107, ale je\u015bli nie potrafi zrozumie\u0107 &hellip; <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/pl-1e\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":70272,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-9835","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/9835","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\/70272"}],"replies":[{"embeddable":true,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/comments?post=9835"}],"version-history":[{"count":14,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/9835\/revisions"}],"predecessor-version":[{"id":9929,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/9835\/revisions\/9929"}],"wp:attachment":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/media?parent=9835"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}