{"id":6153,"date":"2012-11-05T20:25:19","date_gmt":"2012-11-06T01:25:19","guid":{"rendered":"http:\/\/cscircles.cemc.uwaterloo.ca\/?page_id=6153"},"modified":"2014-09-28T04:45:59","modified_gmt":"2014-09-28T08:45:59","slug":"run-at-home-nl","status":"publish","type":"page","link":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/run-at-home-nl\/","title":{"rendered":"Python thuis"},"content":{"rendered":"<p>De code die je submit naar de CS Circles website wordt nagekeken door een kopie van <em>Python<\/em> die op onze webserver wordt uitgevoerd. Dat stelt ons in staat een opgave automatisch na te kijken. De normale manier om in Python te programmeren is dat je begint met het installeren van een Python interpreter op je eigen computer. Python op je eigen computer thuis uitvoeren heeft meerdere voordelen: (i) je wordt niet beperkt door het feit dat je de Python omgeving op onze webserver moet delen met\u00a0 anderen; (ii) je kunt interactieve programma's schrijven (zie beneden); (iii) wanneer de software\u00a0 eenmaal is ge\u00efnstalleerd heb je geen verbinding met internet nodig om een programma uit te voeren; (iv) je kunt gebruik maken van debug tools , geluid en grafische toepassingen.<\/p>\n<h2><strong>Gratis Python tools<\/strong><\/h2>\n<p>Een voor de hand liggende bron, om Python op je computer uit te voeren, of het nu gaat om Windows, Mac, of Linux, is de offici\u00eble Python.org website. <a href=\"http:\/\/www.python.org\/getit\/\">Klik hier om naar de Download Python pagina te gaan<\/a>. Kies de meest recente 3.x versie en kies de installer die overeenkomt met jouw computer (bijvoorbeeld, voor 32-bit Windows, \"Windows x86 MSI Installer\"), download de installer en voer deze uit. Zodra alles ge\u00efnstalleerd is, kun je het programma <strong>IDLE<\/strong> uitvoeren waarna een interactieve Python prompt te zien is.<\/p>\n<p>Opmerking: op school, mag je wellicht, afhankelijk van de rechten die de school een gebruiker geeft,\u00a0niet zelf Python installeren; het kan zijn dat je de toestemming en hulp van de netwerkbeheerder nodig hebt. Maar mocht dat het geval zijn dan is het toch mogelijk Python te installeren en uit te voeren met behulp van een usb-stick, kijk bijvoorbeeld op <a href=\"http:\/\/portablepython.com\">portablepython.com<\/a>.<\/p>\n<p>IDLE ontbeert een aantal nuttige debug tools. <a href=\"http:\/\/wingide.com\/\">Wing IDE<\/a> kent wel debugging eigenschappen waaronder het maken van\u00a0 <a href=\"http:\/\/wingide.com\/psupport\/wingide-1.1\/node7.html#SECTION00740000000000000000\">breakpoints<\/a>, het <a href=\"http:\/\/wingide.com\/psupport\/wingide-1.1\/node7.html#SECTION00760000000000000000\">stap voor stap kunnen uitvoeren<\/a> van een programma,\u00a0 het kunnen bekijken van variabelen en de stack. Andere opties, die we moeilijker konden installeren, zijn <a href=\"http:\/\/pydev.org\/\">PyDev<\/a> of <a href=\"http:\/\/www.jetbrains.com\/pycharm\/\">PyCharm<\/a>. <em>Voor het overige van deze pagina hebben we alleen over <strong>IDLE<\/strong>.<\/em><\/p>\n<h2>De interactieve prompt gebruiken<\/h2>\n<p>Wanneer je <strong>IDLE<\/strong> opent zie een <em>interactieve prompt<\/em> (ook wel <em>shell <\/em>genaamd). Hier, kun je meteen een opdracht intypen en onmiddellijk laten uitvoeren. Het teken<\/p>\n<pre>&gt;&gt;&gt;<\/pre><code><\/code>geeft aan dat Python wacht op invoer. Als je bijvoorbeeld <code>print(2+3)<\/code> intypt en dan op de Enter toets drukt, krijg je te zien<\/p>\n<pre>&gt;&gt;&gt; print(2+3)\r\n5<\/pre>De eerste regel is wat je aan Python vroeg om te doen, en de tweede regel is de uitvoer van Python: het resultaat\u00a0 van het uitvoeren van de opdracht was dat Python het getal heeft uitgerekend en afgedrukt. In feite kun je, als je dat wilt,\u00a0 <code>print<\/code> weglaten.<\/p>\n<pre>&gt;&gt;&gt; 2+3\r\n5<\/pre>Met andere woorden, standaard zal Python de waarde van de opdrachten, die je vraagt om uit voeren, afdrukken. Het is nuttig om te weten welke versie van Python je gebruikt. Wanneer je de volgende twee regels laat uitvoeren kun je zien welke versie we hier bij CS Circles gebruiken.<br \/>\n<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>Ga na welke versie van Python we gebruiken. Wanneer je deze twee regels thuis uitvoert krijg je de versie te zien die\u00a0<em>jij<\/em> gebruikt.<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'>\nimport sys\nprint(sys.version_info)<\/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=\"e58674cc16da28c4cea98460342f7446\"\/>\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(We leren je versie 3 omdat dat voor beginners gemakkelijker is. Versie 2 wordt nog veel gebruikt in de industrie, maar ook daar wordt versie 3 meer en meer gebruikt.)<\/p>\n<h2>Nuttige feiten<\/h2>\n<ul>\n<li>De interactieve prompt kan je helpen documentatie te verkrijgen over ingebouwde functies door middel van de <code>help<\/code> functie. Type bijvoorbeeld in <code>help(print)<\/code> waarna je informatie krijgt over hoe de <code>print()<\/code> functie werkt.<\/li>\n<li>Om een oneindige loop of een berekening die te lang duurt te stoppen, kun je het programma <em>onderbreken<\/em> door op Ctrl-C te drukken. Probeer de volgende opdracht uit te voeren\n<pre>while (1 &gt; 0): purpose = \"Wasting Time\"<\/pre>en onderbreek het dan met Ctrl-C.<\/li>\n<li>Wanneer je Python als rekenmachine gebruikt\u00a0 of je doet wat kleine experimenten, dan hebben we een shortcut voor je. De underscore <code>_<\/code> refereert aan het resultaat van voorgaande opdracht die is uitgevoerd bij de interactieve prompt. Als je bijvoorbeeld\u00a0 <code>2+3<\/code> op een regel typt en dan <code>_*2<\/code>\u00a0op de volgende regel\u00a0 dan zie je:\n<pre>&gt;&gt;&gt; 2+3\r\n5\r\n&gt;&gt;&gt; _*2\r\n10<\/pre>\n<\/li>\n<\/ul>\n<h2>Bestanden\/scripts bewerken<\/h2>\n<p>Wanneer je werkt aan een complex probleem dan is het nodig om een groot bestand met vele regels te schrijven en aan te passen, vergelijkbaar met het schrijven van de CS Circles website. Om dit met in <strong>IDLE<\/strong> te doen, ga je naar het File menu en kies daar New Window (of gebruik Ctrl-N).\u00a0 Daarmee wordt een nieuw venster geopend\u00a0 waarin een basis tekstverwerker actief is (niet een interactieve prompt). Schrijf wat code in dit venster (bijvoorbeeld <code>print(\"Hello, World\")<\/code>); merk op dat deze regel niet wordt uitgevoerd wanneer je de Enter toets indrukt. Bewaar dit bestand op je computer (in het File menu kies je Save, of druk op Ctrl-S). Daarna kun je het uitvoeren: ga naar het Run menu en kies Run Module (of\u00a0 gebruik de sneltoets F5). Je zult de uitvoer van je programma zien in het venster met de interactieve prompt!<\/p>\n<h1>Interactieve invoer<\/h1>\n<p>Een belangrijke eigenschap dat je kunt toepassen wanneer je Python op je eigen computer thuis uitvoert, anders dan op de CS Circles website, is dat je n<em>u interactieve invoer<\/em> kunt gebruiken in het zogenaamde interpreter venster. De <code>input()<\/code> opdracht zorgt ervoor dat er regel invoer vanuit de interactieve interpreter, en dat de string de\u00a0 return waarde van de\u00a0 <code>input()<\/code> functie wordt. Daar komt nog bij dat wanneer je een input gebruikt het mogelijk is om een <em>prompt string<\/em>\u00a0als argument mee te geven, waarmee de gebruiker geholpen kan worden wat te doen. We zulle dat illustreren met een voorbeeld... kopieer het in je IDLE editor, bewaar het en voer het uit.<\/p>\n<pre>print(\"Good day!\")\r\nusername = input(\"What is your name? \")\r\nprint(\"Nice to meet you,\", username)<\/pre>\n<h2>Een voorbeeld met interactiviteit: een raadspel<\/h2>\n<p>Hier volgt een voorbeeld waarbij interactieve invoer een groot verschil maakt. Het betreft een raadspel waarbij je tegen de computer speelt. We zullen gebruik maken van een functie uit\u00a0 de <code>random<\/code> module: de functie <code>random.randint(A, B)<\/code> genereert een willekeurig geheel getal tussen\u00a0 <code>A<\/code> en <code>B<\/code> (inclusief). Gebruik makende van deze functies, volgt hier een spelletje: kopieer-en-plak het in je Idle-editor, bewaar het en voer het uit!<\/p>\n<pre>import random\r\nsecretNumber = random.randint(1, 100)\r\nprint(\"I'm thinking of a secret number between 1 and 100...\")\r\nwhile True:\r\n    guess = int(input(\"What is your guess? \"))\r\n    if (guess == secretNumber):\r\n        break\r\n    if (guess &gt; secretNumber):\r\n        print(\"Sorry, your guess is too high.\")\r\n    if (guess &lt; secretNumber):\r\n        print(\"Sorry, your guess is too low.\")\r\nprint(\"Dang, you got it!\")<\/pre>\n<h2>En daarna...<\/h2>\n<p>Wanneer je programma's thuis schrijven en uitvoeren interessant vindt schrijf dan meer ingewikkelde programma's zoals een interactief programma dat meeteenheden omzet. Hier volgen nog een paar dingen die je kunt doen wanneer je Python op de eigen computer uitvoert:<\/p>\n<ul>\n<li>de <a href=\"http:\/\/docs.python.org\/py3k\/library\/turtle.html#module-turtle\">Python <strong>turtle (schildpad)\u00a0<\/strong> module<\/a> waarmee je lijngrafieken en meetkundige animaties\u00a0 kunt realiseren!<\/li>\n<li>je kunt Python programma's schrijven waarmee je <a href=\"http:\/\/docs.python.org\/tutorial\/inputoutput.html#reading-and-writing-files\">bestanden kunt lezen en schrijven<\/a>;<\/li>\n<li>je kunt Python gebruiken om <a href=\"http:\/\/stackoverflow.com\/questions\/1967040\/how-can-i-create-a-melody-is-there-any-sound-module\">muzikale toontjes <\/a>te produceren!<\/li>\n<\/ul>\n<p>We bevelen het gratis\u00a0 <a href=\"http:\/\/inventwithpython.com\/\">Invent Your Own Computer Games With Python<\/a>\u00a0 aan wanneer je opzoek bent naar iets dat op een levendige en gedetailleerde manier grappige en interessante idee\u00ebn uitlegt over interactieve Python.<\/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> Je kunt Pygame in Python 3 in Windows implementeren door gebruik te maken van\u00a0 <a href=\"http:\/\/www.lfd.uci.edu\/~gohlke\/pythonlibs\/#pygame\">extra bibliotheken die je hier vindt<\/a>.  <\/span><\/td><\/table><\/p>\n","protected":false},"excerpt":{"rendered":"<p>De code die je submit naar de CS Circles website wordt nagekeken door een kopie van Python die op onze webserver wordt uitgevoerd. Dat stelt ons in staat een opgave automatisch na te kijken. De normale manier om in Python &hellip; <a href=\"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/run-at-home-nl\/\">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-6153","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/6153","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=6153"}],"version-history":[{"count":10,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/6153\/revisions"}],"predecessor-version":[{"id":8435,"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/pages\/6153\/revisions\/8435"}],"wp:attachment":[{"href":"https:\/\/cscircles.cemc.uwaterloo.ca\/dev\/wp-json\/wp\/v2\/media?parent=6153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}