{"id":9968,"date":"2017-05-18T02:07:45","date_gmt":"2017-05-18T06:07:45","guid":{"rendered":"https:\/\/cscircles.cemc.uwaterloo.ca\/?page_id=9968"},"modified":"2017-07-01T14:07:01","modified_gmt":"2017-07-01T18:07:01","slug":"9-pl","status":"publish","type":"page","link":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/9-pl\/","title":{"rendered":"9: Else, And, Or, Not"},"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>W tej lekcji nauczysz si\u0119 elegancko wykonywa\u0107 skomplikowane testy logiczne przy u\u017cyciu dw\u00f3ch nowych element\u00f3w j\u0119zyka Python.<\/p>\n<ul>\n<li>po instrukcji <code>if \u00abC\u00bb<\/code>, instrukcja <code>else<\/code> wykonywana jest tylko wtedy, gdy  <code>C<\/code> jest <em>false<\/em><\/li>\n<li> mo\u017cna \u0142\u0105czy\u0107 warunki logiczne za pomoc\u0105  <code>A and B<\/code>, <code>A or B<\/code> i\u00a0<code>not A<\/code><\/li>\n<\/ul>\n<h1><code>else<\/code><\/h1>\n<p>Cz\u0119stym zadaniem podczas pisania program\u00f3w jest przetestowanie pewnego warunku i w zale\u017cno\u015bci od tego, czy warunek jest prawdziwy, czy fa\u0142szywy zrealizowanie jednej akcji lub innej. <a href=\"\/pl-6\/\">Wcze\u015bniej<\/a>, w \u0107wiczeniu poprosili\u015bmy ci\u0119, \u017ce je\u015bli zmienna <code>age<\/code> jest mniejsza od 0, to ma by\u0107 wydrukowany pewien tekst,  a inny, je\u015bli zmienna <code>age<\/code> jest wi\u0119ksza lub r\u00f3wna 0; kod by\u0142 podobny do poni\u017cszego.<\/p>\n<pre>if age &gt;= 0: \u00a0\r\n  print('Niekoniecznie jeste\u015bcie podr\u00f3\u017cnikiem w czasie')\r\nif age &lt; 0:\r\n \u00a0print('Jeste\u015b podr\u00f3\u017cnikiem w czasie')<\/pre>Zastan\u00f3wmy si\u0119 teraz nad u\u017cyciem <code>else<\/code>.<\/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>\u00a0<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 136px;'><textarea wrap='off' name='usercode0' id='usercode0'  cols=10 rows=5 readonly='readonly'  style = 'height : 136px;'  class='pyboxCode RO'>\nage = int(input())\nif age &gt;= 0:\n  print('Niekoniecznie jeste\u015bcie podr\u00f3\u017cnikiem w czasie')\nelse:    # zamiast drugiego 'if'!\n  print('Jeste\u015b podr\u00f3\u017cnikiem w czasie')<\/textarea><\/div>\n<div id='pbhistory0' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput0\">You may enter input for the program in the box below.<div class=\"pyboxTextwrap resizy\" style=\"height: 102px;\" ><textarea wrap=\"off\" name=\"userinput\" class=\"pyboxInput\" cols=10 rows=4><\/textarea><\/div><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit0' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch0\" value=\"Input Switch\" onclick=\"pbInputSwitch(0,'N')\" ><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(0)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(0,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse0\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"0\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"cad768e30a4cf0c4fa9324e63f31de71\"\/>\n<div id='pbresults0' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>pbInputSwitch(0,\"N\");<\/script>\n<\/p>\n<p>Uog\u00f3lniaj\u0105c, u\u017cywasz <code>else<\/code> poprzez stosowanie pary instrukcji blokowych:<\/p>\n<pre>if \u00abtest\u00bb:\r\n   \u00abtrue-body\u00bb        # wci\u0119ty blok \r\nelse:\r\n   \u00abfalse-body\u00bb       # jeszcze jeden wci\u0119ty blok<\/pre>Python bada test. Je\u015bli jest true  to wykonywane jest the true-body, je\u015bli jest false  to wykonywane jest the false-body.<\/p>\n<h2>Filozofia <code>else<\/code><\/h2>\n<p>Z <code>else<\/code> nie otrzymujemy nowych mo\u017cliwo\u015bci, ale u\u017cycie go, czyni kod \u0142atwiejszym do odczytu, debugowania i konserwacji. Oto dwa fragmenty kodu, kt\u00f3re wykonuj\u0105 to samo:<\/p>\n<table id=\"AB\">\n<tbody>\n<tr>\n<td>\n<div>Wersja  A<\/div>\n<pre>if height &lt; 256:\r\n   print('Zbyt kr\u00f3tki do tej jazdy')\r\nelse:\r\n   print('Witamy na pok\u0142adzie!')<\/pre>\n<\/td>\n<td>\n<div>Wersja B<\/div>\n<pre>if height &lt; 256:\r\n   print('Zbyt kr\u00f3tki do tej jazdy')\r\nif height &gt;= 256:\r\n   print('Witamy na pok\u0142adzie!')<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Zrobienie tych samych obu rzeczy w wersji <strong>B<\/strong> wcale nie wymaga\u0142o u\u017cycia <code>else<\/code>. Jednak wi\u0119kszo\u015b\u0107 programist\u00f3w zgodzi si\u0119, \u017ce wersja <strong>A<\/strong> jest lepsza. Na przyk\u0142ad w przypadku <strong>A<\/strong>, zmiana warunku (np. 128 zamiast 256) wymaga tylko jednej zmiany jednej cz\u0119\u015bci kodu zamiast dw\u00f3ch. R\u00f3wnie\u017c <strong>A<\/strong> mo\u017ce by\u0107 natychmiast zrozumiane przez czytelnika, podczas gdy w w wersji <strong>B<\/strong> trzeba sprawdzi\u0107 i zastanowi\u0107 si\u0119, czy oba te warunki s\u0105 prawdziwe.<\/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'>Warto\u015b\u0107 Bezwzgl\u0119dna<\/span><\/div><em>Warto\u015b\u0107 bezwzgl\u0119dna<\/em> liczby jest zdefiniowana w nast\u0119puj\u0105cy spos\u00f3b. Dla liczby <em>x<\/em>, kt\u00f3ra jest dodatnia lub zero, warto\u015bci\u0105 bezwzgl\u0119dn\u0105 <em>x<\/em> jest <em>x<\/em>. W przeciwnym razie, gdy <em>x<\/em> jest liczb\u0105 ujemn\u0105, warto\u015b\u0107 bezwzgl\u0119dna <em>x<\/em> to <em>-x<\/em>, czyli innymi s\u0142owami, taka sama jak x, ale bez znaku minus. Na przyk\u0142ad warto\u015b\u0107 bezwzgl\u0119dna <code>5<\/code> wynosi <code>5<\/code>, a warto\u015b\u0107 bezwzgl\u0119dna <code>-10<\/code> wynosi <code>10<\/code>. U\u017cywaj\u0105c <code>if<\/code> i <code>else<\/code>, napisz program, kt\u00f3ry odczytuje liczb\u0119 ca\u0142kowit\u0105 jako dane wej\u015bciowe, i drukuje jej warto\u015b\u0107 bezwzgl\u0119dn\u0105.<div class=\"helpOuter\" style=\"display: none;\"><div class=\"helpInner\"><div style=\"text-align: center\">You need to create an account and log in to ask a question.<\/div><\/div><\/div><div class='pyboxTextwrap pyboxCodewrap RW resizy'  style='height: 526px;'><textarea wrap='off' name='usercode1' id='usercode1'  cols=10 rows=20   class='pyboxCode RW'>\nx=int(input())\n# delete this comment and enter your code here\n<\/textarea><\/div>\n<div id='pbhistory1' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput1\">You may enter input for the program in the box below.<div class=\"pyboxTextwrap resizy\" style=\"height: 102px;\" ><textarea wrap=\"off\" name=\"userinput\" class=\"pyboxInput\" cols=10 rows=4><\/textarea><\/div><\/div>\n<input type='hidden' id='defaultCode1' value='x=int(input())\\n'><\/input>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit1' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch1\" value=\"Input Switch\" onclick=\"pbInputSwitch(1,'N')\" ><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(1)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(1,'N')\" ><\/td>\n<\/tr><\/table><select id='pbSelect1' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='history' data-pbonclick=\"historyClick(1,'9.abs')\" >History<\/option>\n<option name='default' data-pbonclick=\"pbSetText(1,descape($('#defaultCode1').val()))\" >Reset code to default<\/option>\n<option name='help' data-pbonclick=\"helpClick(1);\" >Help<\/option>\n<\/select><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse1\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"1\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"e12f1d194f6a37f19de99cd5a70d008d\"\/>\n<div id='pbresults1' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(1);});pbInputSwitch(1,\"N\");<\/script>\n<\/p>\n<p><table class='pywarn'><tr><td class='pywarnleft'><img src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/warning.png'\/><\/td><td class='pywarnright'><span> Python ma wbudowan\u0105 funkcj\u0119 <code>abs(x)<\/code> obliczaj\u0105c\u0105 warto\u015b\u0107 bezwzgl\u0119dn\u0105 <code>x<\/code>. Nasz automatyczny tester daje mo\u017cliwo\u015b\u0107 korzystania z niej, ale my zrobimy to p\u00f3\u017aniej. <\/span><\/td><\/table><\/p>\n<h2><code>elif<\/code><\/h2>\n<p>Python wprowadza jeszcze jedno s\u0142owo kluczowe <code>elif<\/code>, aby u\u0142atwi\u0107 sprawdzenie kilku warunk\u00f3w z rz\u0119du. Najbardziej podstawow\u0105 form\u0105 <code>elif<\/code> jest:<\/p>\n<pre>if \u00abtest1\u00bb:\r\n   \u00abbody1\u00bb        # uruchomione, je\u015bli test1 jest prawdziwy\r\nelif \u00abtest2\u00bb:\r\n   \u00abbody2\u00bb        # uruchomione, je\u015bli test1 jest fa\u0142szywy i test2 jest prawdziwy<\/pre>Jak pewnie si\u0119 domy\u015blacie, <code>elif<\/code> jest skr\u00f3tem od \"else if\", poniewa\u017c jest taki sam jak umieszczanie kolejnej instrukcji if wewn\u0105trz innego bloku. Ale prowadzi do kr\u00f3tszego kodu i ma mniej wci\u0119\u0107, co u\u0142atwia czytanie, debugowanie i edytowanie programu. Co wi\u0119cej, mo\u017cesz po\u0142\u0105czy\u0107 <em>dowoln\u0105 liczb\u0119<\/em> wypowiedzi elif z rz\u0119du i nawet doda\u0107 opcjonalne na ko\u0144cu <code>else<\/code>:<\/p>\n<pre>if \u00abtest1\u00bb:\r\n   \u00abbody1\u00bb      # uruchomione, je\u015bli test1 jest prawdziwy\r\nelif \u00abtest2\u00bb:\r\n   \u00abbody2\u00bb      # uruchomione, je\u015bli test1 fa\u0142szywy i test2 jest prawdziwy\r\nelif \u00abtest3\u00bb:\r\n   \u00abbody3\u00bb      # uruchomione, je\u015bli test1 &amp; test2 s\u0105 oba fa\u0142szywe i test3 jest prawdziwy\r\nelse:           # te ostatnie dwie linie s\u0105 opcjonalne\r\n   \u00abelse-body\u00bb  # uruchomione, je\u015bli WSZYSTKIE testy s\u0105 fa\u0142szywe<\/pre>&nbsp;<\/p>\n<p>Oto przyk\u0142ad <code>elif<\/code> u\u017cytego wewn\u0105trz p\u0119tli. Czy mo\u017cesz przewidzie\u0107 jakie b\u0119dzie wyj\u015bcie przed uruchomieniem?<\/p>\n<p><iframe width='100%' height='480' frameborder='0' scrolling='no' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/OnlinePythonTutor3-cemc\/iframe-embed.html#code=for+x+in+range%281%2C+10%29%3A%0A++if+x+%25+2+%3D%3D+0%3A%0A++++print%28x%2C+%27is+even%27%29%0A++elif+x+%25+3+%3D%3D+0%3A%0A++++print%28x%2C+%27is+an+odd+multiple+of+3%27%29%0A++else%3A%0A++++print%28x%2C+%27not+divisible+by+2+or+3%27%29&cumulative=false&heapPrimitives=false&drawParentPointers=false&textReferences=false&showOnlyOutputs=false&py=3&curInstr=0&resizeContainer=true&highlightLines&width=450px&rightStdout=1'><\/iframe><\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform2\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox2'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Coding Exercise: <\/span><span class='title'>First, Second, Third<\/span><\/div>Kolejne <em>przymiotniki porz\u0105dkowe<\/em> w j\u0119zyku angielskim to: 1st, 2nd, 3rd, 4th, 5th, 6th, 7th, 8th, 9th. Napisz program, kt\u00f3ry odczytuje liczb\u0119 ca\u0142kowit\u0105 <em>x<\/em> od 1 do 9. Nast\u0119pnie wyprowadza przymiotnik porz\u0105dkowy odpowiadaj\u0105cy <em>x<\/em>. <br\/> <strong>Wskaz\u00f3wka<\/strong>: nie potrzebujesz 9 osobnych przypadk\u00f3w; wystarcz\u0105 4.<div class=\"helpOuter\" style=\"display: none;\"><div class=\"helpInner\"><div style=\"text-align: center\">You need to create an account and log in to ask a question.<\/div><\/div><\/div><div class='pyboxTextwrap pyboxCodewrap RW resizy'  style='height: 526px;'><textarea wrap='off' name='usercode2' id='usercode2'  cols=10 rows=20   class='pyboxCode RW'>\n# delete this comment and enter your code here\n<\/textarea><\/div>\n<div id='pbhistory2' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput2\">You may enter input for the program in the box below.<div class=\"pyboxTextwrap resizy\" style=\"height: 102px;\" ><textarea wrap=\"off\" name=\"userinput\" class=\"pyboxInput\" cols=10 rows=4><\/textarea><\/div><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit2' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch2\" value=\"Input Switch\" onclick=\"pbInputSwitch(2,'N')\" ><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(2)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(2,'N')\" ><\/td>\n<\/tr><\/table><select id='pbSelect2' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='history' data-pbonclick=\"historyClick(2,'9.ordinal')\" >History<\/option>\n<option name='help' data-pbonclick=\"helpClick(2);\" >Help<\/option>\n<\/select><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse2\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"2\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"c4b3f10cc0deac89d5354ed7137f3680\"\/>\n<div id='pbresults2' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(2);});pbInputSwitch(2,\"N\");<\/script>\n<\/p>\n<h2>Operatory Logiczne: <code>and<\/code>, <code>or<\/code>, <code>not<\/code><\/h2>\n<p>Mo\u017cna \u0142\u0105czy\u0107 wyra\u017cenia logiczne za pomoc\u0105 \"<code>and<\/code>\", \"<code>or<\/code>\" i \"<code>not<\/code>\", kt\u00f3re s\u0105 takie same jak w j\u0119zyku angielskim.<\/p>\n<ul>\n<li>Wyra\u017cenie <code>A and B<\/code> jest prawdziwe, je\u015bli <code>A<\/code> jest prawdziwe i <code>B<\/code> jest prawdziwe, a fa\u0142sze, je\u015bli jedno z nich jest fa\u0142szywe. (np. zmokniesz je\u015bli b\u0119dzie pada\u0107  <code>and<\/code> zapomnisz parasola)<\/li>\n<li>Wyra\u017cenie <code>A or B<\/code>  jest prawdziwe, je\u015bli <code>A<\/code> jest prawdziwe lub <code>B<\/code> jest prawdziwe, a fa\u0142szywe je\u015bli oba s\u0105 fa\u0142szywe. (np. szko\u0142a jest zamkni\u0119ta, je\u015bli jest to \u015bwi\u0119to <code>or<\/code> jest weekendem.)<\/li>\n<li>Wyra\u017cenie <code>not A<\/code> jest prawdziwe, je\u015bli <code>A<\/code> jest fa\u0142szywe, a fa\u0142szywe, je\u015bli <code>A<\/code> jest prawdziwe. (np. jeste\u015b g\u0142odny, je\u015bli <code>nie<\/code> jad\u0142e\u015b lunchu.)<\/li>\n<\/ul>\n<p>Oto program, kt\u00f3ry automatycznie wy\u015bwietla wszystkie mo\u017cliwo\u015bci. Podobnie jak 'tabliczka mno\u017cenia', kt\u00f3r\u0105 pami\u0119tasz ze szko\u0142y, t\u0105 nazywamy <em>tabel\u0105 prawdy<\/em>.<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform3\" method=\"POST\">\n<div class='pybox modeNeutral  facultative' id='pybox3'>\n<div class=\"heading\"><span class=\"title\">Example<\/span><\/div>Tabela prawdy<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 136px;'><textarea wrap='off' name='usercode3' id='usercode3'  cols=10 rows=5 readonly='readonly'  style = 'height : 136px;'  class='pyboxCode RO'>\nprint(\"  A      B       not A  not B  A and B  A or B\")\nprint(\"----------------------------------------------\")\nfor A in [False, True]:               # \"for\" loop with list\t\n    for B in [False, True]:           # will be taught in lesson 13\n        print(A, \" \", B, \"   \", not A, \" \", not B, \" \", A and B, \" \", A or B)<\/textarea><\/div>\n<div id='pbhistory3' class='flexcontain' style='display:none;'><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit3' value=' '\/><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(3)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(3,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse3\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"3\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"23fac91eb493ba893eb781d9128bd39c\"\/>\n<div id='pbresults3' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>document.getElementById(\"submit3\").value = \"Run program\";document.getElementById(\"inputInUse3\").value = \"N\";<\/script>\n<\/p>\n<p>Oto przyk\u0142ad u\u017cycia <code>and<\/code>, tutaj jest przyk\u0142ad programu, kt\u00f3ry konwertuje liczby na litery z pewn\u0105 kontrol\u0105 sprawdzania b\u0142\u0119d\u00f3w.<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>Przyk\u0142ad z <code>and<\/code> konwertuje liczby na litery w nast\u0119puj\u0105cy spos\u00f3b: 1=A, 2=B, etc.<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 136px;'><textarea wrap='off' name='usercode4' id='usercode4'  cols=10 rows=5 readonly='readonly'  style = 'height : 136px;'  class='pyboxCode RO'>\nx = int(input())\nif x>=1 and x<=26:\n    print('letter', x, 'in the alphabet:', chr(ord('A')+(x-1)))\nelse:\n    print('invalid input:', x)<\/textarea><\/div>\n<div id='pbhistory4' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput4\">You may enter input for the program in the box below.<div class=\"pyboxTextwrap resizy\" style=\"height: 102px;\" ><textarea wrap=\"off\" name=\"userinput\" class=\"pyboxInput\" cols=10 rows=4><\/textarea><\/div><\/div>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit4' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch4\" value=\"Input Switch\" onclick=\"pbInputSwitch(4,'N')\" ><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(4)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(4,'N')\" ><\/td>\n<\/tr><\/table><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse4\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"4\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"4b610da4b77d47e08a914c94baf24596\"\/>\n<div id='pbresults4' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>pbInputSwitch(4,\"N\");<\/script>\n<\/p>\n<p><form class=\"pbform\" action=\"#\" id=\"pbform5\" method=\"POST\">\n<div class='pybox modeNeutral ' id='pybox5'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Coding Exercise: <\/span><span class='title'>26 Liter<\/span><\/div>Napisz program, kt\u00f3ry wykonuje odwr\u00f3cenie powy\u017cszego przyk\u0142adu: na wej\u015bciu powinien odczytywa\u0107 liter\u0119 a wyprowadza\u0107 odpowiadaj\u0105c\u0105 jej liczb\u0119 (pomi\u0119dzy 1 a 26). Tw\u00f3j program powinien akceptowa\u0107 tylko <em>du\u017ce litery<\/em>. Je\u015bli wej\u015bcie nie jest wielk\u0105 liter\u0105 powinien wydrukowa\u0107 <code>invalid<\/code> (nieprawid\u0142owy). <a class=\"hintlink\"  id=\"hintlink6\">Wskaz\u00f3wka<\/a><a class=\"hintlink\"  id=\"hintlink7\">Alternatywna metoda por\u00f3wnywania \u0142a\u0144cuch\u00f3w<\/a><div class=\"helpOuter\" style=\"display: none;\"><div class=\"helpInner\"><div style=\"text-align: center\">You need to create an account and log in to ask a question.<\/div><\/div><\/div><div class='pyboxTextwrap pyboxCodewrap RW resizy'  style='height: 526px;'><textarea wrap='off' name='usercode5' id='usercode5'  cols=10 rows=20   class='pyboxCode RW'>\nletter = input()\n# delete this comment and enter your code here\n<\/textarea><\/div>\n<div id='pbhistory5' class='flexcontain' style='display:none;'><\/div>\n<div name=\"pyinput\" id=\"pyinput5\">You may enter input for the program in the box below.<div class=\"pyboxTextwrap resizy\" style=\"height: 102px;\" ><textarea wrap=\"off\" name=\"userinput\" class=\"pyboxInput\" cols=10 rows=4><\/textarea><\/div><\/div>\n<input type='hidden' id='defaultCode5' value='letter = input()\\n'><\/input>\n<div class='pyboxbuttons'><table><tr>\n<td><input type='submit' name='submit' id='submit5' value=' '\/><\/td>\n<td><input type='button' name='switch' id=\"switch5\" value=\"Input Switch\" onclick=\"pbInputSwitch(5,'N')\" ><\/td>\n<td><input type='button' name='consolecopy' value=\"Open in console\" onclick=\"pbConsoleCopy(5)\" ><\/td>\n<td><input type='button' name='visualize' value=\"Visualize\" onclick=\"pbVisualize(5,'N')\" ><\/td>\n<\/tr><\/table><select id='pbSelect5' class='selectmore'><option name='more'>More actions...<\/option>\n<option name='history' data-pbonclick=\"historyClick(5,'9.numberify')\" >History<\/option>\n<option name='default' data-pbonclick=\"pbSetText(5,descape($('#defaultCode5').val()))\" >Reset code to default<\/option>\n<option name='help' data-pbonclick=\"helpClick(5);\" >Help<\/option>\n<\/select><\/div>\n<input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" id=\"inputInUse5\" name=\"inputInUse\" value=\"Y\"\/>\n<input type=\"hidden\" name=\"pyId\" value=\"5\"\/>\n<input type=\"hidden\" name=\"hash\" value=\"d00461fb55943ddeb6e55075ca0ce09f\"\/>\n<div id='pbresults5' class='pbresults avoidline'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>jQuery(function(){pbToggleCodeMirror(5);});pbInputSwitch(5,\"N\");<\/script>\n<\/p>\n<div class='pybox modeNeutral' id='pybox8'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Multiple Choice Exercise: <\/span><span class='title'>Prawo De Morgana<\/span><\/div><div>Kt\u00f3re z nast\u0119puj\u0105cych wyra\u017ce\u0144 jest r\u00f3wnowa\u017cne z <code>A or B<\/code>?<\/div><label>Your choice: <\/label><select id=\"pyselect8\"><option value=\"d\" selected>Select one<\/option><option value=\"w\">not (A and B)<\/option><option value=\"r\">not ((not A) and (not B))<\/option><option value=\"w\">(not A) and (not B)<\/option><\/select><div class='pyboxbuttons'><input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" name=\"slug\" value=\"9.demorgan\"\/><input type='submit' style='margin:5px;' value='Check answer' onClick='pbMultiCheck(8)'\/><\/div><div class=\"pbresults\" id=\"pyMultiResults8\"><\/div><div class=\"epilogue\">Bardzo dobrze!\r\nOto jeden ze sposob\u00f3w uzyskania odpowiedzi. \r\nPo pierwsze, <code>not (A or B)<\/code> jest tylko wtedy prawdziwe, gdy oba <code>A<\/code> i <code>B<\/code> s\u0105 fa\u0142szywe. \r\nNale\u017cy r\u00f3wnie\u017c pami\u0119ta\u0107, \u017ce <code>(not A) and (not B)<\/code> jest tylko wtedy prawdziwe, gdy oba <code>not A<\/code> i <code>not B<\/code> s\u0105 prawdziwe,\r\ntzn. je\u015bli oba <code>A<\/code> i <code>B<\/code> s\u0105 fa\u0142szywe. \r\nMamy wi\u0119c nast\u0119puj\u0105ce r\u00f3wno\u015bci:<pre>(not A) and (not B) = not (A or B)<\/pre>\r\nUmieszczaj\u0105c <code>not<\/code> po obu stronach, mo\u017cemy wnioskowa\u0107\r\n<pre>not ((not A) and (not B)) = not (not (A or B))<\/pre>\r\nzauwa\u017camy, \u017ce <code>not(not X))<\/code> zawsze r\u00f3wne jest <code>X<\/code>, wi\u0119c \r\n<pre>not ((not A) and (not B)) = not (not (A or B)) = A or B<\/pre>\r\nTen spos\u00f3b zapisywania wyra\u017ce\u0144 boolowskich jest jednym z <a href='https:\/\/pl.wikipedia.org\/wiki\/Prawa_De_Morgana'>praw De Morgana<\/a>.<\/div><\/div>\n<p>Operatory typu Boolean maj\u0105 \"porz\u0105dek operacji\" podobnie jak operatorzy matematyki. Kolejno\u015b\u0107 jest<br \/>\nNAO: nie (najwy\u017cszy priorytet) i, lub (najni\u017cszy priorytet)<br \/>\nWi\u0119c na przyk\u0142ad,<br \/>\nNie x lub y i z oznacza (nie x) lub (y i z)<br \/>\nPodsumowuj\u0105c lekcj\u0119 z kr\u00f3tkim pytaniem wykorzystujemy te fakty.<\/p>\n<h3>Kolejno\u015b\u0107 Operacji<\/h3>\n<p><span style=\"color: #444444; line-height: 24px;\">\"Kolejno\u015b\u0107 operacji\" boolowskich jest podobna do kolejno\u015bci operacji matematycznych. Kolejno\u015b\u0107 jest nast\u0119puj\u0105ca<\/span><\/p>\n<p style=\"text-align: center;\"><strong>NAO<\/strong>: not (najwy\u017cszy priorytet), and, or (najni\u017cszy priorytet)<\/p>\n<p style=\"text-align: left;\">zatem, przyk\u0142ad<\/p>\n<p style=\"text-align: center;\"><code>not x or y and z<\/code> <span style=\"padding-right: 40px; padding-left: 40px;\">oznacza<\/span> <code>(not x) or (y and z)<\/code><\/p>\n<p>Podsumowujemy t\u0105 lekcj\u0119 kr\u00f3tkim pytaniem wykorzystuj\u0105cym te fakty.<br \/>\n<div class='pybox modeNeutral' id='pybox9'>\n<img title='You have not yet completed this problem.' src='https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-content\/plugins\/pybox\/files\/icon.png' class='pycheck'\/><div class=\"heading\"><span class='type'>Multiple Choice Exercise: <\/span><span class='title'>Kolejno\u015b\u0107 Operacji<\/span><\/div><div>Jaka jest warto\u015b\u0107: <\/p>\n<pre>A or not B and C<\/pre> jesli (A, B, C) = (False, True, True)? <a class=\"hintlink\"  id=\"hintlink10\">Wskaz\u00f3wka<\/a><\/div><label>Your choice: <\/label><select id=\"pyselect9\"><option value=\"d\" selected>Select one<\/option><option value=\"w\">True<\/option><option value=\"r\">False<\/option><\/select><div class='pyboxbuttons'><input type=\"hidden\" name=\"lang\" value=\"\"\/><input type=\"hidden\" name=\"slug\" value=\"9.multi\"\/><input type='submit' style='margin:5px;' value='Check answer' onClick='pbMultiCheck(9)'\/><\/div><div class=\"pbresults\" id=\"pyMultiResults9\"><\/div><div class=\"epilogue\">Bardzo dobrze! Kolejno\u015b\u0107 operacji jest jednakowa dla\r\n<pre>A or ((not B) and C)<\/pre>\r\nzast\u0119puj\u0105c warto\u015bciami, otrzymujemy\r\n<pre>False or ((not True) and True)<\/pre>\r\ni  teraz upraszczaj\u0105c otrzymujemy\r\n<pre>False or ((not True) and True)<br\/>= False or (False and True)<br\/>= False or False<br\/>= False<\/pre><\/div><\/div><br \/>\nPo zako\u0144czeniu tego zadania jeste\u015b gotowy na nast\u0119pn\u0105 lekcj\u0119.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>W tej lekcji nauczysz si\u0119 elegancko wykonywa\u0107 skomplikowane testy logiczne przy u\u017cyciu dw\u00f3ch nowych element\u00f3w j\u0119zyka Python. po instrukcji if \u00abC\u00bb, instrukcja else wykonywana jest tylko wtedy, gdy C jest false mo\u017cna \u0142\u0105czy\u0107 warunki logiczne za pomoc\u0105 A and B, &hellip; <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/9-pl\/\">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-9968","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/9968","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=9968"}],"version-history":[{"count":20,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/9968\/revisions"}],"predecessor-version":[{"id":10292,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/9968\/revisions\/10292"}],"wp:attachment":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/media?parent=9968"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}