/srv/irclogs.ubuntu.com/2011/02/12/#ubuntu-nl-mwanzo-klas.txt

=== leoquant is now known as Guest58047
FOADZo.17:55
StefandeVries:)18:00
* FOAD zit er al klaar voor.18:00
leoquantdit kanaal is nu "gesloten" vragen kunnen in ubuntu-nl-mwanzo gesteld worden18:21
leoquant19.30 workshop python 418:22
leoquantready commandoline , niekie , StefandeVries ?18:30
commandolineleoquant: ja18:30
commandolineOK, tijd om te beginnen met alweer de vierde les :)18:30
commandolinevandaag wilde ik de stof van de vorige les uitbreiden met iets wat er op lijkt:18:31
commandolinedictionaries18:31
commandoline(lett. woordenboeken)18:31
commandolinedictionaries lijken erg op lists (lijsten) zoals we die vorige keer hebben behandeld18:31
commandolinehet verschil wil ik jullie graag uitleggen aan de hand van een voorbeeld18:32
commandolineopnieuw in de interactieve Python Shell, dus start allemaal een terminal, en start daarin python.18:32
commandoline(Toepassingen>Hulpmiddelen>Terminalvenster ; daarna python intikken en op enter drukken)18:32
commandolinetik vervolgens het volgende in:18:33
commandolinewinkel_inventaris = {"appels": 20, "bananen": 2}18:33
commandolinehet voorbeeld lijkt op dat van vorige week18:34
commandolineopnieuw hebben we hier een lijst van winkel inventaris18:34
commandolinewaar bij een normale lijst je echter alleen maar items hebt18:35
commandolineheb je hier zog. keys en values.18:35
commandolinebij een list benader je de items met behulp van een index zoals we vorige week hebben gezien (0, 1, 2 etc.)18:35
commandolinenu doen we dat d.m.v. een woord, de key.18:36
commandoline(lett. sleutel)18:36
commandolinedat woord hebben we opgegeven.18:36
commandolinevorige week hadden we om het eerste item te krijgen het volgende gedaan:18:36
commandolineprint winkel_inventaris[0]18:36
commandolinedat werkt deze keer niet18:36
commandolinewe moeten deze keer een key gebruiken18:37
commandolinebijv.:18:37
commandolineprint winkel_inventaris["appel"]18:37
commandolineeh, print winkel_inventaris["appels"]18:37
commandolineprobeer dat maar eens18:37
commandolineje ziet dat python het getal '20' terug geeft.18:37
commandolineeven opsommend:18:38
commandoline- een dictionary bevat net zoals een list een opsomming van gegevens18:38
commandoline- een list is geordend op index (0, 1, 2)18:38
commandoline- een dictionary is geordend op key ("appels", "bananen" in dit geval)18:39
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.18:39
commandolinekan iedereen dat tot nu toe volgen?18:40
commandolinemooi, tijd om dan wat meer te gaan doen met winkel_inventaris18:40
commandolinestel bijv. dat de winkel in één keer alle appels verkoopt. Dan kunnen we twee dingen doen:18:40
commandoline- winkel_inventaris["appels"] op 0 zetten18:41
leoquant<SanderM_> ik krijg invalid syntax. maar zit op python 3, bij print winkel_inventaris["appels"]18:41
StefandeVries<SanderM_> ik krijg invalid syntax. maar zit op python 3, bij print winkel_inventaris["appels"]18:41
leoquantoops18:41
StefandeVriesprint(winkel_inventaris["appels"])18:41
commandoline- winkel_inventaris["appels"] wissen, dan houden we de volgende dictionary over:18:41
commandoline{"bananen": 2}18:42
commandolinebeide gaan we even doen, nadat ik de vraag heb beantwoord18:42
commandolineoh, heeft StefandeVries al gedaan, zoals afgesproken :)18:42
StefandeVries;)18:42
commandolinegoed, laten we eerst maar eens de waarde van appels veranderen in 018:42
commandolinedat gaat met de volgende code:18:43
commandolinewinkel_inventaris["appels"] = 018:43
commandolineje ziet dat het opnieuw erg lijkt op hoe lijsten werken, alleen gebruiken we nu opnieuw in plaats van een index een stukje tekst (string)18:43
commandolinewe kunnen de wijziging zien door de list weer te printen:18:44
commandolineprint winkel_inventaris18:44
commandoline*dictionary weer te printen18:44
commandoline<erkan^> >>> winkel_inventaris["appels] = 018:45
commandolineje bent een " vergeten18:45
commandolinena appels18:45
StefandeVrieserkan^ = afsluitende dubbele aanhalingstekens in de index18:45
commandolinegoed, dan gaan we nu de wat rigoureuzere manier gebruiken:18:47
commandolineappels verwijderen uit de dictionary18:47
commandolinedat gaat op de volgende manier, opnieuw lijkt het erg op de manier waarop we dat bij lists doen:18:48
commandolinedel winkel_inventaris["appels"]18:48
commandolinevervolgens kunnen we het resultaat weer controleren met print winkel_inventaris18:48
StefandeVriesIedereen met vraag over volgorde: dit gebeurt door de snellere verwerking door/in het geheugen, aldus Learning Python, 4th edition18:48
commandolinegoed, we kunnen nu waardes aanpassen in een dictionary en verwijderen18:50
commandolinewe moeten nog maar één andere bewerking doen: waardes toevoegen.18:50
commandolineen dat gaat op precies dezelfde manier als een waarde aanpassen:18:50
commandolinewinkel_inventaris["peer"] = 5018:50
commandolinevervolgens kunnen we het resultaat nog eens bekijken door de dictionary weer te printen.18:51
commandoline{'peer': 50, 'bananen': 2}18:51
commandolineis het resultaat18:51
commandolineen opnieuw zien we dat een dictionary geen volgorde heeft.18:51
commandolinenog vragen tot nu toe?18:52
StefandeVrieserkan^: [] voor lists-definitie, {} voor dictionary-definitie. [] voor de index van beide :)18:52
commandolinevraag was: erkan^> wat is verschilelnd tussen [] en {} ? of maakt dat niet uit ?18:52
commandolinehttp://typewith.me/ep/pad/view/ro.v4Dr17BY6IF/latest18:53
commandolinedan gaan we nu weer verder.18:53
commandolinegoed, we hebben voor vandaag een nieuw programma op de planning staan.18:53
commandolinehet adresboekprogramma18:54
commandolinehet idee is dat we iemands naam invoeren, en vervolgens iemands mailadres18:54
commandolinewe kunnen dan aan het programma door een naam in te voeren, het emailadres vinden.18:54
commandolinegoed, eerst maar weer eens een menu.18:54
commandolinede opties zijn:18:55
commandolineLaat alle mailadressen zien18:55
commandolineVoeg mailadres toe18:55
commandolineVerwijder mailadres18:55
commandoline& Afsluiten18:55
commandolinevrij logisch.18:55
commandolinede afgelopen keren gaven we alle menuopties weer d.m.v. print-statements18:56
commandolinemaar dat is eigenlijk vooral veel typwerk18:56
commandolineen ook tijdens het onderhouden van code is het niet zo handig18:56
commandolinedaarom ga ik jullie vandaag een nieuwe methode laten zien om de menu items weer te geven18:57
commandolinewe gebruiken een list daarvoor.18:57
commandolinedoor die list gaan we heen lopen met de for-loop van afgelopen keer, en dan laten we de for-loop alle menuitems printen.18:57
commandolineals we de code zo zouden uitvoeren, zouden we alleen de optie zien.18:59
commandolinewe willen er alleen ook nog een nummer voor zetten.18:59
commandolinedaarvoor kunnen we de index van de list mooi gebruiken.18:59
commandolinewe kunnen achter de index van een item komen door menu_opties.index(optie) te gebruiken19:00
commandolinede code die we nu hebben ziet er goed uit, maar zal nog crashen als we die uitvoeren.19:01
commandolinedat gebeurt omdat we nu proberen om een geheel nummer (integer) op te tellen bij een stukje tekst (optie, en ") ")19:01
commandolinedat kan niet.19:01
commandolinedaarom moeten we eerst het nummer omzetten naar een stukje tekst (string)19:01
commandolinedat kan d.m.v. str()19:02
commandolineals dat gebeurd is, hoeven we de gebruiker alleen nog te vragen om een keuze te maken.19:02
commandolinewe doen dat buiten de for-loop, want anders wordt die vraag wat te vaak gesteld.19:03
commandolinewe hoeven nu alleen nog alle menuopties af te handelen19:04
commandolinedat doen we net zo als de vorige keren m.b.v. het if-statement.19:04
commandolineik zie nu trouwens dat ik nog een foutje heb gemaakt, een paar minuten geleden.19:05
commandolinehet zit in de menu code, ziet iemand het?19:05
commandolineals dat niet zo is, is het niet vreemd.19:05
commandolineeen hint: indexes beginnen te tellen vanaf 0.19:06
commandolinegoed, ik zal jullie niet langer in spanning houden :P19:07
commandolinewe doen nu:19:07
commandolinenummer = menu_opties.index(optie)19:07
commandolinenummer is dus in het geval van "Laat alle emailadressen zien"19:07
commandoline019:07
commandolineverderop doen we:19:07
commandolineif keuze == 1:  #laat alle emailadressen zien19:07
commandolinewe moeten dus nummer verhogen met één.19:08
commandolinedat kan simpel:19:08
commandolinenummer = nummer +119:08
commandolineof verkort:19:08
commandolinenummer += 119:08
commandolinehet kan hier trouwens nog korter:19:08
commandolinenummer = menu_opties.index(optie) +119:08
commandolinemaar ik laat het zo staan als het is voor de duidelijkheid19:08
commandoline<erkan^> ik kreeg een foutmelding:  File "adresboekje.py", line 16    elif keuze == 2:19:09
commandolinedat klopt, de code is nog niet volledig19:09
commandolinegoed, we gaan nu de opties uiterken.19:09
commandoline*uitwerken19:10
commandolineik wil beginnen met de simpelste optie: een mailadres toevoegen.19:10
commandolinewe moeten twee dingen weten van de gebruiker:19:10
commandolinenaam19:10
commandoline(die later key wordt)19:10
commandolineen mailadres19:11
commandoline(die later value wordt)19:11
commandolinedat doen we m.b.v. raw_input()19:11
commandolinegoed, nu hebben we nog een dictionary nodig om alle mailadressen in op te slaan.19:12
commandolineik maak die helemaal aan het begin van het programma aan.19:12
commandolinetoevoegen werkt nu al, maar we vertellen de gebruiker nog even dat het gelukt is19:12
commandolineiemand vragen over de code tot nu toe?19:13
commandolineprima, de volgende optie die we gaan implementeren is alle mailadressen laten zien19:14
commandolineten eerste moeten we kijken of er wel een mailadres is.19:14
commandolineanders is er weinig te laten zien.19:14
commandolinedat kunnen we doen met len()19:14
commandolinedie hadden we vorige week geloof ik ook al gebruikt19:14
commandolinegoed, weergeven van een dictionary kan via print.19:15
commandolinemaar ook via de for-loop19:15
commandolineprint naam, ":", adresboek[naam]19:16
commandolinewat hier gebeurd:19:16
commandolinenaam wordt weergeven19:16
commandoline":" wordt weergeven19:16
commandolineadresboek[naam] (het mailadres) wordt weergeven19:16
commandolinede for loop loopt standaard door alle keys heen19:17
leoquant<CasW> commandoline: je kan niet printen met een for-loop, wel bínnen een for-loop19:17
commandolinein het vorige voorbeeld dus  de soorten fruit19:17
commandolineCasW heeft helemaal gelijk ;)19:17
commandolinede for loop zorgt alleen maar dat een stukje code meerdere keren wordt uitgevoerd19:18
commandolineen printen kán dat stukje code zijn19:18
commandoline(en dat is hier zo)19:18
commandolinegoed, tijd voor de op één na laatste optie:19:18
commandolineverwijderen19:18
commandolinewe vragen de gebruiker om een naam19:19
commandolineen verwijderen die dataset (zowel de key als de value dus) uit de dictionary19:19
commandolineis de code tot nu toe duidelijk?19:20
leoquantveel ja's19:20
commandolineja, ik zag het19:20
commandolineik heb nog even de foutmelding toegevoegd aan het eind19:21
commandoline(bij geen geldige keuze)19:21
commandolineeen gewoon print statement.19:21
commandolinehet programma draait momenteel maar één keer.19:21
commandolineterwijl we willen dat het steeds door draait19:22
commandolinedaarom gaan we weer de bekende while loop gebruiken.19:22
commandolinezo, nu draait ons programma 'voor eeuwig'19:23
commandolineook niet helemaal de bedoeling.19:23
commandolinedus laten we nog even de laatste menuoptie toevoegen:19:23
commandolineafsluiten19:23
commandolineeen kwestie van de loop breken, met break19:23
commandolinegoed, het programma is nu in principe af, maar voor de afwerking wil ik nog even een welkoms- en afsluitboodschap tonen.19:24
commandolinegoed, probeer het maar te draaien.19:24
* commandoline is benieuwd of er typfouten in zitten ;)19:25
commandoline<FOAD> Maar ik wil de adressen op volgorde zien, kan dat?19:26
commandolineFOAD: dat kan, maar dat bewaar ik voor later.19:27
commandoline<Oer> else: IndentationError: expected an indented block19:27
commandolinemooi, opgelost19:27
commandolinegoed, de komende twee weken gaat de les niet door i.v.m. de schoolvakantie19:27
commandolinewel heb ik nog een opdracht voor jullie bedacht19:28
commandolineprobeer dit programma zo om te schrijven, dat het een woordenboek wordt.19:28
commandolinemet als opties:19:28
commandoline- een woord met betekenis toevoegen19:28
commandoline- alle woorden & betekenissen tonen19:29
commandoline- een woord verwijderen19:29
commandoline- evt. een woord aanpassen19:29
commandolineen voor degene die nog meer wil oefenen:19:29
commandoline- probeer een winkelinventarisprogramma te schrijven, dat bijhoud wat een winkel allemaal in voorraad heeft.19:30
commandolinedie laatste is ingewikkeld, geen probleem als dat niet lukt.19:30
StefandeVriesWij zorgen voor uitwerkingen ;)19:30
commandolinePrettige vakantie allemaal en bedankt voor jullie komst! Tot over twee weken.19:30
FOADDank je wel commandoline en ondersteuning.19:31
erkan^bedankt commandoline (-:19:31
commandolineoja, nog vragen?19:31
* commandoline is daarvoor nog even aanwezig19:31
emiel1976_bedankt. tot over 2 weken19:31
FOADGeen vragen, ik ga lekker oefenen.19:32
erkan^ik heb geen vraag, in de toekomst heb ik een hulp nodig,d an kom ik wel bij python-nl19:32
erkan^(-:19:32
commandolined19:32
StefandeVrieswe zijn bijna dagelijks online, dus mocht je in je vakantie nog vragen hebben, dan val je maar binnen ;)19:33
=== 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.

Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!