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