=== leoquant is now known as Guest58047 | ||
FOAD | Zo. | 17:55 |
---|---|---|
StefandeVries | :) | 18:00 |
* FOAD zit er al klaar voor. | 18:00 | |
leoquant | dit kanaal is nu "gesloten" vragen kunnen in ubuntu-nl-mwanzo gesteld worden | 18:21 |
leoquant | 19.30 workshop python 4 | 18:22 |
leoquant | ready commandoline , niekie , StefandeVries ? | 18:30 |
commandoline | leoquant: ja | 18:30 |
commandoline | OK, tijd om te beginnen met alweer de vierde les :) | 18:30 |
commandoline | vandaag wilde ik de stof van de vorige les uitbreiden met iets wat er op lijkt: | 18:31 |
commandoline | dictionaries | 18:31 |
commandoline | (lett. woordenboeken) | 18:31 |
commandoline | dictionaries lijken erg op lists (lijsten) zoals we die vorige keer hebben behandeld | 18:31 |
commandoline | het verschil wil ik jullie graag uitleggen aan de hand van een voorbeeld | 18:32 |
commandoline | opnieuw 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 |
commandoline | tik vervolgens het volgende in: | 18:33 |
commandoline | winkel_inventaris = {"appels": 20, "bananen": 2} | 18:33 |
commandoline | het voorbeeld lijkt op dat van vorige week | 18:34 |
commandoline | opnieuw hebben we hier een lijst van winkel inventaris | 18:34 |
commandoline | waar bij een normale lijst je echter alleen maar items hebt | 18:35 |
commandoline | heb je hier zog. keys en values. | 18:35 |
commandoline | bij een list benader je de items met behulp van een index zoals we vorige week hebben gezien (0, 1, 2 etc.) | 18:35 |
commandoline | nu doen we dat d.m.v. een woord, de key. | 18:36 |
commandoline | (lett. sleutel) | 18:36 |
commandoline | dat woord hebben we opgegeven. | 18:36 |
commandoline | vorige week hadden we om het eerste item te krijgen het volgende gedaan: | 18:36 |
commandoline | print winkel_inventaris[0] | 18:36 |
commandoline | dat werkt deze keer niet | 18:36 |
commandoline | we moeten deze keer een key gebruiken | 18:37 |
commandoline | bijv.: | 18:37 |
commandoline | print winkel_inventaris["appel"] | 18:37 |
commandoline | eh, print winkel_inventaris["appels"] | 18:37 |
commandoline | probeer dat maar eens | 18:37 |
commandoline | je ziet dat python het getal '20' terug geeft. | 18:37 |
commandoline | even opsommend: | 18:38 |
commandoline | - een dictionary bevat net zoals een list een opsomming van gegevens | 18: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 |
commandoline | kan iedereen dat tot nu toe volgen? | 18:40 |
commandoline | mooi, tijd om dan wat meer te gaan doen met winkel_inventaris | 18:40 |
commandoline | stel bijv. dat de winkel in één keer alle appels verkoopt. Dan kunnen we twee dingen doen: | 18:40 |
commandoline | - winkel_inventaris["appels"] op 0 zetten | 18: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 |
leoquant | oops | 18:41 |
StefandeVries | print(winkel_inventaris["appels"]) | 18:41 |
commandoline | - winkel_inventaris["appels"] wissen, dan houden we de volgende dictionary over: | 18:41 |
commandoline | {"bananen": 2} | 18:42 |
commandoline | beide gaan we even doen, nadat ik de vraag heb beantwoord | 18:42 |
commandoline | oh, heeft StefandeVries al gedaan, zoals afgesproken :) | 18:42 |
StefandeVries | ;) | 18:42 |
commandoline | goed, laten we eerst maar eens de waarde van appels veranderen in 0 | 18:42 |
commandoline | dat gaat met de volgende code: | 18:43 |
commandoline | winkel_inventaris["appels"] = 0 | 18:43 |
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) | 18:43 |
commandoline | we kunnen de wijziging zien door de list weer te printen: | 18:44 |
commandoline | print winkel_inventaris | 18:44 |
commandoline | *dictionary weer te printen | 18:44 |
commandoline | <erkan^> >>> winkel_inventaris["appels] = 0 | 18:45 |
commandoline | je bent een " vergeten | 18:45 |
commandoline | na appels | 18:45 |
StefandeVries | erkan^ = afsluitende dubbele aanhalingstekens in de index | 18:45 |
commandoline | goed, dan gaan we nu de wat rigoureuzere manier gebruiken: | 18:47 |
commandoline | appels verwijderen uit de dictionary | 18:47 |
commandoline | dat gaat op de volgende manier, opnieuw lijkt het erg op de manier waarop we dat bij lists doen: | 18:48 |
commandoline | del winkel_inventaris["appels"] | 18:48 |
commandoline | vervolgens kunnen we het resultaat weer controleren met print winkel_inventaris | 18:48 |
StefandeVries | Iedereen met vraag over volgorde: dit gebeurt door de snellere verwerking door/in het geheugen, aldus Learning Python, 4th edition | 18:48 |
commandoline | goed, we kunnen nu waardes aanpassen in een dictionary en verwijderen | 18:50 |
commandoline | we moeten nog maar één andere bewerking doen: waardes toevoegen. | 18:50 |
commandoline | en dat gaat op precies dezelfde manier als een waarde aanpassen: | 18:50 |
commandoline | winkel_inventaris["peer"] = 50 | 18:50 |
commandoline | vervolgens kunnen we het resultaat nog eens bekijken door de dictionary weer te printen. | 18:51 |
commandoline | {'peer': 50, 'bananen': 2} | 18:51 |
commandoline | is het resultaat | 18:51 |
commandoline | en opnieuw zien we dat een dictionary geen volgorde heeft. | 18:51 |
commandoline | nog vragen tot nu toe? | 18:52 |
StefandeVries | erkan^: [] voor lists-definitie, {} voor dictionary-definitie. [] voor de index van beide :) | 18:52 |
commandoline | vraag was: erkan^> wat is verschilelnd tussen [] en {} ? of maakt dat niet uit ? | 18:52 |
commandoline | http://typewith.me/ep/pad/view/ro.v4Dr17BY6IF/latest | 18:53 |
commandoline | dan gaan we nu weer verder. | 18:53 |
commandoline | goed, we hebben voor vandaag een nieuw programma op de planning staan. | 18:53 |
commandoline | het adresboekprogramma | 18:54 |
commandoline | het idee is dat we iemands naam invoeren, en vervolgens iemands mailadres | 18:54 |
commandoline | we kunnen dan aan het programma door een naam in te voeren, het emailadres vinden. | 18:54 |
commandoline | goed, eerst maar weer eens een menu. | 18:54 |
commandoline | de opties zijn: | 18:55 |
commandoline | Laat alle mailadressen zien | 18:55 |
commandoline | Voeg mailadres toe | 18:55 |
commandoline | Verwijder mailadres | 18:55 |
commandoline | & Afsluiten | 18:55 |
commandoline | vrij logisch. | 18:55 |
commandoline | de afgelopen keren gaven we alle menuopties weer d.m.v. print-statements | 18:56 |
commandoline | maar dat is eigenlijk vooral veel typwerk | 18:56 |
commandoline | en ook tijdens het onderhouden van code is het niet zo handig | 18:56 |
commandoline | daarom ga ik jullie vandaag een nieuwe methode laten zien om de menu items weer te geven | 18:57 |
commandoline | we gebruiken een list daarvoor. | 18:57 |
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. | 18:57 |
commandoline | als we de code zo zouden uitvoeren, zouden we alleen de optie zien. | 18:59 |
commandoline | we willen er alleen ook nog een nummer voor zetten. | 18:59 |
commandoline | daarvoor kunnen we de index van de list mooi gebruiken. | 18:59 |
commandoline | we kunnen achter de index van een item komen door menu_opties.index(optie) te gebruiken | 19:00 |
commandoline | de code die we nu hebben ziet er goed uit, maar zal nog crashen als we die uitvoeren. | 19:01 |
commandoline | dat gebeurt omdat we nu proberen om een geheel nummer (integer) op te tellen bij een stukje tekst (optie, en ") ") | 19:01 |
commandoline | dat kan niet. | 19:01 |
commandoline | daarom moeten we eerst het nummer omzetten naar een stukje tekst (string) | 19:01 |
commandoline | dat kan d.m.v. str() | 19:02 |
commandoline | als dat gebeurd is, hoeven we de gebruiker alleen nog te vragen om een keuze te maken. | 19:02 |
commandoline | we doen dat buiten de for-loop, want anders wordt die vraag wat te vaak gesteld. | 19:03 |
commandoline | we hoeven nu alleen nog alle menuopties af te handelen | 19:04 |
commandoline | dat doen we net zo als de vorige keren m.b.v. het if-statement. | 19:04 |
commandoline | ik zie nu trouwens dat ik nog een foutje heb gemaakt, een paar minuten geleden. | 19:05 |
commandoline | het zit in de menu code, ziet iemand het? | 19:05 |
commandoline | als dat niet zo is, is het niet vreemd. | 19:05 |
commandoline | een hint: indexes beginnen te tellen vanaf 0. | 19:06 |
commandoline | goed, ik zal jullie niet langer in spanning houden :P | 19:07 |
commandoline | we doen nu: | 19:07 |
commandoline | nummer = menu_opties.index(optie) | 19:07 |
commandoline | nummer is dus in het geval van "Laat alle emailadressen zien" | 19:07 |
commandoline | 0 | 19:07 |
commandoline | verderop doen we: | 19:07 |
commandoline | if keuze == 1: #laat alle emailadressen zien | 19:07 |
commandoline | we moeten dus nummer verhogen met één. | 19:08 |
commandoline | dat kan simpel: | 19:08 |
commandoline | nummer = nummer +1 | 19:08 |
commandoline | of verkort: | 19:08 |
commandoline | nummer += 1 | 19:08 |
commandoline | het kan hier trouwens nog korter: | 19:08 |
commandoline | nummer = menu_opties.index(optie) +1 | 19:08 |
commandoline | maar ik laat het zo staan als het is voor de duidelijkheid | 19:08 |
commandoline | <erkan^> ik kreeg een foutmelding: File "adresboekje.py", line 16 elif keuze == 2: | 19:09 |
commandoline | dat klopt, de code is nog niet volledig | 19:09 |
commandoline | goed, we gaan nu de opties uiterken. | 19:09 |
commandoline | *uitwerken | 19:10 |
commandoline | ik wil beginnen met de simpelste optie: een mailadres toevoegen. | 19:10 |
commandoline | we moeten twee dingen weten van de gebruiker: | 19:10 |
commandoline | naam | 19:10 |
commandoline | (die later key wordt) | 19:10 |
commandoline | en mailadres | 19:11 |
commandoline | (die later value wordt) | 19:11 |
commandoline | dat doen we m.b.v. raw_input() | 19:11 |
commandoline | goed, nu hebben we nog een dictionary nodig om alle mailadressen in op te slaan. | 19:12 |
commandoline | ik maak die helemaal aan het begin van het programma aan. | 19:12 |
commandoline | toevoegen werkt nu al, maar we vertellen de gebruiker nog even dat het gelukt is | 19:12 |
commandoline | iemand vragen over de code tot nu toe? | 19:13 |
commandoline | prima, de volgende optie die we gaan implementeren is alle mailadressen laten zien | 19:14 |
commandoline | ten eerste moeten we kijken of er wel een mailadres is. | 19:14 |
commandoline | anders is er weinig te laten zien. | 19:14 |
commandoline | dat kunnen we doen met len() | 19:14 |
commandoline | die hadden we vorige week geloof ik ook al gebruikt | 19:14 |
commandoline | goed, weergeven van een dictionary kan via print. | 19:15 |
commandoline | maar ook via de for-loop | 19:15 |
commandoline | print naam, ":", adresboek[naam] | 19:16 |
commandoline | wat hier gebeurd: | 19:16 |
commandoline | naam wordt weergeven | 19:16 |
commandoline | ":" wordt weergeven | 19:16 |
commandoline | adresboek[naam] (het mailadres) wordt weergeven | 19:16 |
commandoline | de for loop loopt standaard door alle keys heen | 19:17 |
leoquant | <CasW> commandoline: je kan niet printen met een for-loop, wel bínnen een for-loop | 19:17 |
commandoline | in het vorige voorbeeld dus de soorten fruit | 19:17 |
commandoline | CasW heeft helemaal gelijk ;) | 19:17 |
commandoline | de for loop zorgt alleen maar dat een stukje code meerdere keren wordt uitgevoerd | 19:18 |
commandoline | en printen kán dat stukje code zijn | 19:18 |
commandoline | (en dat is hier zo) | 19:18 |
commandoline | goed, tijd voor de op één na laatste optie: | 19:18 |
commandoline | verwijderen | 19:18 |
commandoline | we vragen de gebruiker om een naam | 19:19 |
commandoline | en verwijderen die dataset (zowel de key als de value dus) uit de dictionary | 19:19 |
commandoline | is de code tot nu toe duidelijk? | 19:20 |
leoquant | veel ja's | 19:20 |
commandoline | ja, ik zag het | 19:20 |
commandoline | ik heb nog even de foutmelding toegevoegd aan het eind | 19:21 |
commandoline | (bij geen geldige keuze) | 19:21 |
commandoline | een gewoon print statement. | 19:21 |
commandoline | het programma draait momenteel maar één keer. | 19:21 |
commandoline | terwijl we willen dat het steeds door draait | 19:22 |
commandoline | daarom gaan we weer de bekende while loop gebruiken. | 19:22 |
commandoline | zo, nu draait ons programma 'voor eeuwig' | 19:23 |
commandoline | ook niet helemaal de bedoeling. | 19:23 |
commandoline | dus laten we nog even de laatste menuoptie toevoegen: | 19:23 |
commandoline | afsluiten | 19:23 |
commandoline | een kwestie van de loop breken, met break | 19:23 |
commandoline | goed, het programma is nu in principe af, maar voor de afwerking wil ik nog even een welkoms- en afsluitboodschap tonen. | 19:24 |
commandoline | goed, 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 |
commandoline | FOAD: dat kan, maar dat bewaar ik voor later. | 19:27 |
commandoline | <Oer> else: IndentationError: expected an indented block | 19:27 |
commandoline | mooi, opgelost | 19:27 |
commandoline | goed, de komende twee weken gaat de les niet door i.v.m. de schoolvakantie | 19:27 |
commandoline | wel heb ik nog een opdracht voor jullie bedacht | 19:28 |
commandoline | probeer dit programma zo om te schrijven, dat het een woordenboek wordt. | 19:28 |
commandoline | met als opties: | 19:28 |
commandoline | - een woord met betekenis toevoegen | 19:28 |
commandoline | - alle woorden & betekenissen tonen | 19:29 |
commandoline | - een woord verwijderen | 19:29 |
commandoline | - evt. een woord aanpassen | 19:29 |
commandoline | en 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 |
commandoline | die laatste is ingewikkeld, geen probleem als dat niet lukt. | 19:30 |
StefandeVries | Wij zorgen voor uitwerkingen ;) | 19:30 |
commandoline | Prettige vakantie allemaal en bedankt voor jullie komst! Tot over twee weken. | 19:30 |
FOAD | Dank je wel commandoline en ondersteuning. | 19:31 |
erkan^ | bedankt commandoline (-: | 19:31 |
commandoline | oja, nog vragen? | 19:31 |
* commandoline is daarvoor nog even aanwezig | 19:31 | |
emiel1976_ | bedankt. tot over 2 weken | 19:31 |
FOAD | Geen 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-nl | 19:32 |
erkan^ | (-: | 19:32 |
commandoline | d | 19:32 |
StefandeVries | we 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!