#ubuntu-nl-mwanzo-klas 2011-02-05
<leoquant> het kanaal is vanaf nu +m
<leoquant> commandoline, gelukt?
<commandoline> leoquant: ja
<leoquant> mooi
<leoquant> tot straks
<commandoline> Welkom allemaal bij alweer de derde les uit deze basiscursus Python!
<commandoline> Laten we beginnen met het huiswerk wat ik de vorige keer had opgegeven even bespreken
<commandoline> er zijn meerdere oplossingen mogelijk.
<commandoline> voor iedereen die het programma van de vorige keer niet direct bij de hand heeft/er vorige keer niet was: http://paste.ubuntu.com/563040/
<commandoline> de eerste mogelijkheid is om de code die nodig is bij het invoeren weg te knippen, en op de plekken waar die nodig is te plakken
<commandoline> je krijgt dan dit:
<commandoline> http://paste.ubuntu.com/563139/
<commandoline> FOAD> Is dat niet strijdig met de Python filosofie?
<commandoline> het klopt dat er iets bestaat als 'there is only one way to do it'
<commandoline> maar dat geld alleen voor dingen in de taal zelf, en ook daarvan wordt wel eens afgeweken
<commandoline> goed, deze oplossing doet wat we willen, maar heeft als nadeel dat er stukjes code meerdere keren in het programma staan, identieke stukjes
<commandoline> als je nu bijv. een fout ontdekt in zo'n stukje code, dan zul je die overal moeten verbeteren.
<commandoline> daarom heb ik nog een tweede mogelijkheid bedacht.
<commandoline> http://paste.ubuntu.com/563140/
<commandoline> dit programma lijkt eigenlijk een stuk meer op het origineel
<commandoline> er is maar Ã©Ã©n regel verandert, er wordt nu alleen om invoer gevraagd als 'keuze' kleiner is dan 4 door middel van een if-statement.
<commandoline> begrijpt iedereen wat ik gedaan heb bij de tweede oplossing?
<commandoline> mooi, dan gaan we verder
<commandoline> <shived> Ja, maar als je foutieve input geeft bvb -2 vraagt je programma toch nog steeds naar 2 getallen. of heb ik het mis?
<commandoline> dat klopt
<commandoline> ik heb het hier gedaan omdat het sowieso fout gaat bij foutieve invoer.
<leoquant> <MedUsaXIII> kun je ook een range op geven waar de input in moet zitten ?
<commandoline> en omdat ik even wilde laten zien dat er meerdere oplossingen zijn, waarvan de makkelijkste niet altijd de beste is.
<commandoline> MedUsaXIII: je kan zoiets doen:
<commandoline> if keuze > 0 and keuze < 5:
<commandoline> en dan heeft bovenstaande methode geen nadeel meer, zolang deze volgorde van menuitems gebruikt wordt.
<commandoline> 'and' kijkt of twee condities waar zijn.
<commandoline> en alleen dan is de gehele conditie waar
<commandoline> dat betekend hier:
<commandoline> keuze > 0 is waar & keuze < 5 is waar
<commandoline> en dan is dus automatisch het geheel ook waar.
<commandoline> ok, dan kunnen we verder met de stof voor deze les lijkt me.
<commandoline> we gaan eerst weer even werken in de terminal, zoals in de eerste les.
<commandoline> Toepassingen > Hulpmiddelen > Terminalvenster
<commandoline> (of pak het handige terminalvenster van lernid erbij :) )
<commandoline> we geven net als twee weken geleden het commando 'python' in
<commandoline> ok, waar ik het deze week over wil hebben zijn 'lists', of in het Nederlands lijsten.
<commandoline> tot nu toe hebben we altijd gehad dat een variabele maar Ã©Ã©n waarde had
<commandoline> a = 1
<commandoline> bijv.
<commandoline> maar stel je voor dat je bijv. een programma schrijft voor een winkel
<commandoline> en dat je alle dingen wil bijhouden die de winkel in huis heeft.
<commandoline> dat gaat niet met wat we tot nu toe behandelt hebben.
<commandoline> en daarvoor zijn lists dus ontworpen.
<commandoline> een voorbeeldje:
<commandoline> winkel_inventaris = ["appels", "peren", "bananen"]
<commandoline> we hebben nu een variabele 'winkel_inventaris', met daarin meerdere stukjes tekst (die stukjes tekst heten overigens strings, daar komen we later nog uitgebreider op terug)
<commandoline> we kunnen er verschillende dingen mee doen, bijv. ze stuk voor stuk weergeven.
<commandoline> bijv:
<commandoline> http://paste.ubuntu.com/563156/
<commandoline> je ziet hier op de eerste regel iets wat we nog nooit eerder hebben gebruikt:
<commandoline> een for-statement
<commandoline> het for-statement is net zoals het while-statement dat we in het rekenmachineprogramma gebruikten een 'loop'
<commandoline> alles wat eronder staat (en ingesprongen is) wordt 0, 1 of meerdere keren uitgevoerd.
<commandoline> bij de while-loop hangt het aantal keer van uitvoeren af van of de voorwaarde (conditie) die er achter staat 'waar' oplevert
<commandoline> bij de for loop gaat dat anders
<commandoline> voor ieder item in de de eerder aangemaakte lijst ('winkel_inventaris')
<commandoline> wordt de variabele stuk_fruit gemaakt
<commandoline> en wordt de code die onder de for-loop staat uitgevoerd
<commandoline> tot zover even, probeer het scriptje even uit te voeren
<commandoline> vragen?
<leoquant> IndentationError:
<commandoline> hannie: er moet nog een tab tussen '...' en 'print'
<commandoline> de uitvoer is als het goed is:
<commandoline> appels
<commandoline> peren
<commandoline> bananen
<commandoline> onder elkaar
<commandoline> de for loop heeft voor ieder item in de winkel_inventaris het print-commando aangeroepen
<commandoline> Emiel1976> ik krijg daarna weer puntjes. is het dan goed?
<commandoline> druk nog een keer op enter, en de loop gaat van start
<commandoline> goed, zo'n lijst zoals we die nu hebben gemaakt is wel leuk, maar we hebben er nog weinig aan.
<commandoline> dat verandert zodra je er bijv. dingen aan kan toevoegen.
<commandoline> dat gaat zo:
<commandoline> winkel_inventaris.append("kiwi")
<commandoline> vervolgens kun je d.m.v.
<commandoline> print winkel_inventaris
<commandoline> zien dat de kiwi aan onze lijst is toegevoegd
<commandoline> lukt dat?
<commandoline> 'append' voegt iets toe aan het einde van de lijst
<commandoline> <hannie> AttributeError: 'str' object has no attribute 'append'
<commandoline> oh, ik zie dat het al opgelost is.
<commandoline> wat er gebeurde was waarschijnlijk dat je niet toevoegde aan de list, maar aan iets anders
<commandoline> ok, stel nu dat de appels uitverkocht zijn
<commandoline> dan moeten ze natuurlijk van de lijst worden gehaald
<commandoline> dat betekend wel dat we moeten weten hoeveelste 'appels' in de lijst is.
<commandoline> je moet daarvoor weten dat python aan ieder item een nummer geeft
<commandoline> in ons voorbeeld heeft 'appels' het nummer (de zogenaamde index) 0, en heeft 'kiwi' het nummer 3
<commandoline> er wordt dus begonnen met 0, en daarna naar boven doorgeteld.
<commandoline> om de appels uit de lijst te gooien, doen we het volgende:
<commandoline> del winkel_inventaris["appels"]
<commandoline> ho, fout :P
<commandoline> del winkel_inventaris[0]
<commandoline> Cugel> Waarom niet winkel_inventaris.remove()  etc. ?
<commandoline> het verschil is dat 'del' niet alleen bedoelt is voor lijsten, en append wel. (later wil ik het verschil wat preciezer uitleggen)
<commandoline> je kan bijv. ook dit doen
<commandoline> a = 1
<commandoline> del a
<commandoline> als je daarna
<commandoline> print a
<commandoline> doet, dan merk je dat 'a' niet meer bestaat.
<commandoline> <hannie> Je maakt de variabele dus weer leeg
<commandoline> precies
<commandoline> <hannie> nu vierkante haakjes en bij append ronde haakjes?
<commandoline> de vierkante haakjes worden gebruikt om aan te geven dat we een bepaald item in de lijst willen krijgen
<commandoline> je kan bijv. ook het volgende doen:
<commandoline> print winkel_inventaris[0]
<commandoline> daarom zijn ze dus anders dan de ronde haakjes die we tot nu toe hebben gebruikt:
<commandoline> ze zijn ergens anders voor bedoeld.
<commandoline> duidelijk tot zover?
<commandoline> ah, toch nog een vraag, mooi :)
<commandoline> <Emiel1976> ik krijg bij print winkel_inventaris[0] nu peren. dit is omdat de appels er uit zijn?
<commandoline> dat klopt helemaal, de 'indexes' schuiven door zodra een item uit de lijst wordt verwijdert.
<commandoline> ok, tot zover het winkelvoorbeeld
<commandoline> ik wilde graag nog een ander programma maken namelijk, een programma dat opnieuw op lists is gebaseerd.
<commandoline> ik heb daarvoor dit online document gemaakt, zodat jullie allemaal mee kunnen kijken:
<commandoline> http://typewith.me/ep/pad/view/ro.Op$gICXuBpU/latest
<leoquant> ja
<leoquant> ik zie getyp
<commandoline> mooi
<commandoline> ok, ik wilde een programma maken dat je verschillende cijfers laat invoeren
<commandoline> en dat dan vervolgens het gemiddelde berekent
<commandoline> om te beginnen moeten we dus cijfers verzamelen.
<commandoline> een list is daar ideaal voor.
<commandoline> wat je nu ziet is een lege lijst, zonder items van tevoren erin.
<commandoline> die gaan we nu dus toevoegen
<commandoline> om dat te doen gaan we gebruik maken van de while loop
<commandoline> we willen namelijk net zo lang cijfers toevoegen totdat de gebruiker vindt dat het genoeg is.
<commandoline> ik gebruik hier raw_input, en niet input()
<commandoline> omdat het ook mogelijk moet zijn om de letter 'q' in te voeren.
<commandoline> het probleem is dat de raw_input-functie een 'string' teruggeeft, een stukje tekst
<commandoline> en daar kunnen we straks niet mee rekenen
<commandoline> we moeten het daarom omzetten naar een getal. We kunnen er een geheel getal van maken met 'int()'
<commandoline> dus bijv.
<commandoline> int(invoer)
<commandoline> maar dat gaan we niet doen
<commandoline> een geheel getal levert namelijk afgekapte waarden op bij berekeningen.
<commandoline> herinneren jullie je 601/60 = 10 nog?
<leoquant> ja
<commandoline> om er een kommagetal van te maken, gebruiken we i.p.v. int() 'float()'
<commandoline> er klopt nog Ã©Ã©n ding niet aan de code nu
<commandoline> we controleren niet op 'q'
<commandoline> iemand enig idee hoe we kunnen controleren of invoer 'q' is?
<commandoline> ok, een hint, 'if'
<commandoline> en omdat het stil blijft, ook maar even het antwoord:
<commandoline> if invoer == "q":
<commandoline> break hebben we de afgelopen les nog niet gezien.
<commandoline> wat het doet is dat het de loop waarin het staat direct beÃ«indigt.
<commandoline> in dit geval is dat dus de while-loop, die anders 'voor eeuwig' zou blijven draaien.
<commandoline> <Emiel1976> is de break het zelfde als bij html dat je aan een volgende regel begint?
<commandoline> nee, <br /> in html breekt de regel af
<commandoline> deze 'break' stopt het uitvoeren van de loop (lus, in dit geval het while True-statement bovenaan het document)
<commandoline> <hannie> Is == nu wel of niet goed?
<commandoline> == is goed.
<commandoline> = is voor toewijzen van waardes aan variabelen
<commandoline> == is voor vergelijken van waarden.
<commandoline> exalt> kan dit : var = [({a,b},{c,d}), "blaat"] als soort van 2d associatieve array ?
<commandoline> hmm, wat ingewikkeld voor nu, kom ik na de les wel even op terug.
<leoquant> ok
<commandoline> ok, we hebben nu dus een lijst met cijfers.
<commandoline> nu moeten we alleen nog het gemiddelde berekenen.
<commandoline> ik ga hier uit van:
<commandoline> som van alle getallen/aantal getallen
<commandoline> we zullen dus eerst alle getallen die we verzameld hebben bij elkaar moeten optellen.
<commandoline> dat kan met de loop die we eerder vandaag al hebben behandeld.
<commandoline> de for-loop
<commandoline> begrijpt iedereen wat hier gebeurd?
<commandoline> ok, mooi
<commandoline> we hebben nu dus alle cijfers bij elkaar opgeteld.
<commandoline> we moeten ze alleen nog delen door het aantal cijfers.
<commandoline> om daarachter te komen, zullen we een nieuwe python-functie moeten gebruiken:
<commandoline> len()
<commandoline> len() komt van length (lengte) en geeft de lengte van o.a. een list terug
<commandoline> goed, we hebben nu alle gegevens die we nodig hebben
<commandoline> dan hoeven we dus alleen nog het gemiddelde te bereken
<commandoline> door middel van delen '/'
<commandoline> zo, ons programma is klaar.
<commandoline> hoog tijd om eens te kijken of ik geen fouten heb gemaakt.
<commandoline> <hannie> Hoe voer je een .py programma uit?
<commandoline> na de les kan ik nog even uitgebreidere uitleg doen, maar hier komt het op neer:
<commandoline> cd'en naar de map met het bestand
<commandoline> en python bestandsnaam.py
<commandoline> in een terminal
<commandoline> <FOAD> Hij raakt van slag als ik 2 keer enter doe.
<commandoline> dat klopt, we hebben nog altijd geen foutenafhandeling ingebouwd
<commandoline> wat er gebeurd is dat float("") niets is.
<commandoline> en dus een foutmelding geeft.
<commandoline> ok, heeft iedereen het kunnen uitvoeren?
<commandoline> en heeft iemand nog vragen?
<commandoline> het is alweer bijna tijd, dus hier laten we het voor vandaag bij
<commandoline> nog even samenvatting van vandaag:
<commandoline> - lijsten
<commandoline> - toevoegen & verwijderen van items van lijsten
<commandoline> - for loop
<commandoline> - break
<commandoline> - strings, floats, ints
<commandoline> en dan heb ik het belangrijkste wel geloof ik :)
<commandoline> Emiel1976> ja die totaal = 0 is bedoelt dat als je niets in vult je het getal 0 hebt zeker\
<commandoline> het totaal was nog niks, ik moest het nog berekenen.
<commandoline> duidelijk?
<commandoline> <hannie> Wat is het verschil tussen raw_input en input?
<commandoline> <Tjibba> met raw_input maak je een string
<commandoline> <Tjibba> input werkt alleen met getallen
<commandoline> goed, bedankt voor jullie komst dan allemaal en tot volgende week!
 * commandoline is er nog wel even voor vragen
