{"id":9874,"date":"2017-05-11T03:06:54","date_gmt":"2017-05-11T07:06:54","guid":{"rendered":"https:\/\/cscircles.cemc.uwaterloo.ca\/?page_id=9874"},"modified":"2017-06-07T18:32:11","modified_gmt":"2017-06-07T22:32:11","slug":"pl-4","status":"publish","type":"page","link":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/pl-4\/","title":{"rendered":"4: Typy"},"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><em>Od tej lekcji przyk\u0142ady i pola wprowadzania kodu maj\u0105 dodatkowe przyciski<\/em> <strong>Otw\u00f3rz w konsoli<\/strong> <em>i<\/em> <strong>Wizualizacja<\/strong>. <em>U\u017cywaj ich do pomocy w debugowaniu i badaniu kodu.<\/em><\/p>\n<p>W programie  <a href=\"\/\">Hello, World!<\/a> zobaczyli\u015bmy, \u017ce Python m\u00f3g\u0142 powt\u00f3rzy\u0107 dla nas zdanie. Widzieli\u015bmy r\u00f3wnie\u017c kilka przyk\u0142ad\u00f3w z operacjami arytmetycznymi i liczbami. Liczby i zdania s\u0105 zasadniczo r\u00f3\u017cnymi obiektami, co powoduje b\u0142\u0105d w Pythonie podczas pr\u00f3by mieszania ich w niew\u0142a\u015bciwy spos\u00f3b:<\/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>Pr\u00f3ba zestawiania \u0142a\u0144cucha i liczby.<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'>\nx = \"Hello, World!\"\ny = 35\nz = max(x, y)<\/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=\"be6e76a12e6524cb283e5659895e5c2f\"\/>\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>Jak wida\u0107, otrzymujemy b\u0142\u0105d informuj\u0105cy, \u017ce dwa argumenty w poleceniu <code>max<\/code> s\u0105 r\u00f3\u017cnego typu. B\u0142\u0105d ten jest dobrym wprowadzeniem do pozosta\u0142ej cz\u0119\u015bci lekcji:<\/p>\n<ul>\n<li><code>\"Hello, World!\"<\/code> jest <strong>\u0142a\u0144cuch <\/strong> (ang. <strong>string<\/strong>), kt\u00f3ry ma skr\u00f3t w Pythonie <code>str<\/code>. \u0141a\u0144cuch (string) to dowolna sekwencja cyfr, liter i znak\u00f3w interpunkcyjnych; na ten temat wi\u0119cej w lekcji 7A.<\/li>\n<li><code>35<\/code> to <strong>liczba ca\u0142kowita<\/strong> (ang. integer), kt\u00f3ra ma skr\u00f3t w Phytonie <code>int<\/code>. Liczb\u0105 ca\u0142kowit\u0105 (integer) jest po prostu <em>zwyk\u0142a liczba<\/em> bez miejsc po przecinku; na przyk\u0142ad, 42, -12 i 0 s\u0105 liczbami ca\u0142kowitymi.<\/li>\n<\/ul>\n<p>U\u017cywanie nieodpowiedniego typu  dla obiektu jest cz\u0119st\u0105 przyczyn\u0105 b\u0142\u0119d\u00f3w w programach. To tak, jakby\u015b pr\u00f3bowa\u0142 wypi\u0107 kanapk\u0119: nie mo\u017cesz tego robi\u0107, poniewa\u017c mo\u017cesz pi\u0107 tylko co\u015b p\u0142ynnego, a kanapka jest typu sta\u0142ego.<\/p>\n<p>Mo\u017cna okre\u015bli\u0107(zbada\u0107) typ obiektu wywo\u0142uj\u0105c dla tego obiektu funkcj\u0119 <code>type<\/code>.<\/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=\"title\">Example<\/span><\/div>Niekt\u00f3re przyk\u0142ady typ\u00f3w.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 84px;'><textarea wrap='off' name='usercode1' id='usercode1'  cols=10 rows=3 readonly='readonly'  style = 'height : 84px;'  class='pyboxCode RO'>\nprint(type(\"Hello, World!\"))\nprint(type(34))\nprint(type(1.234))<\/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=\"768daed3b2e69c5cd5bc93ea45e1fc32\"\/>\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>(Znaczenie <code>class <\/code>jest podobne do <code>type<\/code>). Powy\u017cszy przyk\u0142ad ilustruje, \u017ce liczby dzielimy na dwa r\u00f3\u017cne typy, <code>int<\/code>, kt\u00f3re wspomniano powy\u017cej i <code>float<\/code>, kt\u00f3re s\u0105 u\u017cywane do przechowywania liczb dziesi\u0119tnych. Powiniene\u015b my\u015ble\u0107 o <code>float<\/code> jako o liczbach niedok\u0142adnych lub ich przybli\u017conych warto\u015bciach (wyja\u015bnimy wi\u0119cej w lekcji 7B). Zwykle mo\u017cna miesza\u0107 wielko\u015bci typu  <code>float<\/code> z <code>int<\/code>, a wynik operacji na takich r\u00f3\u017cnych obiektach b\u0119dzie typu <code>float<\/code>.<\/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=\"title\">Example<\/span><\/div>Mieszanie <code>int<\/code> i <code>float<\/code>.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 136px;'><textarea wrap='off' name='usercode2' id='usercode2'  cols=10 rows=5 readonly='readonly'  style = 'height : 136px;'  class='pyboxCode RO'>\nx = 1.2\ny = 2\nz = x * y\nprint(x, y, z)\nprint(type(x), type(y), type(z))<\/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=\"6f21ee769bd3e22ec989fbb8a69edbf5\"\/>\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>W rzeczywisto\u015bci  Python podczas operacji na <code>float<\/code> i <code>int<\/code>  konwertuje <code>int<\/code> do <code>float<\/code>, a nast\u0119pnie pracuje ju\u017c na dw\u00f3ch wielko\u015bciach typu <code>float<\/code>. Zauwa\u017c, \u017ce w Pythonie cz\u0119\u015b\u0107 ca\u0142kowit\u0105 oddzielamy  od cz\u0119\u015bci dziesi\u0119tnej kropk\u0105 '.' a nie przecinkiem ','.<\/p>\n<div class='pybox modeNeutral' id='pybox3'>\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'>Floating<\/span><\/div><div>Je\u015bli w powy\u017cszym programie zmienimy  <code>1.2<\/code> na <code>1.5<\/code> to, co uzyskamy w pierwszej linii wyj\u015bciowej powy\u017cszego przyk\u0142adu?<\/div><label>Your choice: <\/label><select id=\"pyselect3\"><option value=\"d\" selected>Select one<\/option><option value=\"w\">1.5 2 3<\/option><option value=\"w\">1.5 2.0 3.0<\/option><option value=\"r\">1.5 2 3.0<\/option><option value=\"w\">Wyst\u0105pi\u0142 b\u0142\u0105d<\/option><\/select><div class='pyboxbuttons'><input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" name=\"slug\" value=\"4.mixing\"\/><input type='submit' style='margin:5px;' value='Check answer' onClick='pbMultiCheck(3)'\/><\/div><div class=\"pbresults\" id=\"pyMultiResults3\"><\/div><div class=\"epilogue\">Bardzo dobrze! Musimy wyja\u015bni\u0107 tutaj dwa fakty, \u017ceby pokaza\u0107 dlaczego <code>z<\/code> zosta\u0142o wydrukowane jako <code>3.0<\/code>.\n\n<ul>\n\t\n<li>W operacji <code>x * y<\/code> s\u0105 mieszane dwa typy <code>int<\/code> i <code>float<\/code>, kt\u00f3re oba Python traktuje jako <code>float<\/code> i przekazuje wynik dla <code>z<\/code> te\u017c jako <code>float<\/code>.<\/li>\n\n\t\n<li>Warto\u015b\u0107 matematyczna <code>z<\/code>  1.5 razy 2, wynosi 3, ale jest przechowywana jako typ <code>float<\/code>. Gdy Python drukuje dowoln\u0105 liczb\u0119 typu <code>float<\/code>, i je\u015bli jest to liczba ca\u0142kowita, drukowanie to ko\u0144czy <code><code>.0<\/code><\/code> aby poinformowa\u0107, \u017ce warto\u015b\u0107 po przecinku jest nieistotna.<\/li>\n\n<\/ul>\n\nWarto te\u017c zauwa\u017cy\u0107, \u017ce warto\u015b\u0107 i typ <code>y<\/code> nigdy si\u0119 nie zmieni\u0142.\n<\/div><\/div>\n<p>Cz\u0119sto trzeba zmieni\u0107 dane z jednego typu na inny. Tak, jak mo\u017cna konwertowa\u0107 kanapk\u0119 ze sta\u0142ej do ciek\u0142ej formy przy u\u017cyciu miksera, tak mo\u017cna zmienia\u0107 dane z jednego typu na inny przy u\u017cyciu <strong>funkcji typecast.<\/strong> Piszesz nazw\u0119 po\u017c\u0105danego nowego typu w taki sam spos\u00f3b, jak funkcj\u0119, np.<\/p>\n<pre>x = float(\"3.4\")\r\nprint(x-1)<\/pre>zamienia \u0142a\u0144cuch (string) <code>\"3.4\"<\/code>  na liczb\u0119 dziesi\u0119tn\u0105  (float) <code>3.4<\/code>, a nast\u0119pnie drukuje <code>2.4<\/code>. Bez typecast, <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/console\/?consolecode=x%3D%223.4%22%0Aprint%28x-1%29\" target=\"_blank\">program by nie zadzia\u0142a\u0142<\/a>, poniewa\u017c nie mo\u017cna odj\u0105\u0107 liczby od \u0142a\u0144cucha.<\/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> Czasami Python <em>pozwala <\/em>\u0142\u0105czy\u0107 \u0142a\u0144cuchy i liczby za pomoc\u0105 operacji arytmetycznych. Instrukcja <code><code>print(\"hots\" * 2)<\/code> <\/code> drukuje <code>hotshots<\/code>. Pomno\u017cenie \u0142a\u0144cucha znak\u00f3w <em>s<\/em> przez liczb\u0119 ca\u0142kowit\u0105 <em>n<\/em> oznacza w Pythonie, umieszczenie <em>n<\/em> kopii ci\u0105g\u00f3w jeden po drugim. Zobaczymy p\u00f3\u017aniej, \u017ce \"dodawanie dw\u00f3ch \u0142a\u0144cuch\u00f3w\" jest r\u00f3wnie\u017c zdefiniowane w Pythonie.  <\/span><\/td><\/table><\/p>\n<p>Obiekty r\u00f3\u017cnych typ\u00f3w  odmiennie zachowuj\u0105 si\u0119 przy konwersji:<\/p>\n<ul>\n<li>konwersja <code>float <\/code>na <code>int <\/code>traci informacje po przecinku dziesi\u0119tnym, np. <code>int(1.234)<\/code> daje 1, a <code>int(-34.7)<\/code> daje <code>-34<\/code>.<\/li>\n<li>konwersja <code>str <\/code>do <code>int <\/code>powoduje b\u0142\u0105d, je\u015bli ci\u0105g nie jest sformatowany dok\u0142adnie tak, jak liczba ca\u0142kowita, np. <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/console\/?consolecode=x%20%3D%20int%28%221.234%22%29\" target=\"_blank\"><code>int(\"1.234\")<\/code> powoduje b\u0142\u0105d<\/a>.<\/li>\n<li>konwersja <code>str<\/code> na <code>float<\/code> powoduje b\u0142\u0105d, je\u015bli ci\u0105g nie jest liczb\u0105, np. <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/console\/?consolecode=x%20%3D%20float%28%22sandwich%22%29\" target=\"_blank\"><code>float(\"sandwich\")<\/code> powoduje b\u0142\u0105d<\/a>.<\/li>\n<\/ul>\n<p>Typowe u\u017cycie typecastingu to konwertowanie danych wej\u015bciowych u\u017cytkownika, kt\u00f3re zawsze s\u0105 \u0142a\u0144cuchem (typu strig), do postaci liczbowej. Oto ilustracja<\/p>\n<p><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>\u0106wiczenie na zamian\u0119 typu.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 188px;'><textarea wrap='off' name='usercode4' id='usercode4'  cols=10 rows=7 readonly='readonly'  style = 'height : 188px;'  class='pyboxCode RO'>\ninputStr = \"12\"                          # cz\u0119\u015b\u0107 danych wej\u015bciowych\r\nu\u017cytkownika\r\nprint(\"The input type is\", type(inputStr))\r\nx = int(inputStr)\r\nprint(x, \"is of type\", type(x), \"and its square is\", x*x)\r\nprint(inputStr * inputStr)               # ta linia powinna powodowa\u0107\r\nb\u0142\u0105d<\/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=\"3f0bd742a63aeb43c394a5a82a62562d\"\/>\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<\/p>\n<p>Oto jeszcze jedno \u0107wiczenie na koniec lekcji.<\/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> Poniewa\u017c jest wiele polece\u0144 edytora, niekt\u00f3re z nich zosta\u0142y przeniesione do menu <strong>Wi\u0119cej akcji...<\/strong> <\/span><\/td><\/table><\/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'>Smaczne Zamiany<\/span><\/div>Napisz program pomo\u017ce Ci nakarmi\u0107 znajomych na przyj\u0119ciu poprzez zastosowanie matematyki do <em>kwadratowej pizzy<\/em>. Za\u0142\u00f3\u017cmy, \u017ce nasz automatyczny  tester definiuje \u0142a\u0144cuch <code>inputStr<\/code> kt\u00f3ry jest \u0142a\u0144cuchem dziesi\u0119tnym, oznaczaj\u0105cym d\u0142ugo\u015b\u0107 boku <em>L<\/em> pizzy w cm. Powierzchnia  pizzy powinna by\u0107 obliczona przy u\u017cyciu wzoru <em>A = L*L<\/em>. Nast\u0119pnie przy za\u0142o\u017ceniu, \u017ce ka\u017cda osoba musi zje\u015b\u0107  100 cm<sup>2<\/sup>  pizzy, obliczy\u0107 liczb\u0119 os\u00f3b, kt\u00f3ra mo\u017ce si\u0119 naje\u015b\u0107, podaj\u0105c j\u0105  <em>w zaokr\u0105gleniu w d\u00f3\u0142 do najbli\u017cszej liczby ca\u0142kowitej.<\/em> <a class=\"hintlink\"  id=\"hintlink6\">Wskaz\u00f3wka<\/a><\/p>\n<div><em>Przyk\u0142ad<\/em>: je\u015bli <code>inputStr<\/code> wynosi<code>\"17.5\"<\/code>, otrzymamy 306.25 cm<sup>2<\/sup>, wi\u0119c  <code>3<\/code> jest to prawid\u0142owy wynik.<\/div>\n<p><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='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(5)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(5,'Y')\" ><\/td>\n<td><input type='button' name='history' value=\"History\" onclick=\"historyClick(5,'4.pizza')\" ><\/td>\n<\/tr><\/table><select id='pbSelect5' class='selectmore'><option name='more'>More actions...<\/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=\"ed2a5496a2f27a55b54c3c7cf66b91b8\"\/>\n<div id='pbresults5' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(5);});document.getElementById(\"submit5\").value = \"Run program\";document.getElementById(\"inputInUse5\").value = \"N\";<\/script>\n<\/p>\n<p>Kiedy sko\u0144czysz, przejd\u017a do nast\u0119pnej lekcji.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Od tej lekcji przyk\u0142ady i pola wprowadzania kodu maj\u0105 dodatkowe przyciski Otw\u00f3rz w konsoli i Wizualizacja. U\u017cywaj ich do pomocy w debugowaniu i badaniu kodu. W programie Hello, World! zobaczyli\u015bmy, \u017ce Python m\u00f3g\u0142 powt\u00f3rzy\u0107 dla nas zdanie. Widzieli\u015bmy r\u00f3wnie\u017c kilka &hellip; <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/pl-4\/\">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":"open","template":"","meta":{"footnotes":""},"class_list":["post-9874","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/9874","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=9874"}],"version-history":[{"count":14,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/9874\/revisions"}],"predecessor-version":[{"id":10093,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/9874\/revisions\/10093"}],"wp:attachment":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/media?parent=9874"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}