{"id":9949,"date":"2017-05-18T02:04:30","date_gmt":"2017-05-18T06:04:30","guid":{"rendered":"https:\/\/cscircles.cemc.uwaterloo.ca\/?page_id=9949"},"modified":"2017-05-22T15:58:42","modified_gmt":"2017-05-22T19:58:42","slug":"pl-5","status":"publish","type":"page","link":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/pl-5\/","title":{"rendered":"5: Wej\u015bcie"},"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 ostatniej lekcji m\u00f3wil\u015bmy o danych wprowadzanych przez u\u017cytkownika, ale nie wyja\u015bnili\u015bmy, w jaki spos\u00f3b u\u017cytkownik to robi. W Pythonie u\u017cytkownik jednorazowo wprowadza jedn\u0105 lini\u0119. Aby uzyska\u0107 lini\u0119 wej\u015bciow\u0105 od u\u017cytkownika, nale\u017cy u\u017cy\u0107 funkcji <code><code>input()<\/code><\/code>.  Funkcja <code>input()<\/code> nie zawiera argument\u00f3w i zawsze zwraca <code>str<\/code> (\u0142a\u0144cuch).<\/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> Na tej stronie internetowej wszystkie dane wej\u015bciowe s\u0105 wprowadzone przed uruchomieniem programu przez nasz automatyczny tester. Je\u015bli <a href=\"\/run-at-home\/\">uruchamiasz interaktywnie Pythona w domue<\/a> wtedy po poleceniu <code>input()<\/code> nast\u0119puje zatrzymanie programu do czasu, a\u017c u\u017cytkownik wpisze wiersz tekstu.<br\/> Ponadto podczas tego typu pracy interaktywnej mo\u017cna skorzysta\u0107 z faktu, \u017ce <code>input()<\/code> akceptuje opcjonalnie \u0142a\u0144cuch, kt\u00f3re b\u0119dzie interpretowany jako monit dla u\u017cytkownika, np. <\/p>\n<pre>number = input(\"Wpisz liczb\u0119 z zakresu od 0 do 100.\")<\/pre>  <\/span><\/td><\/table><\/p>\n<p>Oto przyk\u0142ad u\u017cycia <code>input(<\/code>) w celu uzyskania danych wej\u015bciowych. Nasz automatyczny tester, zamiast u\u017cytkownika, sam okre\u015bla dane wej\u015bcie dla programu.<\/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>Echo tekstu<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 58px;'><textarea wrap='off' name='usercode0' id='usercode0'  cols=10 rows=2 readonly='readonly'  style = 'height : 58px;'  class='pyboxCode RO'>\nlinia = input()\nprint(\"Pierwsza linia wej\u015bciowa:\", linia)<\/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=\"839605c068114a7f3103e665f512818c\"\/>\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>\nNast\u0119pny przyk\u0142ad pokazuje:<\/p>\n<ul>\n<li>Przez wielokrotne wywo\u0142anie funkcji <code>input()<\/code> mo\u017cna uzyska\u0107 wiele linii wprowadzania. Pierwsze wywo\u0142anie <code>input(<\/code>)  pobiera pierwsz\u0105 lini\u0119, drugie pobiera drug\u0105 lini\u0119, itd.<\/li>\n<li>\u0141a\u0144cuch otrzymany z <code>input()<\/code> mo\u017ce by\u0107 konwertowany do <code>int<\/code> lub <code>float<\/code> (podobnie jak w lekcji 4).<\/li>\n<li>Po uruchomieniu programu, przy drugim testowaniu jest podana dodatkowo trzecia linia wej\u015bciowa. Nie jest ona jednak czytana, poniewa\u017c <code>input()<\/code> jest tylko dwukrotnie wywo\u0142ywane.<\/li>\n<\/ul>\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>\u00a0<div class='pyboxTextwrap pyboxCodewrap RO '  style='height: 110px;'><textarea wrap='off' name='usercode1' id='usercode1'  cols=10 rows=4 readonly='readonly'  style = 'height : 110px;'  class='pyboxCode RO'>\ninputString = input()\naFloat = float(inputString)\nprint(aFloat + 1)\nprint('Second line:', input())<\/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<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><\/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=\"ef34ea7699ef225e55382098c6e6c5b5\"\/>\n<div id='pbresults1' class='pbresults'><\/div>\n<\/div>\n<\/form>\n<script type='text\/javascript'>pbInputSwitch(1,\"N\");<\/script>\n<\/p>\n<p>Od tej pory w wi\u0119kszo\u015bci \u0107wicze\u0144 mo\u017cesz stosowa\u0107  w\u0142asne  testowe dane wej\u015bciowe. Wypr\u00f3buj nast\u0119puj\u0105cy eksperyment: powy\u017cej naci\u015bnij przycisk <strong>Wprowad\u017a dane<\/strong>. Pozostaw puste pole. Nast\u0119pnie naci\u015bnij przycisk <strong>Uruchom test<\/strong>. Powinien pojawi\u0107 si\u0119 b\u0142\u0105d.<\/p>\n<pre>EOFError: <strong>EOF<\/strong> podczas czytania linii<\/pre>Akronim EOF oznacza skr\u00f3t od <strong>E<\/strong>nd <strong>O<\/strong>f <strong>F<\/strong>ile (koniec pliku). Ta wiadomo\u015b\u0107 dos\u0142ownie oznacza, \u017ce program wywo\u0142a\u0142 <code>input()<\/code>, ale nie otrzyma\u0142 do odczytu \u017cadnych danych wej\u015bciowych.<\/p>\n<ul>\n<li>Zwykle w naszych lekcjach dane wej\u015bciowe s\u0105 dostarczane przez nasz automatyczny tester, wi\u0119c ten b\u0142\u0105d mo\u017ce oznacza\u0107, \u017ce tw\u00f3j program zbyt wiele razy wywo\u0142uje <code>input()<\/code>.<\/li>\n<li>Powy\u017cej, zgodnie z poleceniem pozostawi\u0142e\u015b pole wprowadzania puste i spowodowa\u0142e\u015b b\u0142\u0105d - <em>nie<\/em> dostarczy\u0142e\u015b danych wej\u015bciowych, wi\u0119c nawet <em>jedno<\/em> wywo\u0142anie <code>input()<\/code> by\u0142o zbyt du\u017c\u0105 ilo\u015bci\u0105 wywo\u0142a\u0144 <code>input()<\/code>.<\/li>\n<\/ul>\n<p>W nast\u0119pnym \u0107wiczeniu zostanie wy\u015bwietlony pro\u015bba o debugowanie programu, kt\u00f3ry nie dzia\u0142a i nale\u017cy zmusi\u0107 go do pracy. Nale\u017cy zauwa\u017cy\u0107, \u017ce b\u0142\u0105d nie jest liter\u00f3wk\u0105, ale raczej <em>b\u0142\u0119dem logicznym<\/em>: program nie zosta\u0142 poprawnie zaprojektowany do wykonania swojej pracy, wi\u0119c musisz go nieco przerobi\u0107.<\/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'>Echo<\/span><\/div>Napisz program, kt\u00f3ry czyta jedn\u0105 lini\u0119 danych wej\u015bciowych i drukuje t\u0119 sam\u0105 lini\u0119 dwa razy. Na przyk\u0142ad, je\u015bli wej\u015bcie jest <code>Echo<\/code> to, wyj\u015bcie powinno by\u0107: <\/p>\n<pre>Echo<br\/>Echo<\/pre> Napraw poni\u017cszy program. (lub usu\u0144 ca\u0142o\u015b\u0107 i napisz program od pocz\u0105tku.) \u00a0<a class=\"hintlink\"  id=\"hintlink3\">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='usercode2' id='usercode2'  cols=10 rows=20   class='pyboxCode RW'>\nprint(input())\nprint(input())\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<input type='hidden' id='defaultCode2' value='print(input())\\nprint(input())\\n'><\/input>\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,'5.echo')\" >History<\/option>\n<option name='default' data-pbonclick=\"pbSetText(2,descape($('#defaultCode2').val()))\" >Reset code to default<\/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=\"c46092927452986086a5249a3c9a0295\"\/>\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<p>Mo\u017cesz kontynuowa\u0107 nast\u0119pn\u0105 lekcj\u0119, kt\u00f3ra dotyczy <code><code>if<\/code><\/code>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>W ostatniej lekcji m\u00f3wil\u015bmy o danych wprowadzanych przez u\u017cytkownika, ale nie wyja\u015bnili\u015bmy, w jaki spos\u00f3b u\u017cytkownik to robi. W Pythonie u\u017cytkownik jednorazowo wprowadza jedn\u0105 lini\u0119. Aby uzyska\u0107 lini\u0119 wej\u015bciow\u0105 od u\u017cytkownika, nale\u017cy u\u017cy\u0107 funkcji input(). Funkcja input() nie zawiera argument\u00f3w &hellip; <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/pl-5\/\">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-9949","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/9949","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=9949"}],"version-history":[{"count":15,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/9949\/revisions"}],"predecessor-version":[{"id":10031,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/9949\/revisions\/10031"}],"wp:attachment":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/media?parent=9949"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}