<leoquant> dit kanaal is weer open
<Tjibbo>  :)
<FOAD> Lekker vrij!
<Tjibbo> lol
* ChanServ changed the topic of #Ubuntu-nl-mwanzo-klas to: Zaterdag 12-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.
* ChanServ changed the topic of #Ubuntu-nl-mwanzo-klas to: Zaterdag 12-02-11 :19.30-20.30   workshop Python  voor "beginners" (4)  #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.
<leoquant> dag allemaal
#ubuntu-nl-mwanzo-klas 2011-02-06
<leoquant> hi exalt
#ubuntu-nl-mwanzo-klas 2011-02-07
<leoquant> sst
<leoquant> :
#ubuntu-nl-mwanzo-klas 2011-02-12
<FOAD> Zo.
<StefandeVries> :)
 * FOAD zit er al klaar voor.
<leoquant> dit kanaal is nu "gesloten" vragen kunnen in ubuntu-nl-mwanzo gesteld worden
<leoquant> 19.30 workshop python 4
<leoquant> ready commandoline , niekie , StefandeVries ?
<commandoline> leoquant: ja
<commandoline> OK, tijd om te beginnen met alweer de vierde les :)
<commandoline> vandaag wilde ik de stof van de vorige les uitbreiden met iets wat er op lijkt:
<commandoline> dictionaries
<commandoline> (lett. woordenboeken)
<commandoline> dictionaries lijken erg op lists (lijsten) zoals we die vorige keer hebben behandeld
<commandoline> het verschil wil ik jullie graag uitleggen aan de hand van een voorbeeld
<commandoline> opnieuw in de interactieve Python Shell, dus start allemaal een terminal, en start daarin python.
<commandoline> (Toepassingen>Hulpmiddelen>Terminalvenster ; daarna python intikken en op enter drukken)
<commandoline> tik vervolgens het volgende in:
<commandoline> winkel_inventaris = {"appels": 20, "bananen": 2}
<commandoline> het voorbeeld lijkt op dat van vorige week
<commandoline> opnieuw hebben we hier een lijst van winkel inventaris
<commandoline> waar bij een normale lijst je echter alleen maar items hebt
<commandoline> heb je hier zog. keys en values.
<commandoline> bij een list benader je de items met behulp van een index zoals we vorige week hebben gezien (0, 1, 2 etc.)
<commandoline> nu doen we dat d.m.v. een woord, de key.
<commandoline> (lett. sleutel)
<commandoline> dat woord hebben we opgegeven.
<commandoline> vorige week hadden we om het eerste item te krijgen het volgende gedaan:
<commandoline> print winkel_inventaris[0]
<commandoline> dat werkt deze keer niet
<commandoline> we moeten deze keer een key gebruiken
<commandoline> bijv.:
<commandoline> print winkel_inventaris["appel"]
<commandoline> eh, print winkel_inventaris["appels"]
<commandoline> probeer dat maar eens
<commandoline> je ziet dat python het getal '20' terug geeft.
<commandoline> even opsommend:
<commandoline> - een dictionary bevat net zoals een list een opsomming van gegevens
<commandoline> - een list is geordend op index (0, 1, 2)
<commandoline> - een dictionary is geordend op key ("appels", "bananen" in dit geval)
<commandoline> - een dictionary geeft dus de mogelijkheid om items op te slaan, maar om i.p.v. een nummer ernaar te verwijzen met bijv. een stukje tekst.
<commandoline> kan iedereen dat tot nu toe volgen?
<commandoline> mooi, tijd om dan wat meer te gaan doen met winkel_inventaris
<commandoline> stel bijv. dat de winkel in Ã©Ã©n keer alle appels verkoopt. Dan kunnen we twee dingen doen:
<commandoline> - winkel_inventaris["appels"] op 0 zetten
<leoquant> <SanderM_> ik krijg invalid syntax. maar zit op python 3, bij print winkel_inventaris["appels"]
<StefandeVries> <SanderM_> ik krijg invalid syntax. maar zit op python 3, bij print winkel_inventaris["appels"]
<leoquant> oops
<StefandeVries> print(winkel_inventaris["appels"])
<commandoline> - winkel_inventaris["appels"] wissen, dan houden we de volgende dictionary over:
<commandoline> {"bananen": 2}
<commandoline> beide gaan we even doen, nadat ik de vraag heb beantwoord
<commandoline> oh, heeft StefandeVries al gedaan, zoals afgesproken :)
<StefandeVries> ;)
<commandoline> goed, laten we eerst maar eens de waarde van appels veranderen in 0
<commandoline> dat gaat met de volgende code:
<commandoline> winkel_inventaris["appels"] = 0
<commandoline> je ziet dat het opnieuw erg lijkt op hoe lijsten werken, alleen gebruiken we nu opnieuw in plaats van een index een stukje tekst (string)
<commandoline> we kunnen de wijziging zien door de list weer te printen:
<commandoline> print winkel_inventaris
<commandoline> *dictionary weer te printen
<commandoline> <erkan^> >>> winkel_inventaris["appels] = 0
<commandoline> je bent een " vergeten
<commandoline> na appels
<StefandeVries> erkan^ = afsluitende dubbele aanhalingstekens in de index
<commandoline> goed, dan gaan we nu de wat rigoureuzere manier gebruiken:
<commandoline> appels verwijderen uit de dictionary
<commandoline> dat gaat op de volgende manier, opnieuw lijkt het erg op de manier waarop we dat bij lists doen:
<commandoline> del winkel_inventaris["appels"]
<commandoline> vervolgens kunnen we het resultaat weer controleren met print winkel_inventaris
<StefandeVries> Iedereen met vraag over volgorde: dit gebeurt door de snellere verwerking door/in het geheugen, aldus Learning Python, 4th edition
<commandoline> goed, we kunnen nu waardes aanpassen in een dictionary en verwijderen
<commandoline> we moeten nog maar Ã©Ã©n andere bewerking doen: waardes toevoegen.
<commandoline> en dat gaat op precies dezelfde manier als een waarde aanpassen:
<commandoline> winkel_inventaris["peer"] = 50
<commandoline> vervolgens kunnen we het resultaat nog eens bekijken door de dictionary weer te printen.
<commandoline> {'peer': 50, 'bananen': 2}
<commandoline> is het resultaat
<commandoline> en opnieuw zien we dat een dictionary geen volgorde heeft.
<commandoline> nog vragen tot nu toe?
<StefandeVries> erkan^: [] voor lists-definitie, {} voor dictionary-definitie. [] voor de index van beide :)
<commandoline> vraag was: erkan^> wat is verschilelnd tussen [] en {} ? of maakt dat niet uit ?
<commandoline> http://typewith.me/ep/pad/view/ro.v4Dr17BY6IF/latest
<commandoline> dan gaan we nu weer verder.
<commandoline> goed, we hebben voor vandaag een nieuw programma op de planning staan.
<commandoline> het adresboekprogramma
<commandoline> het idee is dat we iemands naam invoeren, en vervolgens iemands mailadres
<commandoline> we kunnen dan aan het programma door een naam in te voeren, het emailadres vinden.
<commandoline> goed, eerst maar weer eens een menu.
<commandoline> de opties zijn:
<commandoline> Laat alle mailadressen zien
<commandoline> Voeg mailadres toe
<commandoline> Verwijder mailadres
<commandoline> & Afsluiten
<commandoline> vrij logisch.
<commandoline> de afgelopen keren gaven we alle menuopties weer d.m.v. print-statements
<commandoline> maar dat is eigenlijk vooral veel typwerk
<commandoline> en ook tijdens het onderhouden van code is het niet zo handig
<commandoline> daarom ga ik jullie vandaag een nieuwe methode laten zien om de menu items weer te geven
<commandoline> we gebruiken een list daarvoor.
<commandoline> door die list gaan we heen lopen met de for-loop van afgelopen keer, en dan laten we de for-loop alle menuitems printen.
<commandoline> als we de code zo zouden uitvoeren, zouden we alleen de optie zien.
<commandoline> we willen er alleen ook nog een nummer voor zetten.
<commandoline> daarvoor kunnen we de index van de list mooi gebruiken.
<commandoline> we kunnen achter de index van een item komen door menu_opties.index(optie) te gebruiken
<commandoline> de code die we nu hebben ziet er goed uit, maar zal nog crashen als we die uitvoeren.
<commandoline> dat gebeurt omdat we nu proberen om een geheel nummer (integer) op te tellen bij een stukje tekst (optie, en ") ")
<commandoline> dat kan niet.
<commandoline> daarom moeten we eerst het nummer omzetten naar een stukje tekst (string)
<commandoline> dat kan d.m.v. str()
<commandoline> als dat gebeurd is, hoeven we de gebruiker alleen nog te vragen om een keuze te maken.
<commandoline> we doen dat buiten de for-loop, want anders wordt die vraag wat te vaak gesteld.
<commandoline> we hoeven nu alleen nog alle menuopties af te handelen
<commandoline> dat doen we net zo als de vorige keren m.b.v. het if-statement.
<commandoline> ik zie nu trouwens dat ik nog een foutje heb gemaakt, een paar minuten geleden.
<commandoline> het zit in de menu code, ziet iemand het?
<commandoline> als dat niet zo is, is het niet vreemd.
<commandoline> een hint: indexes beginnen te tellen vanaf 0.
<commandoline> goed, ik zal jullie niet langer in spanning houden :P
<commandoline> we doen nu:
<commandoline> nummer = menu_opties.index(optie)
<commandoline> nummer is dus in het geval van "Laat alle emailadressen zien"
<commandoline> 0
<commandoline> verderop doen we:
<commandoline> if keuze == 1:  #laat alle emailadressen zien
<commandoline> we moeten dus nummer verhogen met Ã©Ã©n.
<commandoline> dat kan simpel:
<commandoline> nummer = nummer +1
<commandoline> of verkort:
<commandoline> nummer += 1
<commandoline> het kan hier trouwens nog korter:
<commandoline> nummer = menu_opties.index(optie) +1
<commandoline> maar ik laat het zo staan als het is voor de duidelijkheid
<commandoline> <erkan^> ik kreeg een foutmelding:  File "adresboekje.py", line 16    elif keuze == 2:
<commandoline> dat klopt, de code is nog niet volledig
<commandoline> goed, we gaan nu de opties uiterken.
<commandoline> *uitwerken
<commandoline> ik wil beginnen met de simpelste optie: een mailadres toevoegen.
<commandoline> we moeten twee dingen weten van de gebruiker:
<commandoline> naam
<commandoline> (die later key wordt)
<commandoline> en mailadres
<commandoline> (die later value wordt)
<commandoline> dat doen we m.b.v. raw_input()
<commandoline> goed, nu hebben we nog een dictionary nodig om alle mailadressen in op te slaan.
<commandoline> ik maak die helemaal aan het begin van het programma aan.
<commandoline> toevoegen werkt nu al, maar we vertellen de gebruiker nog even dat het gelukt is
<commandoline> iemand vragen over de code tot nu toe?
<commandoline> prima, de volgende optie die we gaan implementeren is alle mailadressen laten zien
<commandoline> ten eerste moeten we kijken of er wel een mailadres is.
<commandoline> anders is er weinig te laten zien.
<commandoline> dat kunnen we doen met len()
<commandoline> die hadden we vorige week geloof ik ook al gebruikt
<commandoline> goed, weergeven van een dictionary kan via print.
<commandoline> maar ook via de for-loop
<commandoline> print naam, ":", adresboek[naam]
<commandoline> wat hier gebeurd:
<commandoline> naam wordt weergeven
<commandoline> ":" wordt weergeven
<commandoline> adresboek[naam] (het mailadres) wordt weergeven
<commandoline> de for loop loopt standaard door alle keys heen
<leoquant> <CasW> commandoline: je kan niet printen met een for-loop, wel bÃ­nnen een for-loop
<commandoline> in het vorige voorbeeld dus  de soorten fruit
<commandoline> CasW heeft helemaal gelijk ;)
<commandoline> de for loop zorgt alleen maar dat een stukje code meerdere keren wordt uitgevoerd
<commandoline> en printen kÃ¡n dat stukje code zijn
<commandoline> (en dat is hier zo)
<commandoline> goed, tijd voor de op Ã©Ã©n na laatste optie:
<commandoline> verwijderen
<commandoline> we vragen de gebruiker om een naam
<commandoline> en verwijderen die dataset (zowel de key als de value dus) uit de dictionary
<commandoline> is de code tot nu toe duidelijk?
<leoquant> veel ja's
<commandoline> ja, ik zag het
<commandoline> ik heb nog even de foutmelding toegevoegd aan het eind
<commandoline> (bij geen geldige keuze)
<commandoline> een gewoon print statement.
<commandoline> het programma draait momenteel maar Ã©Ã©n keer.
<commandoline> terwijl we willen dat het steeds door draait
<commandoline> daarom gaan we weer de bekende while loop gebruiken.
<commandoline> zo, nu draait ons programma 'voor eeuwig'
<commandoline> ook niet helemaal de bedoeling.
<commandoline> dus laten we nog even de laatste menuoptie toevoegen:
<commandoline> afsluiten
<commandoline> een kwestie van de loop breken, met break
<commandoline> goed, het programma is nu in principe af, maar voor de afwerking wil ik nog even een welkoms- en afsluitboodschap tonen.
<commandoline> goed, probeer het maar te draaien.
 * commandoline is benieuwd of er typfouten in zitten ;)
