[17:36] Zo. [17:36] ik zit al klaar. [18:14] Avoin [18:14] Avond [18:14] hai all [18:15] hallo [18:16] stttt... heb begrepen dat we hier niet mogen praten [18:16] De les moet nog beginnen? Was even in de warrie vanwege CET tijd? [18:16] hoi exalt [18:17] haha hoi leoquant [18:17] goede avond [18:17] 19.30 [18:17] hoi dimi77 [18:18] Ik ben op tijd dus :) gelukkig was vorige keer vet te laat [18:18] ik ga misschien wat eerder weg vandaag , dat licht aan wat variabelen [18:18] Dat mag niet, exalt. [18:18] Tenzij je een briefje van je moeder hebt. [18:18] jammer. [18:18] :-D [18:20] Gelukkig gaat het vanavond over variabelen, dus dat komt goed uit. [18:20] Denk ik. [18:21] heeft iedereen flink gestudeerd op het materiaal van vorige les? [18:21] avondjes allen [18:21] Absoluut, Ronnie. [18:21] Het was taaie materie, maar ik denk dat ik het begrijp. [18:21] Dag Oer. [18:22] zeker Ronnie [18:22] heel goed, beide [18:22] goede avond Oer [18:23] ubuntu-nl-mwanzo is open [18:23] hier volgt zo de les [18:29] commandoline, klaar? [18:30] leoquant: ja [18:30] RawChid, kiwinote Ronnie StefandeVries ok? [18:30] ja [18:30] Zeker [18:30] ok, kunnen we beginnen, leoquant? [18:30] yep! [18:31] ok, welkom dan allemaal bij de tweede les Python! [18:31] ik heb vorige keer een opdrachtje gegeven aan het eind van de les. [18:31] http://paste.ubuntu.com/559992/ [18:32] ben er net weer [18:32] is een mogelijke uitwerking [18:32] ik zal even uitleggen wat er gebeurd [18:32] op de 1e regel wordt m.b.v. de input()-functie aan de gebruiker gevraagd om een nummer in te voeren [18:33] dat nummer wordt opgeslagen in de variabele nummer [18:33] op de volgende regel wordt dat nummer met 2 vermenigvuldigt, en de uitkomst wordt opgeslagen in de variabele uitkomst [18:33] ten slotte wordt het resultaat netjes weergegeven op het scherm m.b.v. 'print' [18:34] is er iemand die nu nog vragen heeft over de opdracht? [18:34] ok, ik zie zo niks, dus dan wordt het tijd om verder te gaan. [18:35] de vorige keer hebben we alle commando's in de zogenaamde interactieve python shell ingevoerd [18:35] dat betekent dat ieder commando dat je invoert, direct wordt uitgevoerd. [18:35] bij een normaal programma is dat niet handig [18:36] om dat probleem op te lossen, kun je je programma opslaan in een bestand. [18:36] Ik ga hier uit van ubuntu i.c.m. de standaard meegeleverde tekst-editor, maar het is mogelijk om iets soortgelijks te doen met vrijwel iedere teksteditor en ieder besturingssysteem [18:37] kies Toepassingen > Hulpmiddelen > Teksteditor [18:38] je typt in het bestand een programma dat we al eerder hebben gezien: [18:38] print "Hallo Ubuntero's!" [18:38] daarna kies je: Bestand > Opslaan [18:39] je kiest een locatie om het bestand op op te slaan, bijv. het Bureaublad [18:39] (daar ga ik vanuit bij dit voorbeeld) [18:39] achter 'Naam: ' typ je in: [18:39] hallo.py [18:39] het stukje 'hallo' is zelfgekozen, de extensie .py is verplicht. [18:40] als je het bestand hebt opgeslagen, wordt het tijd om de terminal weer te starten [18:40] (Toepassingen > Hulpmiddelen > Terminalvenster) [18:40] in de terminal ga je vervolgens naar de locatie waar je het bestand hebt opgeslagen, in ons voorbeeld gaat dat via het commando [18:41] cd ~/Bureaublad [18:41] lukt het tot zover? [18:41] ja [18:41] goed, dan gaan we verder [18:41] typ nu in: [18:42] python hallo.py [18:42] je zult zien dat het programma dat je eerder hebt ingevoerd, uitgevoerd wordt :) [18:43] Je kan nu ook zonder problemen het programma nog een keer draaien: [18:43] gewoon een kwestie van het commando 'python bestandsnaam.py' herhalen [18:44] ok [18:44] Dit maakt het mogelijk om geavanceerdere programma's te schrijven tot nu toe [18:44] deze les wil ik met jullie een programma maken dat ook in de praktijk nuttig is [18:45] een rekenmachine [18:45] het maken van dit script gaat waarschijnlijk langere tijd duren. [18:45] en ik wil dat jullie mee kunnen kijken [18:46] daarom heb ik een bestand online gezet. [18:46] http://piratepad.net/ep/pad/view/ro.0i32sfJWAlx/latest [18:46] jullie kunnen door op die link te klikken, live meekijken met wat ik typ. [18:47] ik zie de tekst idd [18:47] yep [18:48] Goed, de eerste vraag is nu, welke commando's we allemaal achter elkaar moeten zetten om zo'n rekenmachine te bouwen. [18:50] ik heb ondertussen een lijstje toegevoegd in het document, lijkt iedereen dit logisch? [18:50] Om te antwoorden op de opmerking van FOAD in de chat: [18:51] het lijkt ingewikkeld, maar (vrijwel) alle dingen die ik hier heb opgenoemd kunnen jullie al schrijven. [18:51] lets go [18:51] ik heb nu voor de beschrijving haakjes gezet. [18:51] eh, hekjes :P [18:52] hekjes betekenen voor python dat de rest van de regel genegeerd kan worden [18:52] Goed, tijd om de eerste regel code te schrijven. [18:52] we moeten een welkomsboodschap tonen, iemand enig idee hoe we dat kunnen doen? [18:53] Tjibba, ja, klopt [18:53] Tjibba> print hallo? [18:53] (als je de haakjes toevoegd) [18:53] StefandeVries: die vindt ik nog mooier [18:54] goed, volgende stap [18:54] een menu weergeven [18:54] eerst maar eens de opties tonen die de gebruiker heeft [18:55] hmm, nu moeten we nog wat toevoegen zodat de gebruiker daadwerkelijk zijn/haar keuze kan maken [18:55] m.a.w., we moeten de gebruiker om invoer vragen [18:55] -> input() [18:56] Het is altijd mooi om je programma tussendoor eens te testen, om te kijken of het tot zover werkt. [18:57] dus, sla dit eens op, en voer het uit in python, op dezelfde manier als we gedaan hebben met hallo.py [18:57] FOAD: exporteren is mogelijk [18:57] Import/Export > Plain text file [18:58] een goede naam is bijv. calculator.py [18:58] ik heb 'm ook even geexporteerd, en zie dat ik tot zover geen typfouten heb gemaakt :) [18:58] Python voert het programma namelijk naar behoren uit. [18:58] is er iemand die het uitvoeren van het programma nog niet zo snel lukt? [18:59] goed, ik zie niemand direct problemen hebben. [19:00] laten we dan verder gaan met het programma [19:01] wat vinden jullie, zullen we de gebruiker gewoon vragen om twee cijfers, of [19:01] zullen we vragen naar een 'eerste getal om bewerking x mee te doen' en 'een tweede getal om bewerking x mee te doen' [19:01] FOAD: Twee cijfers is wel erg beperkt. [19:02] voorlopig wel idd, maar je kan het zelf naderhand nog uitbreiden. Dit is al meer dan genoeg als basis zul je merken [19:02] even twee eerst? [19:02] leoquant: zeker [19:03] goed, tijd om die twee gevallen te vragen dan. [19:03] opnieuw is input() prima geschikt [19:04] nu wordt het tijd om de gevraagde bewerking uit te voeren op de getallen. [19:04] Heeft iemand enig idee hoe we kunnen bepalen welke bewerking de gebruiker heeft gekozen? [19:05] StefandeVries: klopt [19:05] StefandeVries> if / else-if [19:05] nu komt er iets wat ik nog niet eerder heb laten zien [19:05] elif [19:06] het staat voor else if [19:06] vertaald in het Nederlands wordt het dan: [19:06] waarom vraag je het soort bewerking niet als input3? [19:07] eigenlijk is dat zo, ik heb alleen de naam 'keuze' gekozen i.p.v. 'input3' [19:07] ok [19:07] goed, ik was bij elif [19:08] ik zal eerst even een voorbeeld ervan geven, later geef ik uitleg als het niet vanzelf duidelijk wordt. [19:09] begrijp iedereen wat elif doet? [19:09] het geeft een tweede mogelijkheid aan als de eerste niet voldoet. [19:09] mooi [19:09] tijd om nog even een stukje foutafhandeling toe te voegen [19:10] de gebruiker kan bijv. 5 hebben ingevoerd [19:10] Tjibba > maar is if dan niet voldoende? [19:10] als je nog een keer if zou gebruiken, zouden alle if's apart langsgelopen worden door python [19:11] nu stopt python met de elif's afgaan als één van de voorwaardes waar is. [19:11] FOAD > Nou en? [19:11] het scheelt iets qua snelheid. Hier valt het verschil wel mee, maar het is een goede gewoonte. [19:11] maar ik was bij foutafhandeling aangekomen. [19:12] als de gebruiker 5 invoert, gebeurt er momenteel helemaal niks. [19:12] geen van de voorwaardes is waar, en dus gaat python verder. [19:12] dat staat natuurlijk niet zo mooi, dus ik breid het programma nog een beetje uit. [19:13] goed, we hebben nu dus, ongeacht de bewerking, 'uitkomst' bepaalt. [19:13] hoog tijd om de gebruiker op de hoogte te brengen. [19:14] dat kan gewoon via print. [19:14] goed, dit programma zou al moeten draaien. [19:15] ik zie alleen nog één fout. [19:15] ziet iemand anders die ook? [19:15] is"? [19:15] leoquant: ? [19:15] laat maar.. [19:15] StefandeVries: noemt een goed punt, hoewel het niet is wat ik bedoelde [19:16] overloper: klopt [19:16] er moet nog een terugkoppeling voor als de keuze geen 1-4 was [19:16] we laten een boodschap zien [19:16] maar vervolgens gaat python gewoon verder [19:16] wat python dan probeert is het volgende: [19:16] print "Uw keuze is wat onduidelijk. Was het een nummer tussen de 1 en de 4? Probeer het opnieuw." [19:16] eh, nee, wat er gebeurt is dit: [19:16] print "Het antwoord is", uitkomst, "." [19:17] het probleem is dat 'uitkomst' helemaal geen waarde heeft. [19:17] daarom zal python een foutmelding geven. (als gekozen wordt voor optie 5) [19:17] de oplossing: het programma voortijdig afbreken. [19:17] dat kan met exit() [19:18] ik heb het toegevoegd aan het document. Als er een ander nummer dan 1-4 wordt ingevoerd, gebeurd er nu dit: [19:18] - de gebruiker wordt op de hoogte gebracht. (dat hadden we eerder al gedaan) [19:18] - het programma wordt afgesloten. [19:19] goed, nu hebben we een werkend programma. [19:19] (als ik geen typfouten heb gemaakt, dan.) [19:19] exporteer het maar eens en probeer het uit te voeren. [19:19] Tjibba> maar wat gebeurd er als de gebruiker ipv een getal een letter invoert? [19:19] dan geeft python een foutmelding [19:19] hoe we die afvangen komt later een keer. [19:20] goed opgemerkt, dat wel. [19:20] hij geeft bij mij nog steeds een foutmelding [19:20] dimi77> laat maar doet het al [19:21] goed, ik zie hier een paar goede opmerkingen: [19:21] FOAD> 5/6 is helemaal niet 0. [19:21] dat klopt natuurlijk, dit is een foutje in python. Later zal ik uitleggen hoe we dit recht kunnen zetten. [19:21] (daar komen we vandaag niet meer aan toe denk ik) [19:21] Tjibba> pas na het opgeven van de 2 getallen zegt hij dat ik een onduidelijke keuze heb gemaakt [19:22] dat is eigenlijk wel een fout natuurlijk, maar de oplossing laat ik nog even wachten. [19:22] dat wordt huiswerk denk ik :) [19:22] nee, wat ik nu wil doen is nog één ding doen: [19:22] het programma moet blijven draaien, totdat de gebruiker aangeeft dat het gestopt mag worden. [19:23] StefandeVries: noemde eerder al de oplossing: de while-loop [19:23] ik zal die eerst even toevoegen, en daarna uitleggen. [19:24] StefandeVries> en een keuze voor exit [19:24] ook dat klopt, zover was ik alleen nog niet [19:24] eerst wil ik even kort vertellen wat de while-loop doet. [19:24] die voert een stuk code uit, zolang een bepaalde voorwaarde waar is. [19:24] die voorwaarde is hier de variabele 'rondgaan' [19:25] die heb ik gelijkgesteld aan 'True' -> dat betekend dat de voorwaarde waar is. [19:25] het programma zal nu dus net zolang doorgaan met herhalen, totdat rondgaan niet meer True is [19:25] (maar False) [19:26] goed, ik heb nu nog de optie '5' toegevoegd [19:27] wat die doet is een boodschap weergeven [19:27] ("Bedankt voor het gebruiken van de calculator!") [19:27] en het programma afsluiten [19:27] ik doe dat opnieuw via exit() [19:27] een andere optie zou kunnen zijn om 'rondgaan = False' daar neer te zetten [19:27] als niet onderaan die lijn 'print "Het antwoord is", uitkomst, "."' [19:27] had gestaan. [19:28] want ook bij het afsluiten blijft 'uitkomst' geen waarde hebben. [19:28] FOAD: Maar nu heeft de variabele nog altijd de waarde True? [19:28] klopt, daarom gebruik ik de functie exit() [19:28] als ik die functie niet zou gebruiken, zou het programma 'eeuwig' blijven draaien [19:29] goed, dat was wel wat ik jullie vandaag wilde laten zien. [19:29] zijn er nog vragen? [19:29] Tjibba: klopt, dat is huiswerk. [19:29] (het is nu definitief :P) [19:30] ik raad jullie aan om het document nog één keer te exporteren en te draaien, dan kun je ook de laatste wijzigingen zien. [19:30] goed, als er geen vragen meer zijn, dan is dit het einde van de les! Bedankt voor jullie komst allemaal, en tot volgende week! [19:30] oh, toch nog een vraag :) [19:30] overloper> waarom zet je de laatste printopdracht niet voor élse, uw keuze is onduidelijk? [19:31] als ik dat doe, krijg ik een foutmelding van python. [19:31] dan staat if/elif/else namelijk niet meer achter elkaar in volgorde [19:31] en dan herkent python ze niet meer als bij elkaar horend. [19:32] FOAD> Maar wat is nu precies het huiswerk? [19:34] commandoline, zeer bedankt voor je les(sen) [19:34] Probeer te zorgen dat getal1 en getal2 niet meer gevraagd worden als ze niet nodig zijn. [19:34] da's het huiswerk. [19:34] en graag gedaan :) [19:34] ok [19:34] Bedankt!! [19:34] en verder, blijf gewoon zoveel uitproberen als je wilt met python, dat is de beste manier om python te leren! [19:36] leerzaam [19:36] +1 === ChanServ changed the topic of #Ubuntu-nl-mwanzo-klas to: Zaterdag 05-02-11 :19.30-20.30 workshop Python voor "beginners" (3) #Ubuntu-nl-mwanzo-klas. Info: http://wiki.ubuntu-nl.org/community/mwanzo/Workshop/BasiscursusPython Leiding: commandoline. logs op http://irclogs.ubuntu.com. Alle cursisten join ook: #ubuntu-nl-mwanzo, daar kun je vragen stellen.