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

leoquanthet kanaal is vanaf nu +m16:03
leoquantcommandoline, gelukt?16:17
commandolineleoquant: ja16:17
leoquantmooi16:17
leoquanttot straks16:19
commandolineWelkom allemaal bij alweer de derde les uit deze basiscursus Python!18:30
commandolineLaten we beginnen met het huiswerk wat ik de vorige keer had opgegeven even bespreken18:30
commandolineer zijn meerdere oplossingen mogelijk.18:30
commandolinevoor iedereen die het programma van de vorige keer niet direct bij de hand heeft/er vorige keer niet was: http://paste.ubuntu.com/563040/18:31
commandolinede eerste mogelijkheid is om de code die nodig is bij het invoeren weg te knippen, en op de plekken waar die nodig is te plakken18:32
commandolineje krijgt dan dit:18:32
commandolinehttp://paste.ubuntu.com/563139/18:32
commandolineFOAD> Is dat niet strijdig met de Python filosofie?18:32
commandolinehet klopt dat er iets bestaat als 'there is only one way to do it'18:33
commandolinemaar dat geld alleen voor dingen in de taal zelf, en ook daarvan wordt wel eens afgeweken18:33
commandolinegoed, deze oplossing doet wat we willen, maar heeft als nadeel dat er stukjes code meerdere keren in het programma staan, identieke stukjes18:34
commandolineals je nu bijv. een fout ontdekt in zo'n stukje code, dan zul je die overal moeten verbeteren.18:34
commandolinedaarom heb ik nog een tweede mogelijkheid bedacht.18:34
commandolinehttp://paste.ubuntu.com/563140/18:34
commandolinedit programma lijkt eigenlijk een stuk meer op het origineel18:35
commandolineer is maar één regel verandert, er wordt nu alleen om invoer gevraagd als 'keuze' kleiner is dan 4 door middel van een if-statement.18:35
commandolinebegrijpt iedereen wat ik gedaan heb bij de tweede oplossing?18:35
commandolinemooi, dan gaan we verder18:36
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?18:36
commandolinedat klopt18:36
commandolineik heb het hier gedaan omdat het sowieso fout gaat bij foutieve invoer.18:37
leoquant<MedUsaXIII> kun je ook een range op geven waar de input in moet zitten ?18:37
commandolineen omdat ik even wilde laten zien dat er meerdere oplossingen zijn, waarvan de makkelijkste niet altijd de beste is.18:37
commandolineMedUsaXIII: je kan zoiets doen:18:38
commandolineif keuze > 0 and keuze < 5:18:38
commandolineen dan heeft bovenstaande methode geen nadeel meer, zolang deze volgorde van menuitems gebruikt wordt.18:38
commandoline'and' kijkt of twee condities waar zijn.18:39
commandolineen alleen dan is de gehele conditie waar18:39
commandolinedat betekend hier:18:39
commandolinekeuze > 0 is waar & keuze < 5 is waar18:39
commandolineen dan is dus automatisch het geheel ook waar.18:40
commandolineok, dan kunnen we verder met de stof voor deze les lijkt me.18:40
commandolinewe gaan eerst weer even werken in de terminal, zoals in de eerste les.18:40
commandolineToepassingen > Hulpmiddelen > Terminalvenster18:40
commandoline(of pak het handige terminalvenster van lernid erbij :) )18:41
commandolinewe geven net als twee weken geleden het commando 'python' in18:41
commandolineok, waar ik het deze week over wil hebben zijn 'lists', of in het Nederlands lijsten.18:42
commandolinetot nu toe hebben we altijd gehad dat een variabele maar één waarde had18:42
commandolinea = 118:42
commandolinebijv.18:42
commandolinemaar stel je voor dat je bijv. een programma schrijft voor een winkel18:42
commandolineen dat je alle dingen wil bijhouden die de winkel in huis heeft.18:43
commandolinedat gaat niet met wat we tot nu toe behandelt hebben.18:43
commandolineen daarvoor zijn lists dus ontworpen.18:43
commandolineeen voorbeeldje:18:43
commandolinewinkel_inventaris = ["appels", "peren", "bananen"]18:44
commandolinewe 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)18:45
commandolinewe kunnen er verschillende dingen mee doen, bijv. ze stuk voor stuk weergeven.18:45
commandolinebijv:18:46
commandolinehttp://paste.ubuntu.com/563156/18:46
commandolineje ziet hier op de eerste regel iets wat we nog nooit eerder hebben gebruikt:18:47
commandolineeen for-statement18:47
commandolinehet for-statement is net zoals het while-statement dat we in het rekenmachineprogramma gebruikten een 'loop'18:47
commandolinealles wat eronder staat (en ingesprongen is) wordt 0, 1 of meerdere keren uitgevoerd.18:48
commandolinebij de while-loop hangt het aantal keer van uitvoeren af van of de voorwaarde (conditie) die er achter staat 'waar' oplevert18:48
commandolinebij de for loop gaat dat anders18:49
commandolinevoor ieder item in de de eerder aangemaakte lijst ('winkel_inventaris')18:49
commandolinewordt de variabele stuk_fruit gemaakt18:49
commandolineen wordt de code die onder de for-loop staat uitgevoerd18:49
commandolinetot zover even, probeer het scriptje even uit te voeren18:50
commandolinevragen?18:50
leoquantIndentationError:18:50
commandolinehannie: er moet nog een tab tussen '...' en 'print'18:51
commandolinede uitvoer is als het goed is:18:51
commandolineappels18:51
commandolineperen18:51
commandolinebananen18:51
commandolineonder elkaar18:51
commandolinede for loop heeft voor ieder item in de winkel_inventaris het print-commando aangeroepen18:52
commandolineEmiel1976> ik krijg daarna weer puntjes. is het dan goed?18:52
commandolinedruk nog een keer op enter, en de loop gaat van start18:52
commandolinegoed, zo'n lijst zoals we die nu hebben gemaakt is wel leuk, maar we hebben er nog weinig aan.18:53
commandolinedat verandert zodra je er bijv. dingen aan kan toevoegen.18:53
commandolinedat gaat zo:18:53
commandolinewinkel_inventaris.append("kiwi")18:53
commandolinevervolgens kun je d.m.v.18:54
commandolineprint winkel_inventaris18:54
commandolinezien dat de kiwi aan onze lijst is toegevoegd18:54
commandolinelukt dat?18:54
commandoline'append' voegt iets toe aan het einde van de lijst18:55
commandoline<hannie> AttributeError: 'str' object has no attribute 'append'18:55
commandolineoh, ik zie dat het al opgelost is.18:55
commandolinewat er gebeurde was waarschijnlijk dat je niet toevoegde aan de list, maar aan iets anders18:56
commandolineok, stel nu dat de appels uitverkocht zijn18:56
commandolinedan moeten ze natuurlijk van de lijst worden gehaald18:56
commandolinedat betekend wel dat we moeten weten hoeveelste 'appels' in de lijst is.18:56
commandolineje moet daarvoor weten dat python aan ieder item een nummer geeft18:57
commandolinein ons voorbeeld heeft 'appels' het nummer (de zogenaamde index) 0, en heeft 'kiwi' het nummer 318:57
commandolineer wordt dus begonnen met 0, en daarna naar boven doorgeteld.18:57
commandolineom de appels uit de lijst te gooien, doen we het volgende:18:58
commandolinedel winkel_inventaris["appels"]18:58
commandolineho, fout :P18:58
commandolinedel winkel_inventaris[0]18:58
commandolineCugel> Waarom niet winkel_inventaris.remove()  etc. ?18:59
commandolinehet verschil is dat 'del' niet alleen bedoelt is voor lijsten, en append wel. (later wil ik het verschil wat preciezer uitleggen)18:59
commandolineje kan bijv. ook dit doen19:00
commandolinea = 119:00
commandolinedel a19:00
commandolineals je daarna19:00
commandolineprint a19:00
commandolinedoet, dan merk je dat 'a' niet meer bestaat.19:00
commandoline<hannie> Je maakt de variabele dus weer leeg19:00
commandolineprecies19:00
commandoline<hannie> nu vierkante haakjes en bij append ronde haakjes?19:01
commandolinede vierkante haakjes worden gebruikt om aan te geven dat we een bepaald item in de lijst willen krijgen19:01
commandolineje kan bijv. ook het volgende doen:19:01
commandolineprint winkel_inventaris[0]19:01
commandolinedaarom zijn ze dus anders dan de ronde haakjes die we tot nu toe hebben gebruikt:19:02
commandolineze zijn ergens anders voor bedoeld.19:02
commandolineduidelijk tot zover?19:02
commandolineah, toch nog een vraag, mooi :)19:03
commandoline<Emiel1976> ik krijg bij print winkel_inventaris[0] nu peren. dit is omdat de appels er uit zijn?19:03
commandolinedat klopt helemaal, de 'indexes' schuiven door zodra een item uit de lijst wordt verwijdert.19:03
commandolineok, tot zover het winkelvoorbeeld19:04
commandolineik wilde graag nog een ander programma maken namelijk, een programma dat opnieuw op lists is gebaseerd.19:04
commandolineik heb daarvoor dit online document gemaakt, zodat jullie allemaal mee kunnen kijken:19:05
commandolinehttp://typewith.me/ep/pad/view/ro.Op$gICXuBpU/latest19:05
leoquantja19:06
leoquantik zie getyp19:06
commandolinemooi19:06
commandolineok, ik wilde een programma maken dat je verschillende cijfers laat invoeren19:06
commandolineen dat dan vervolgens het gemiddelde berekent19:07
commandolineom te beginnen moeten we dus cijfers verzamelen.19:07
commandolineeen list is daar ideaal voor.19:07
commandolinewat je nu ziet is een lege lijst, zonder items van tevoren erin.19:08
commandolinedie gaan we nu dus toevoegen19:08
commandolineom dat te doen gaan we gebruik maken van de while loop19:08
commandolinewe willen namelijk net zo lang cijfers toevoegen totdat de gebruiker vindt dat het genoeg is.19:09
commandolineik gebruik hier raw_input, en niet input()19:09
commandolineomdat het ook mogelijk moet zijn om de letter 'q' in te voeren.19:10
commandolinehet probleem is dat de raw_input-functie een 'string' teruggeeft, een stukje tekst19:10
commandolineen daar kunnen we straks niet mee rekenen19:10
commandolinewe moeten het daarom omzetten naar een getal. We kunnen er een geheel getal van maken met 'int()'19:10
commandolinedus bijv.19:10
commandolineint(invoer)19:10
commandolinemaar dat gaan we niet doen19:11
commandolineeen geheel getal levert namelijk afgekapte waarden op bij berekeningen.19:11
commandolineherinneren jullie je 601/60 = 10 nog?19:11
leoquantja19:12
commandolineom er een kommagetal van te maken, gebruiken we i.p.v. int() 'float()'19:12
commandolineer klopt nog één ding niet aan de code nu19:13
commandolinewe controleren niet op 'q'19:13
commandolineiemand enig idee hoe we kunnen controleren of invoer 'q' is?19:13
commandolineok, een hint, 'if'19:14
commandolineen omdat het stil blijft, ook maar even het antwoord:19:14
commandolineif invoer == "q":19:14
commandolinebreak hebben we de afgelopen les nog niet gezien.19:15
commandolinewat het doet is dat het de loop waarin het staat direct beëindigt.19:15
commandolinein dit geval is dat dus de while-loop, die anders 'voor eeuwig' zou blijven draaien.19:16
commandoline<Emiel1976> is de break het zelfde als bij html dat je aan een volgende regel begint?19:16
commandolinenee, <br /> in html breekt de regel af19:16
commandolinedeze 'break' stopt het uitvoeren van de loop (lus, in dit geval het while True-statement bovenaan het document)19:17
commandoline<hannie> Is == nu wel of niet goed?19:17
commandoline== is goed.19:17
commandoline= is voor toewijzen van waardes aan variabelen19:17
commandoline== is voor vergelijken van waarden.19:17
commandolineexalt> kan dit : var = [({a,b},{c,d}), "blaat"] als soort van 2d associatieve array ?19:17
commandolinehmm, wat ingewikkeld voor nu, kom ik na de les wel even op terug.19:18
leoquantok19:18
commandolineok, we hebben nu dus een lijst met cijfers.19:18
commandolinenu moeten we alleen nog het gemiddelde berekenen.19:18
commandolineik ga hier uit van:19:19
commandolinesom van alle getallen/aantal getallen19:19
commandolinewe zullen dus eerst alle getallen die we verzameld hebben bij elkaar moeten optellen.19:19
commandolinedat kan met de loop die we eerder vandaag al hebben behandeld.19:19
commandolinede for-loop19:20
commandolinebegrijpt iedereen wat hier gebeurd?19:20
commandolineok, mooi19:21
commandolinewe hebben nu dus alle cijfers bij elkaar opgeteld.19:21
commandolinewe moeten ze alleen nog delen door het aantal cijfers.19:21
commandolineom daarachter te komen, zullen we een nieuwe python-functie moeten gebruiken:19:21
commandolinelen()19:21
commandolinelen() komt van length (lengte) en geeft de lengte van o.a. een list terug19:22
commandolinegoed, we hebben nu alle gegevens die we nodig hebben19:22
commandolinedan hoeven we dus alleen nog het gemiddelde te bereken19:23
commandolinedoor middel van delen '/'19:23
commandolinezo, ons programma is klaar.19:23
commandolinehoog tijd om eens te kijken of ik geen fouten heb gemaakt.19:24
commandoline<hannie> Hoe voer je een .py programma uit?19:24
commandolinena de les kan ik nog even uitgebreidere uitleg doen, maar hier komt het op neer:19:25
commandolinecd'en naar de map met het bestand19:25
commandolineen python bestandsnaam.py19:25
commandolinein een terminal19:25
commandoline<FOAD> Hij raakt van slag als ik 2 keer enter doe.19:26
commandolinedat klopt, we hebben nog altijd geen foutenafhandeling ingebouwd19:26
commandolinewat er gebeurd is dat float("") niets is.19:26
commandolineen dus een foutmelding geeft.19:26
commandolineok, heeft iedereen het kunnen uitvoeren?19:27
commandolineen heeft iemand nog vragen?19:27
commandolinehet is alweer bijna tijd, dus hier laten we het voor vandaag bij19:28
commandolinenog even samenvatting van vandaag:19:28
commandoline- lijsten19:28
commandoline- toevoegen & verwijderen van items van lijsten19:29
commandoline- for loop19:29
commandoline- break19:29
commandoline- strings, floats, ints19:29
commandolineen dan heb ik het belangrijkste wel geloof ik :)19:29
commandolineEmiel1976> ja die totaal = 0 is bedoelt dat als je niets in vult je het getal 0 hebt zeker\19:30
commandolinehet totaal was nog niks, ik moest het nog berekenen.19:30
commandolineduidelijk?19:30
commandoline<hannie> Wat is het verschil tussen raw_input en input?19:30
commandoline<Tjibba> met raw_input maak je een string19:30
commandoline<Tjibba> input werkt alleen met getallen19:30
commandolinegoed, bedankt voor jullie komst dan allemaal en tot volgende week!19:31
* commandoline is er nog wel even voor vragen19:31
leoquantdit kanaal is weer open19:31
Tjibbo :)19:32
FOADLekker vrij!19:32
Tjibbolol19:32
=== 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.
leoquantdag allemaal19:41

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