leoquant | het kanaal is vanaf nu +m | 16:03 |
---|---|---|
leoquant | commandoline, gelukt? | 16:17 |
commandoline | leoquant: ja | 16:17 |
leoquant | mooi | 16:17 |
leoquant | tot straks | 16:19 |
commandoline | Welkom allemaal bij alweer de derde les uit deze basiscursus Python! | 18:30 |
commandoline | Laten we beginnen met het huiswerk wat ik de vorige keer had opgegeven even bespreken | 18:30 |
commandoline | er zijn meerdere oplossingen mogelijk. | 18:30 |
commandoline | voor 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 |
commandoline | de eerste mogelijkheid is om de code die nodig is bij het invoeren weg te knippen, en op de plekken waar die nodig is te plakken | 18:32 |
commandoline | je krijgt dan dit: | 18:32 |
commandoline | http://paste.ubuntu.com/563139/ | 18:32 |
commandoline | FOAD> Is dat niet strijdig met de Python filosofie? | 18:32 |
commandoline | het klopt dat er iets bestaat als 'there is only one way to do it' | 18:33 |
commandoline | maar dat geld alleen voor dingen in de taal zelf, en ook daarvan wordt wel eens afgeweken | 18:33 |
commandoline | goed, deze oplossing doet wat we willen, maar heeft als nadeel dat er stukjes code meerdere keren in het programma staan, identieke stukjes | 18:34 |
commandoline | als je nu bijv. een fout ontdekt in zo'n stukje code, dan zul je die overal moeten verbeteren. | 18:34 |
commandoline | daarom heb ik nog een tweede mogelijkheid bedacht. | 18:34 |
commandoline | http://paste.ubuntu.com/563140/ | 18:34 |
commandoline | dit programma lijkt eigenlijk een stuk meer op het origineel | 18:35 |
commandoline | er 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 |
commandoline | begrijpt iedereen wat ik gedaan heb bij de tweede oplossing? | 18:35 |
commandoline | mooi, dan gaan we verder | 18: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 |
commandoline | dat klopt | 18:36 |
commandoline | ik 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 |
commandoline | en omdat ik even wilde laten zien dat er meerdere oplossingen zijn, waarvan de makkelijkste niet altijd de beste is. | 18:37 |
commandoline | MedUsaXIII: je kan zoiets doen: | 18:38 |
commandoline | if keuze > 0 and keuze < 5: | 18:38 |
commandoline | en 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 |
commandoline | en alleen dan is de gehele conditie waar | 18:39 |
commandoline | dat betekend hier: | 18:39 |
commandoline | keuze > 0 is waar & keuze < 5 is waar | 18:39 |
commandoline | en dan is dus automatisch het geheel ook waar. | 18:40 |
commandoline | ok, dan kunnen we verder met de stof voor deze les lijkt me. | 18:40 |
commandoline | we gaan eerst weer even werken in de terminal, zoals in de eerste les. | 18:40 |
commandoline | Toepassingen > Hulpmiddelen > Terminalvenster | 18:40 |
commandoline | (of pak het handige terminalvenster van lernid erbij :) ) | 18:41 |
commandoline | we geven net als twee weken geleden het commando 'python' in | 18:41 |
commandoline | ok, waar ik het deze week over wil hebben zijn 'lists', of in het Nederlands lijsten. | 18:42 |
commandoline | tot nu toe hebben we altijd gehad dat een variabele maar één waarde had | 18:42 |
commandoline | a = 1 | 18:42 |
commandoline | bijv. | 18:42 |
commandoline | maar stel je voor dat je bijv. een programma schrijft voor een winkel | 18:42 |
commandoline | en dat je alle dingen wil bijhouden die de winkel in huis heeft. | 18:43 |
commandoline | dat gaat niet met wat we tot nu toe behandelt hebben. | 18:43 |
commandoline | en daarvoor zijn lists dus ontworpen. | 18:43 |
commandoline | een voorbeeldje: | 18:43 |
commandoline | winkel_inventaris = ["appels", "peren", "bananen"] | 18:44 |
commandoline | we 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 |
commandoline | we kunnen er verschillende dingen mee doen, bijv. ze stuk voor stuk weergeven. | 18:45 |
commandoline | bijv: | 18:46 |
commandoline | http://paste.ubuntu.com/563156/ | 18:46 |
commandoline | je ziet hier op de eerste regel iets wat we nog nooit eerder hebben gebruikt: | 18:47 |
commandoline | een for-statement | 18:47 |
commandoline | het for-statement is net zoals het while-statement dat we in het rekenmachineprogramma gebruikten een 'loop' | 18:47 |
commandoline | alles wat eronder staat (en ingesprongen is) wordt 0, 1 of meerdere keren uitgevoerd. | 18:48 |
commandoline | bij de while-loop hangt het aantal keer van uitvoeren af van of de voorwaarde (conditie) die er achter staat 'waar' oplevert | 18:48 |
commandoline | bij de for loop gaat dat anders | 18:49 |
commandoline | voor ieder item in de de eerder aangemaakte lijst ('winkel_inventaris') | 18:49 |
commandoline | wordt de variabele stuk_fruit gemaakt | 18:49 |
commandoline | en wordt de code die onder de for-loop staat uitgevoerd | 18:49 |
commandoline | tot zover even, probeer het scriptje even uit te voeren | 18:50 |
commandoline | vragen? | 18:50 |
leoquant | IndentationError: | 18:50 |
commandoline | hannie: er moet nog een tab tussen '...' en 'print' | 18:51 |
commandoline | de uitvoer is als het goed is: | 18:51 |
commandoline | appels | 18:51 |
commandoline | peren | 18:51 |
commandoline | bananen | 18:51 |
commandoline | onder elkaar | 18:51 |
commandoline | de for loop heeft voor ieder item in de winkel_inventaris het print-commando aangeroepen | 18:52 |
commandoline | Emiel1976> ik krijg daarna weer puntjes. is het dan goed? | 18:52 |
commandoline | druk nog een keer op enter, en de loop gaat van start | 18:52 |
commandoline | goed, zo'n lijst zoals we die nu hebben gemaakt is wel leuk, maar we hebben er nog weinig aan. | 18:53 |
commandoline | dat verandert zodra je er bijv. dingen aan kan toevoegen. | 18:53 |
commandoline | dat gaat zo: | 18:53 |
commandoline | winkel_inventaris.append("kiwi") | 18:53 |
commandoline | vervolgens kun je d.m.v. | 18:54 |
commandoline | print winkel_inventaris | 18:54 |
commandoline | zien dat de kiwi aan onze lijst is toegevoegd | 18:54 |
commandoline | lukt dat? | 18:54 |
commandoline | 'append' voegt iets toe aan het einde van de lijst | 18:55 |
commandoline | <hannie> AttributeError: 'str' object has no attribute 'append' | 18:55 |
commandoline | oh, ik zie dat het al opgelost is. | 18:55 |
commandoline | wat er gebeurde was waarschijnlijk dat je niet toevoegde aan de list, maar aan iets anders | 18:56 |
commandoline | ok, stel nu dat de appels uitverkocht zijn | 18:56 |
commandoline | dan moeten ze natuurlijk van de lijst worden gehaald | 18:56 |
commandoline | dat betekend wel dat we moeten weten hoeveelste 'appels' in de lijst is. | 18:56 |
commandoline | je moet daarvoor weten dat python aan ieder item een nummer geeft | 18:57 |
commandoline | in ons voorbeeld heeft 'appels' het nummer (de zogenaamde index) 0, en heeft 'kiwi' het nummer 3 | 18:57 |
commandoline | er wordt dus begonnen met 0, en daarna naar boven doorgeteld. | 18:57 |
commandoline | om de appels uit de lijst te gooien, doen we het volgende: | 18:58 |
commandoline | del winkel_inventaris["appels"] | 18:58 |
commandoline | ho, fout :P | 18:58 |
commandoline | del winkel_inventaris[0] | 18:58 |
commandoline | Cugel> Waarom niet winkel_inventaris.remove() etc. ? | 18:59 |
commandoline | het verschil is dat 'del' niet alleen bedoelt is voor lijsten, en append wel. (later wil ik het verschil wat preciezer uitleggen) | 18:59 |
commandoline | je kan bijv. ook dit doen | 19:00 |
commandoline | a = 1 | 19:00 |
commandoline | del a | 19:00 |
commandoline | als je daarna | 19:00 |
commandoline | print a | 19:00 |
commandoline | doet, dan merk je dat 'a' niet meer bestaat. | 19:00 |
commandoline | <hannie> Je maakt de variabele dus weer leeg | 19:00 |
commandoline | precies | 19:00 |
commandoline | <hannie> nu vierkante haakjes en bij append ronde haakjes? | 19:01 |
commandoline | de vierkante haakjes worden gebruikt om aan te geven dat we een bepaald item in de lijst willen krijgen | 19:01 |
commandoline | je kan bijv. ook het volgende doen: | 19:01 |
commandoline | print winkel_inventaris[0] | 19:01 |
commandoline | daarom zijn ze dus anders dan de ronde haakjes die we tot nu toe hebben gebruikt: | 19:02 |
commandoline | ze zijn ergens anders voor bedoeld. | 19:02 |
commandoline | duidelijk tot zover? | 19:02 |
commandoline | ah, 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 |
commandoline | dat klopt helemaal, de 'indexes' schuiven door zodra een item uit de lijst wordt verwijdert. | 19:03 |
commandoline | ok, tot zover het winkelvoorbeeld | 19:04 |
commandoline | ik wilde graag nog een ander programma maken namelijk, een programma dat opnieuw op lists is gebaseerd. | 19:04 |
commandoline | ik heb daarvoor dit online document gemaakt, zodat jullie allemaal mee kunnen kijken: | 19:05 |
commandoline | http://typewith.me/ep/pad/view/ro.Op$gICXuBpU/latest | 19:05 |
leoquant | ja | 19:06 |
leoquant | ik zie getyp | 19:06 |
commandoline | mooi | 19:06 |
commandoline | ok, ik wilde een programma maken dat je verschillende cijfers laat invoeren | 19:06 |
commandoline | en dat dan vervolgens het gemiddelde berekent | 19:07 |
commandoline | om te beginnen moeten we dus cijfers verzamelen. | 19:07 |
commandoline | een list is daar ideaal voor. | 19:07 |
commandoline | wat je nu ziet is een lege lijst, zonder items van tevoren erin. | 19:08 |
commandoline | die gaan we nu dus toevoegen | 19:08 |
commandoline | om dat te doen gaan we gebruik maken van de while loop | 19:08 |
commandoline | we willen namelijk net zo lang cijfers toevoegen totdat de gebruiker vindt dat het genoeg is. | 19:09 |
commandoline | ik gebruik hier raw_input, en niet input() | 19:09 |
commandoline | omdat het ook mogelijk moet zijn om de letter 'q' in te voeren. | 19:10 |
commandoline | het probleem is dat de raw_input-functie een 'string' teruggeeft, een stukje tekst | 19:10 |
commandoline | en daar kunnen we straks niet mee rekenen | 19:10 |
commandoline | we moeten het daarom omzetten naar een getal. We kunnen er een geheel getal van maken met 'int()' | 19:10 |
commandoline | dus bijv. | 19:10 |
commandoline | int(invoer) | 19:10 |
commandoline | maar dat gaan we niet doen | 19:11 |
commandoline | een geheel getal levert namelijk afgekapte waarden op bij berekeningen. | 19:11 |
commandoline | herinneren jullie je 601/60 = 10 nog? | 19:11 |
leoquant | ja | 19:12 |
commandoline | om er een kommagetal van te maken, gebruiken we i.p.v. int() 'float()' | 19:12 |
commandoline | er klopt nog één ding niet aan de code nu | 19:13 |
commandoline | we controleren niet op 'q' | 19:13 |
commandoline | iemand enig idee hoe we kunnen controleren of invoer 'q' is? | 19:13 |
commandoline | ok, een hint, 'if' | 19:14 |
commandoline | en omdat het stil blijft, ook maar even het antwoord: | 19:14 |
commandoline | if invoer == "q": | 19:14 |
commandoline | break hebben we de afgelopen les nog niet gezien. | 19:15 |
commandoline | wat het doet is dat het de loop waarin het staat direct beëindigt. | 19:15 |
commandoline | in 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 |
commandoline | nee, <br /> in html breekt de regel af | 19:16 |
commandoline | deze '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 variabelen | 19:17 |
commandoline | == is voor vergelijken van waarden. | 19:17 |
commandoline | exalt> kan dit : var = [({a,b},{c,d}), "blaat"] als soort van 2d associatieve array ? | 19:17 |
commandoline | hmm, wat ingewikkeld voor nu, kom ik na de les wel even op terug. | 19:18 |
leoquant | ok | 19:18 |
commandoline | ok, we hebben nu dus een lijst met cijfers. | 19:18 |
commandoline | nu moeten we alleen nog het gemiddelde berekenen. | 19:18 |
commandoline | ik ga hier uit van: | 19:19 |
commandoline | som van alle getallen/aantal getallen | 19:19 |
commandoline | we zullen dus eerst alle getallen die we verzameld hebben bij elkaar moeten optellen. | 19:19 |
commandoline | dat kan met de loop die we eerder vandaag al hebben behandeld. | 19:19 |
commandoline | de for-loop | 19:20 |
commandoline | begrijpt iedereen wat hier gebeurd? | 19:20 |
commandoline | ok, mooi | 19:21 |
commandoline | we hebben nu dus alle cijfers bij elkaar opgeteld. | 19:21 |
commandoline | we moeten ze alleen nog delen door het aantal cijfers. | 19:21 |
commandoline | om daarachter te komen, zullen we een nieuwe python-functie moeten gebruiken: | 19:21 |
commandoline | len() | 19:21 |
commandoline | len() komt van length (lengte) en geeft de lengte van o.a. een list terug | 19:22 |
commandoline | goed, we hebben nu alle gegevens die we nodig hebben | 19:22 |
commandoline | dan hoeven we dus alleen nog het gemiddelde te bereken | 19:23 |
commandoline | door middel van delen '/' | 19:23 |
commandoline | zo, ons programma is klaar. | 19:23 |
commandoline | hoog tijd om eens te kijken of ik geen fouten heb gemaakt. | 19:24 |
commandoline | <hannie> Hoe voer je een .py programma uit? | 19:24 |
commandoline | na de les kan ik nog even uitgebreidere uitleg doen, maar hier komt het op neer: | 19:25 |
commandoline | cd'en naar de map met het bestand | 19:25 |
commandoline | en python bestandsnaam.py | 19:25 |
commandoline | in een terminal | 19:25 |
commandoline | <FOAD> Hij raakt van slag als ik 2 keer enter doe. | 19:26 |
commandoline | dat klopt, we hebben nog altijd geen foutenafhandeling ingebouwd | 19:26 |
commandoline | wat er gebeurd is dat float("") niets is. | 19:26 |
commandoline | en dus een foutmelding geeft. | 19:26 |
commandoline | ok, heeft iedereen het kunnen uitvoeren? | 19:27 |
commandoline | en heeft iemand nog vragen? | 19:27 |
commandoline | het is alweer bijna tijd, dus hier laten we het voor vandaag bij | 19:28 |
commandoline | nog even samenvatting van vandaag: | 19:28 |
commandoline | - lijsten | 19:28 |
commandoline | - toevoegen & verwijderen van items van lijsten | 19:29 |
commandoline | - for loop | 19:29 |
commandoline | - break | 19:29 |
commandoline | - strings, floats, ints | 19:29 |
commandoline | en dan heb ik het belangrijkste wel geloof ik :) | 19:29 |
commandoline | Emiel1976> ja die totaal = 0 is bedoelt dat als je niets in vult je het getal 0 hebt zeker\ | 19:30 |
commandoline | het totaal was nog niks, ik moest het nog berekenen. | 19:30 |
commandoline | duidelijk? | 19:30 |
commandoline | <hannie> Wat is het verschil tussen raw_input en input? | 19:30 |
commandoline | <Tjibba> met raw_input maak je een string | 19:30 |
commandoline | <Tjibba> input werkt alleen met getallen | 19:30 |
commandoline | goed, bedankt voor jullie komst dan allemaal en tot volgende week! | 19:31 |
* commandoline is er nog wel even voor vragen | 19:31 | |
leoquant | dit kanaal is weer open | 19:31 |
Tjibbo | :) | 19:32 |
FOAD | Lekker vrij! | 19:32 |
Tjibbo | lol | 19: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. | ||
leoquant | dag allemaal | 19:41 |
Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!