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