<commandoline> <FOAD> Maar ik wil de adressen op volgorde zien, kan dat?
<commandoline> FOAD: dat kan, maar dat bewaar ik voor later.
<commandoline> <Oer> else: IndentationError: expected an indented block
<commandoline> mooi, opgelost
<commandoline> goed, de komende twee weken gaat de les niet door i.v.m. de schoolvakantie
<commandoline> wel heb ik nog een opdracht voor jullie bedacht
<commandoline> probeer dit programma zo om te schrijven, dat het een woordenboek wordt.
<commandoline> met als opties:
<commandoline> - een woord met betekenis toevoegen
<commandoline> - alle woorden & betekenissen tonen
<commandoline> - een woord verwijderen
<commandoline> - evt. een woord aanpassen
<commandoline> en voor degene die nog meer wil oefenen:
<commandoline> - probeer een winkelinventarisprogramma te schrijven, dat bijhoud wat een winkel allemaal in voorraad heeft.
<commandoline> die laatste is ingewikkeld, geen probleem als dat niet lukt.
<StefandeVries> Wij zorgen voor uitwerkingen ;)
<commandoline> Prettige vakantie allemaal en bedankt voor jullie komst! Tot over twee weken.
<FOAD> Dank je wel commandoline en ondersteuning.
<erkan^> bedankt commandoline (-:
<commandoline> oja, nog vragen?
 * commandoline is daarvoor nog even aanwezig
<emiel1976_> bedankt. tot over 2 weken
<FOAD> Geen vragen, ik ga lekker oefenen.
<erkan^> ik heb geen vraag, in de toekomst heb ik een hulp nodig,d an kom ik wel bij python-nl
<erkan^> (-:
<commandoline> d
<StefandeVries> we zijn bijna dagelijks online, dus mocht je in je vakantie nog vragen hebben, dan val je maar binnen ;)
* ChanServ changed the topic of #Ubuntu-nl-mwanzo-klas to: Vanag 26 februari weer workshops:  #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 aan de workshopleider.
* ChanServ changed the topic of #Ubuntu-nl-mwanzo-klas to: Vanag 26 februari weer workshops:  #Ubuntu-nl-mwanzo-klas. Info: http://wiki.ubuntu-nl.org/community/mwanzo/Workshop/BasiscursusPython Leiding: commandoline. logs op http://irclogs.ubuntu.com. Let ook op eventueel andere workshops. Alle cursisten join ook: #ubuntu-nl-mwanzo, daar kun je vragen stellen aan de workshopleider.
#ubuntu-nl-mwanzo-klas 2011-02-20
<leoquant> gelukt?

{'channel': 'ubuntu-nl-mwanzo-klas', 'month': 2}