/srv/irclogs.ubuntu.com/2011/03/05/#ubuntu-nl-mwanzo-klas.txt

leoquantcommandoline, hier staat alles goed18:29
commandolineok, prima. StefandeVries klaar?18:29
leoquantnog even wachten...18:30
StefandeVriesklaar18:30
commandolineleoquant?18:30
leoquantok18:30
leoquant18:30
commandolineGoed, welkom allemaal bij de 5e les Python.18:31
commandolineTen eerste wil ik nu iedereen die de cursus volgt aanwezig is, even zeggen dat vanaf deze les StefandeVries officieel mede-workshop leider is.18:32
commandolinetijdens de lessen doet hij de vragen, buiten de lessen zijn we beide bereikbaar daarvoor.18:32
leoquantwelkom StefandeVries !18:32
StefandeVriesdank jullie ;)18:33
commandolineGoed, ik had 2 huiswerkopdrachten gegeven i.v.m. de 2x uitval, dus laten we die eerst maar eens bekijken.18:33
commandolinede eerste opdracht is:18:33
commandolinehttp://paste.ubuntu.com/563139/18:34
StefandeVriesbekijk dat voorbeeld, en kijk of het in grote lijnen hetzelfde werkt als jouw uitwerking. als je vragen hebt, kan je ze stellen18:35
commandolineohnee, deze klopt niet zie ik nu18:35
commandolineik heb het huiswerk van les 3 voor me :P18:35
commandolinehttp://paste.ubuntu.com/566649/18:36
StefandeVriesIs op deze laatste opdracht nog een toelichting nodig, of lijkt hij duidelijk?18:36
commandolinede bijbehorende opdracht was:18:37
commandoline[19:28] <commandoline> wel heb ik nog een opdracht voor jullie bedacht18:37
commandoline[19:28] <commandoline> probeer dit programma zo om te schrijven, dat het een woordenboek wordt.18:37
commandoline[19:28] <commandoline> met als opties:18:37
commandoline[19:28] <commandoline> - een woord met betekenis toevoegen18:37
commandoline[19:29] <commandoline> - alle woorden & betekenissen tonen18:37
commandoline[19:29] <commandoline> - een woord verwijderen18:37
commandoline[19:29] <commandoline> - evt. een woord aanpassen18:37
commandolinebekijk het programma rustig, en voer het eens uit18:37
commandoline<hannie> Hoe kan je gegevens sorteren in een dictionary?18:37
StefandeVrieshannie: dit kan niet direct; daar zijn dictionaries niet voor bedoeld. er is een methode om de keys via een list te sorteren, en door die list te lopen. daar komen we na de les even op terug, als je dat zou willen18:39
leoquantok gesnapt18:40
StefandeVriesklopt, hannie18:40
commandoline<hannie> Het woordenboek is eigenlijk exact hetzelfde als naam/e-mail (key/value)18:41
commandolinegoed, als er geen vragen meer zijn gaan we door naar opdr. 218:41
commandolinedie staat hier: http://paste.ubuntu.com/575952/18:41
commandolinede bijbehorende opdracht was:18:41
commandoline[19:29] <commandoline> en voor degene die nog meer wil oefenen:18:41
commandoline[19:30] <commandoline> - probeer een winkelinventarisprogramma te schrijven, dat bijhoud wat een winkel allemaal in voorraad heeft.18:41
commandolineeigenlijk lijkt dit programma erg op het volgende18:42
commandolinehet enige wat je even door moet hebben, is wat de bedoelde key/value combinatie is18:43
commandolinenl.:18:43
commandolinekey = naam v/h product18:43
commandolinevalue = de hoeveelheid producten die de winkel op voorraad heeft.18:43
commandolinenogmaals, draai dit programma eens, en kijk of je het begrijpt18:44
commandolinehannie> We hebben toch al appels=10, peren=20 enz. gehad. Is dat wat je bedoelt?18:44
commandolineeigenlijk is dat inderdaad precies hetzelfde voorbeeld18:45
commandolinehier wordt het alleen toegepast in een programma, en die stap wilde ik jullie even laten maken.18:45
commandolineok, als er toch nog vragen zijn mag dat ook na de les, ik kan me voorstellen dat het wat tijd kost om dit goed door te nemen18:46
commandolinevandaag gaan we namelijk met iets anders verder: functies.18:46
commandolineTen eerste: wat is een functie?18:46
commandolineeen functie kun je zien als een klein programma18:47
commandolinedat programma krijgt invoer, doet daar iets mee, en geeft het resultaat terug18:47
commandolinewe hebben al een aantal functies gezien de afgelopen lessen, functies die standaard in python zitten.18:48
commandolinenl:18:48
commandolinelen()18:48
commandolineraw_input()18:48
commandolineinput()18:48
commandolinestr()18:48
commandolinefloat() ook nog dacht ik?18:48
commandolineok, float ook :)18:49
commandoline<Tjibba> hmm wat deed float ook alweer?18:49
StefandeVrieshet maakte van een geheel getal een komma getal, Tjibba18:49
commandoline<hannie> maar je kunt i.p.v. float ook een getal met ,00 opgeven bij input18:50
commandolinei.p.v. een komma moet het een punt zijn18:50
StefandeVriesdat kan inderdaad ook, met een punt18:50
commandolinemaar het achterliggende idee klopt :)18:50
StefandeVriescommandoline was me voor18:50
commandolineok, len() vind ik wel een mooi voorbeeld18:51
commandolinehet krijgt invoer (bijv. een lijst), en geeft als resultaat de lengte van die lijst terug.18:51
commandolinedat is iets wat we ook zelf zouden kunnen doen, bijv. zo:18:51
commandolinelengte = 018:51
commandolinefor item in lijst:18:52
commandoline    lengte = lengte +118:52
commandoline(in het echt is de implementatie anders, maar even ter illustratie)18:52
commandolinevoordelen van de functie boven deze code is:18:53
commandoline*zijn18:53
commandoline- het is abstracter, je hoeft niet meer te bedenken dat bovenstaande code de lengte berekend.18:54
commandoline- hergebruik: het is mogelijk om de functie meerdere keren aan te roepen, terwijl we dan de code elke keer zouden moeten kopiëren, en dat is lastig in het onderhoud.18:54
leoquant<hannie> Bedoel je met de lengte van de lijst het AANTAL items?18:55
StefandeVriesJa, hannie :)18:56
commandoline<MedUsaXIII74> Kun je zelf ook functies maken ? En gaat dat dan richting object georienteerd programmeren ?18:56
StefandeVriesMedUsaXIII74: Ja, dat gaan we deze les uitleggen en inderdaad, we gaan later in de cursus door op OOP. maar maak je voor nu geen zorgen. ;)18:56
leoquantok18:57
commandolinegoed, ik zal jullie nog een paar termen vertellen, voordat we verdergaan met een voorbeeld:18:57
commandolinehet aanroepen (Eng: callen) van een functie = een functie gebruiken, bijv. len(list)18:58
commandolineargumenten (Eng: parameters of arguments) = invoer van een functie, in het voorbeeld is dat 'list'.18:58
commandolinemaar bij bijv. de functie pow(x, y) (power, x tot de macht y), zijn dat x en y18:59
commandolineten slotte is het handig om de engelse term te kennen voor 'waarde teruggeven aan het de aanroeper (caller)': return19:00
commandoline<DooitzedeJong> QUESTION: Over die tweede opdracht van vorige week, kan je python ook de values op laten slaan in een document?19:01
StefandeVriesDooitzedeJong: ja, dat kan. in een later stadium van de cursus gaan we dit ook doen.19:01
StefandeVriesmaar voorlopig niet19:01
commandolinegoed, alles duidelijk tot zover?19:01
commandoline/vragen?19:02
commandolinegoed, dan gaan we het adresboekprogramma (huiswerkopdracht 1) omschrijven om functies te gebruiken.19:02
commandolinehttp://typewith.me/ep/pad/view/ro.LGhT4417wF8/latest19:02
commandolinehoewel, dat is hier al gebeurd :P Nou ja, ook goed, dan gaan we dat uitleggen :)19:03
commandolinegoed, we gaan even kijken wat er allemaal gebeurd, en beginnen net als python zelf, bovenaan.19:05
commandolinedaar zien we dat de lijst (list) menu_opties wordt aangemaakt19:05
commandolinedat hebben we eerder gedaan, niks bijzonders.19:05
commandolinedaaronder wordt het interessant:19:06
commandolinewe zien een nieuw statement, nl. 'def' .19:06
commandolinedef definieert een nieuwe functie19:06
commandolineeen eigen functie dus, waarvan we zelf duidelijk maken wat die doet.19:06
commandolinedeze functie heeft menu, en onder die naam kunnen we hem straks dus bereiken19:07
commandolinetot slot geeft de eerste regel aan dat de functie menu een argument heeft, nl. 'opties'19:07
commandoline<hannie> Wordt de functie door de programmeur gedefinieerd?19:07
StefandeVriesJa, je kunt een functie zelf definiëren, echter functies zoals len() niet; dit belcihten we later bij object geörienteerd programmeren19:09
commandolineen dat is ook precies wat gebeurd op regel 11 van het document19:10
commandolinede functie wordt hier dus gedefineerd, voor later gebruik.19:10
commandolinede functie menu doet het volgende:19:10
commandoline- het laat iedere optie zien in opties d.m.v. de for-loop19:10
commandoline- het vraagt de gebruiker om een keuze te maken m.b.v. input()19:11
commandoline- het geeft die keuze terug aan het hoofdprogramma (r. 18, return keuze)19:11
commandolinemet deze functie kunnen we later zo aanroepen:19:12
commandolinekeuze = menu(menu_opties)19:12
commandolineje ziet hier de twee voordelen terug:19:12
commandoline- we kunnen menu later nog een keer gebruiken, zelfs om een compleet ander menu te laten zien door i.p.v. menu_opties een andere lijst mee te geven.19:13
commandoline- de programmeur hoeft niet alle bovenstaande stappen te bedenken19:14
commandoline(abstractie), het enige waar de programmeur aan moet denken is om een lijst met menu opties door te geven aan menu(), en het resultaat op te slaan.19:14
commandoline<hannie> Kan je de gedefinieerde functies opslaan en in andere programma's gebruiken?19:14
StefandeVriesJa, hannie, je kunt functies maken opslaan. deze bestanden kun je dan in programma's importeren en de functies dan aanroepen. volgende les wordt dit behandeld(modules)19:15
commandoline<bakeds> programma doet het nog niet klopt dit?19:15
commandolinehannie: je kunt momenteel ook nog gewoon regel 11 tot en met 20 kopieren naar een ander programma.19:16
commandolinebakeds: het werkt gewoon, zowel bij StefandeVries als bij mij.19:17
commandolinewel is het zo dat het nog niks doet als je het tot waar we nu zijn overneemt, bedoel je dat?19:17
commandolinevervolgens worden er nog een groot aantal functies gedefinieerd, ik loop ze wat sneller bij langs19:19
commandolinedef toon_mailadressen(adresboek):19:19
commandolinedeze functie toont alle mailadressen in 'adresboek' aan de gebruiker, we kunnen na deze declaratie dus zoiets doen:19:20
commandolinetoon_mailadressen(adresboek_van_commandoline)19:20
commandolinedeze functie geeft niks terug, het 'return'-statement staat nergens.19:20
commandolinede volgende functie heeft dezelfde argumenten en geeft opnieuw niets terug.19:21
commandolinedef voeg_mailadres_toe(adresboek):19:21
commandolinehet verschil is wat de functie zelf doet, namelijk een entry toevoegen aan het adresboek19:21
commandolinedatzelfde geld voor verwijder_adresboek (r. 29)19:22
commandolineeh, regel 3719:22
commandolinegoed, als je alles tot regel 41 in een bestand zet en dat uitvoerd, gebeurd er niks19:22
commandolinedat is zo, omdat we alleen een aantal functies hebben gedefinieerd, we doen er verder niks mee.19:23
commandolineze worden niet aangeroepen, en daarom doen ze niks.19:23
commandolinedat komt nu, we beginnen met de welkomsboodschap:19:23
commandolineprint "Welkom bij het adresboekprogramma"19:23
commandolinegevolgd door het aanmaken van het adresboek, en het starten van de while loop om het programma meerdere keren te laten draaien, zoals we vaker hebben gedaan.19:24
commandolinedaarna roepen we onze eigen gedefinieerde functie aan:19:24
commandolinekeuze = menu(menu_opties)19:24
commandolinekeuze is nu gelijk aan wat de functie menu teruggeeft.19:24
commandolinedan kijken we wat de gebruiker heeft gekozen met if/elif/else19:25
commandolineiedere menuoptie heeft eerder een eigen functie gekregen, en die roepen we nu aan.19:25
commandoline(bijv. toon_mailadressen(adresboek))19:26
commandolinegoed, dat is eigenlijk het hele programma.19:26
commandolineheeft iemand nog vragen tot zover?19:26
commandolineen is alles duidelijk?19:27
commandoline<hannie> Maar ik zou het nog niet zelfstandig kunnen maken ):19:28
commandolinedat is oefenen19:28
commandolineen dat is dan ook het huiswerk voor de volgende keer:19:28
commandolinemijn eerste opdracht is, schrijf je eigen len()-functie19:28
commandolineik stel voor dat we 'm num() noemen zoals hannie voorstelde :)19:28
commandoline<MedUsaXIII74> Als je def voor een stukje code zet wordt het ook uitgevoerd, is dit te voorkomen ?19:29
StefandeVriesMedUsaXIII74: hoe bedoel je dat precies? de code die je als functie definieert wordt als het goed is niet uitgevoerd als het niet aangeroepen wordt19:29
commandolineterwijl StefandeVries de vraag beantwoord, voor mensen die nog meer willen oefenen: herschrijf het rekenmachineprogramma om functies te gebruiken19:29
commandolinevaak is de menuopties in een functie zetten overzichtelijk19:30
commandolinegoed, het is 20:30, tot volgende week allemaal! Wij gaan nog even door met vragen beantwoorden, en dat doen StefandeVries en ik doen dat ook graag door de week19:30
commandoline(en anderen ook, dus gewoon vragen in #ubuntu-nl-mwanzo)19:31
StefandeVriesschaam je niet, ook wij zijn ergens en ooit begonnen :)19:31
StefandeVriesGraag gedaan, hannie19:32
commandoline<MedUsaXIII74> Stel dat je bijvoorbeeld van het menu een def wilt maken MAAR nog niet wilt uitvoeren op dat punt. Dat bedoel ik.19:32
commandolineMedUsaXIII74, code binnen functies wordt nooit uitgevoerd als ze gedefinieerd worden, dat gebeurd pas als ze aangeroepen worden19:33
StefandeVriesprecies19:33
commandolineen def maakt duidelijk dat we een functie definiëren. duidelijk?19:33
StefandeVriesik begreep je niet helemaal, MedUsaXIII74, mijn excuses19:33
commandoline<MedUsaXIII74> Zodat je die def later als menu kan gebruiken, maar je wilt hem al van te voren defineren ipv pas als je hem nodig hebt.19:34
commandolinedat gebeurt dus altijd, het is zeg maar het idee achter een functie, je definieert 'm voordat je 'm nodig hebt.19:34
commandoline<hannie> Ik wil nog iets vragen over regel 18:19:35
commandoline<hannie> Waar gaat return keuze naartoe?19:35
commandoline'return' stuurt een waarde terug naar dat stuk code dat de functie aanroept19:35
commandolinedat is in ons programma:19:35
commandolinekeuze = menu(menu_opties)19:36
commandolinekeuze is dus gelijk aan wat de menu-functie terugstuurt.19:36
commandoline<MedUsaXIII74> en je defineert hem door bijv aan te geven: menu = menu(menu1) of menu = menu(menu2)19:36
commandolinenee19:36
commandolinede definitie is alles wat achter 'def' staat.19:36
commandolinein het voorbeeldprogramma:19:37
commandolinedef menu(opties):19:37
commandolineis de definitie19:37
commandoline        keuze = menu(menu_opties)19:37
commandolineis de aanroep19:37

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