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

leoquantalles gereed hier18:28
commandolineok, bedankt18:28
StefandeVriesdank je, leoquant18:29
commandolineHet is 19:30, dus laten we beginnen met de 8e pythonles!18:30
commandolinewelkom allemaal, we gaan vandaag verder met waar we vorige week ook al mee bezig waren: OOP18:31
commandoline(Object Oriented Programming)18:31
commandolinelaten we beginnen met het huiswerk van de vorige keer bespreken18:31
commandolinehttp://typewith.me/ep/pad/view/ro.KilZOISYC3j/latest18:31
commandolinehet leek me goed om de uitwerking daarvan tijdens deze les te maken, omdat het toch een vrij ingewikkeld onderwerp is zoals jullie vorige les hebben gemerkt18:32
commandolinede opdracht was om de door ons geschreven class te gaan gebruiken.18:33
commandolineom dat te doen, hebben we eerst objecten nodig18:34
commandolinewant met een class alleen kunnen we niks18:34
commandolineWe gaan dus de class 'instantieren'; we krijgen dan een 'instantie' zoals jullie vorige week hebben gezien.18:34
commandolinevaak wordt in plaats van de term 'instantie' ook de term 'object' gebruikt.18:35
commandolineok, zoals jullie zien heb ik nu een nieuw adresboek aangemaakt18:35
commandolinenu gaan we daar een mailadres aan toevoegen18:35
commandolineen nog een adres18:36
commandolinegoed, we moesten het adresboek zoveel mogelijk gebruiken, en een adresboek heeft nog 3 methods (handelingen):18:37
commandoline- verwijder18:37
commandoline- sla_op18:37
commandoline- laad18:37
commandolinedus laten we die ook maar gebruiken, ten eerste verwijder18:37
commandolinezo, ik ben geschrapt uit mijn eigen adresboek.18:38
commandolinetijd om het adresboek op te slaan18:38
commandolinegoed, om de laatste method te gebruiken, namelijk laad(), gaan we een tweede adresboek aanmaken.18:39
StefandeVrieshannie: dat zit er prima uit :)18:39
commandoline(19:39:20) hannie: elif keuze == 3:18:39
commandoline(19:39:20) hannie: naamweg = raw_input("Welke naam moet weg?")18:39
commandoline(19:39:20) hannie: mijnAB.verwijder(naamweg)18:39
commandoline(19:39:26) hannie: Ik had dit18:39
commandoline(19:39:46) hannie: mijnAB zelfde als Adresboek118:39
commandolineklopt, de naam adresboek1 is gewoon gekozen, net zoals je hierbij een naam kan kiezen:18:40
commandolinegetal = input("Geef een getal")18:40
commandolinegetal had net zo goed nummer kunnen zijn18:40
commandolinehier is dat ook zo18:40
commandolineok, we gingen dus een tweede adresboek aanmaken18:40
commandolinewat ik daarna heb gedaan, is het laden van het adresboek dat net was opgeslagen in het nieuwe adresboek18:41
commandolineop dit moment is adresboek1 dus gelijk aan adresboek218:41
commandolineoh, ik had een foutje gemaakt18:42
commandolineik wilde hetzelfde bestand laden18:42
commandoline(bedankt, StefandeVries!)18:42
commandolineen dat gebeurt nu ook18:42
leoquanthannie> Ik zie alleen adresboek1=adresboek(). Heb ik adresboek2 gemist?18:42
commandolineik heb hier toch wat meer staan, momentje...18:42
StefandeVrieshannie: foutje van commandoline; we gebruiken voor adresboek2 het opgeslagen adresboek van adresboek118:43
commandolinehttp://typewith.me/ep/pad/view/ro.KilZOISYC3j/latest18:43
commandolineklopt bij mij gewoon18:43
commandolineik ga wel verder, want ik hoor verder geen mensen die het bestand niet kunnen volgen.18:44
commandolinegoed, ik wil aan het tweede adresboek een nieuw mailadres toevoegen.18:45
commandolineen dat heb ik gedaan.18:45
commandolinelaten we om er een werkend programma van te maken ook nog even laten zien welke adressen nu precies in het adresboek zitten.18:46
commandolinegoed, we hebben nu een werkend programma, dat een adresboek aanmaakt en daar verschillende handelingen op uitvoert18:47
commandolinehet voordeel is dat we niet meer zelf hoeven na te denken over hoe we een bestand laden en opslaan, of over hoe je een naam verwijdert uit een dictionary18:47
commandolinebegrijpt iedereen nu wat dit programma doet?18:48
commandoline(19:48:39) MedUsaXIII56: Ik snap het wel, maar hoe gebruik je dit programma nu precies ?18:48
commandolinedit programma geeft altijd hetzelfde resultaat.18:49
commandolinehet laat puur zien hoe de class Adresboek functioneert.18:49
commandoline(19:49:56) MedUsaXIII56: Ok, je moet dus zelf de raw inputs er in doen ? 2e vraag, we hebben geen functie aan gemaakt die alle adrssen laad zien of wel ?18:50
StefandeVriesKlopt allebei18:50
commandolinemaar, dat laatste is op zich niet nodig18:50
commandolinewant we hebben de property 'adressen'18:50
commandolineen de vragen van MedUsaXIII56 sluiten prachtig aan op de link die ik jullie wilde geven:18:50
commandolinehttp://paste.ubuntu.com/588654/18:51
commandolinehier wordt precies dezelfde class gebruikt18:51
commandolinemaar er is een programma omheen geschreven.18:51
commandolineIk ga dat programma nu niet uitgebreid uitleggen, maar ik raad jullie aan om het door te lezen en te draaien, en de volgende keer vragen te stellen als jullie (een deel ervan) niet begrijpen.18:52
commandolineik wil nu namelijk samen met jullie een programma schrijven, zodat je doorkrijgt hoe dat nou eigenlijk werkt, zo'n class schrijven.18:53
commandolinehoewel, eigenlijk schrijven we samen de class die het gebruikt, jullie mogen het daaromheenliggende programma gebruiken.18:53
commandolinehet programma dat we gaan maken heet 'galgje.py'18:54
commandolineen kan worden gebruikt om een spel te spelen wat jullie allemaal wel kennen :)18:54
commandolinehttp://typewith.me/ep/pad/view/ro.KSz8svqakm4/latest18:54
commandolinegoed, we willen vandaag de logica achter het spel galgje gaan programmeren.18:56
commandolinede interface die die logica gebruikt, gaan jullie later maken.18:56
commandolineom dat wat toe te lichten18:56
commandolinede class Adresboek bevatte de logica van het adresboekprogramma18:57
commandolinede rest was de gebruikersinterface18:57
commandolinecentraal in galgje is het woord dat geraden moet worden.18:57
commandolinedus we gaan een class maken die 'Woord' heet.18:58
commandolineduidelijk tot zover?18:58
commandolineOK, blijkbaar is het duidelijk.18:58
commandolinedan wordt het nu eerst tijd om de eigenschappen (properties) en handelingen (methods) te bedenken.18:59
commandolinein dit geval hebben we een aantal properties:19:00
StefandeVrieshannie: dat is aan te raden, zeker bij grote projecten19:00
commandoline- aantal_fouten; op basis hiervan kunnen jullie in je interface de galg tekenen.19:00
commandoline(20:00:19) hannie: Je zou dus eigenlijk eerst een ontwerp op papier moeten zetten?19:00
StefandeVries(08:00:34 PM) StefandeVries: hannie: dat is aan te raden, zeker bij grote projecten19:00
commandolineen ook bij kleine projecten kan het zeker in het begin, handig zijn :)19:01
commandolinedaarnaast is het voor de interface handig om te weten uit hoeveel letters het woord bestaat19:02
commandolinedan kan die het juiste aantal 'streepjes' neerzetten.19:02
commandolinedus een property 'lengte'19:02
commandolinegoed, dan de handelingen:19:02
commandoline'gok_letter'19:02
commandolinemisschien is raad_letter trouwens mooier.19:03
commandolineen daarnaast:19:03
commandolineraad_woord19:03
commandolinegoed, daarnaast moet het nog mogelijk zijn om een woord te geven aan de Woord-class19:04
commandolinehet woord dat geraden moet wordne19:04
commandoline*worden19:04
commandolineik geef dat door via de handeling __init__, die automatisch wordt aangeroepen door python bij het maken van een instantie/object19:04
commandolinezoals jullie later zullen zien.19:04
commandoline(20:05:18) hannie: Moet je categorie?n maken, b.v. 5-letter woorden enz.?19:05
StefandeVriesnee, hannie, Python kan automatisch berekenen uit hoeveel letters het woord dat je gebruikt bestaat19:06
commandolineen19:06
StefandeVriesen daar de interface op aanpassen19:06
commandolinegoed, ik heb alle handelingen/methods toegevoegd19:06
commandolinenou nog de properties, ik doe dat meestal in __init__ want dan zijn ze direct vanaf het aanmaken van het object beschikbaar19:07
commandolineok, en daarmee is de eerste handeling/method gelijk klaar :)19:08
commandolinelaten we eerst eens de raad_woord handeling/method invullen19:08
commandolinede gebruiker geeft daarbij een woord19:08
commandolinede handeling/method kijkt of dat woord klopt19:09
commandolineen als dat zo is, wordt 'True' teruggegeven.19:09
commandolineals dat niet zo is, wordt het aantal fouten met 2 verhoogt19:09
commandolineen wordt False teruggegeven.19:09
commandolineen dat is alweer omgezet in code :)19:11
commandolinegoed, dan blijft er nog één handeling/method over19:11
commandolineen die is het ingewikkeldst19:11
commandolinede aanroeper ervan geeft een letter waarvan hij/zij denkt dat die in het woord zit.19:11
commandolineals dat zo is, dan moeten *alle* posities waarop dat zo is doorgegeven worden.19:12
StefandeVrieshannie: waarom komen er tegelijk 2 fouten bij en niet 1?19:12
commandolineen voor het gemak, geef ik dan ook meteen de bijbehorende letter mee terug19:12
StefandeVriesRaad je een letter fout dan heb je één fout. Raad je het woord fout, heb je twee fout19:12
commandolineen anders wordt er één fout toegevoegd.19:13
commandolineok, en daarmee is de class af.19:16
commandolinebegrijp iedereen wat ik gedaan heb, en ook hoe deze class te gebruiken is?19:17
* commandoline verwacht vragen :)19:17
StefandeVrieshannie: een beetje, heeft nog bestudering nodig19:17
StefandeVriesWe zijn er bijna altijd ;)19:17
commandolinegoed, ik zal jullie dan een beetje op weg helpen met de interface19:18
commandolinezodat jullie daar als jullie die deze week proberen te maken niet op vastlopen.19:19
commandolinezoals jullie zien heb ik een stukje code toegevoegd19:19
commandolinedat wil ik nog even regel voor regel behandelen.19:20
commandolinewat het doet is de class gebruiken.19:20
commandolinezo, even gok weer in raad verandert :)19:20
commandolineok, zo werkt het programma weer...19:21
commandoline(even getest)19:21
commandolineregel 3519:21
leoquanthannie> wat houdt main in?19:21
commandolineben ik net mee bezig :)19:21
commandolinedie regel betekend zoiets als:19:22
commandoline'Als dit bestand uitgevoerd wordt (niet bijv. geimporteerd via import), dan...'19:22
commandoline__name__ wordt door python op '__main__' gezet als dat het geval is19:22
commandolineok, volgende regel, 36:19:22
commandolinehierin wordt een nieuw woord aangemaakt19:23
commandolinehet woord 'test' moet geraden worden19:23
commandolinevervolgens raden we een letter, de 't'. Die zit er twee keer in. We krijgen dan ook terug:19:23
commandoline[[0, 't'], [3, 't']]19:23
commandolinem.a.w., de letter t komt voor op positie 0 en positie 319:24
commandolinedit is handig als jullie jullie interface gaan maken (hint)19:24
commandolineoja, ik had nog een regel overgeslagen19:24
commandolineregel 38, waarop de lengte van het woord wordt opgevraagd19:24
commandolinedat geeft 4 terug19:25
commandoline(die property hadden we eerder aangemaakt)19:25
commandolinegoed, daarna raden we nog een letter:19:25
commandolinede 's'19:25
commandolinedie zit er ook in, we krijgen dus:19:25
commandoline[[2, 's']] terug19:25
commandolinepas hier verandert wat:19:26
commandoline    print woord.raad_letter("x")19:26
commandolinewe vragen de x, en die zit er niet in. we krijgen dus een lege list [] terug19:26
commandolineen als we nu het aantal fouten opvragen:19:26
commandoline    print woord.aantal_fouten19:26
commandolineis dat 119:26
commandolinedaarna raden we het woord 'tesst' (dom, teveel letters :()19:26
commandolinedat levert achter de schermen twee punten aftrek op, trouwens19:27
commandolineen we krijgen daarom False terug19:27
commandolinedaarna raden we 'test'19:27
commandolineen dat klopt :)19:27
commandolinedaarna willen we nog even het aantal fouten weten19:27
commandolineprint woord.aantal_fouten.19:27
commandolinedat is 319:28
commandolinejullie kunnen precies diezelfde methods en properties gebruiken om het spel te laten spelen door de gebruiker19:28
commandoline(20:28:28) hannie: en dan moet Barbertje nog getekend worden19:28
commandolineals dat te ingewikkeld is, kan je gewoon de score laten zien in de interface19:29
commandolinemaar leuker is om met ascii-art e.d. te gaan werken19:29
commandoline(zie wikipedia)19:29
commandolineoja, nog een hint:19:29
commandolinemaak eerst een list aan met allemaal '_' erin19:30
commandolinemet de lengte van het woord19:30
commandolineen vervang zodra je een letter terugkrijgt die klopt, het streepje op die index door de mee teruggegeven letter.19:30
commandolineok, ik ben benieuwd wat jullie maken van de twee opdrachten:19:31
commandoline- probeer het adresboekprogramma zoals halverwege gegeven te begrijpen, en stel vragen als dat niet zo is:19:31
commandolinehttp://paste.ubuntu.com/588654/19:31
commandoline- maak een mooie interface voor galgje, als je ergens op vastloopt, vraag dan in #ubuntu-nl-mwanzo, dan helpen we je een stukje op weg :)19:32
commandolinegoed, dat was het voor vandaag19:32
commandolinebedankt voor jullie komst allemaal :)19:32
commandolineen tot volgende week!19:32
StefandeVriesdank je, leoquant :)19:38
leoquantmooi les19:38
leoquante19:38
StefandeVriesdank je19:38

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