De Programmeursleerling - Spronck

1y ago
11 Views
2 Downloads
4.12 MB
418 Pages
Last View : 15d ago
Last Download : 3m ago
Upload by : Ellie Forte
Transcription

De ProgrammeursleerlingLeren coderen met Python 3Pieter Spronck

De ProgrammeursleerlingLeren coderen met Python 3Pieter SpronckVersion 1.0.1624–10–2017

Copyright 2016, 2017 Pieter Spronck.Ik geef toestemming om dit document te kopiëren, verspreiden, en wijzigen volgens de regels van deCreative Commons Attribution-NonCommercial 3.0 Unported License, die verkrijgbaar is via https://creativecommons.org/licenses/by-nc/3.0/.De originele vorm van dit boek is LATEX source code. Het compileren van deze LATEX source genereerteen systeem-onafhankelijke versie van een tekstboek, die geconverteerd kan worden naar andereformaten, en die kan worden geprint.De LATEX source van dit boek wordt (mettertijd) beschikbaar gesteld via http://www.spronck.net/pythonbook.Dit boek is een vertaling door de auteur zelf van het boek The Coder’s Apprentice: Learning Programming with Python 3, Copyright 2016, 2017 Pieter Spronck.De meest recente versie van het boek zal steeds beschikbaar zijn via http://www.spronck.net/pythonbook.

VoorwoordComputer technologie verandert de wereld in een hoog tempo.Bijna 30 jaar geleden kreeg ik mijn eerste baan als computerprogrammeur. In die tijdgebruikten alleen grote bedrijven met uitgebreide administraties computers. Of lievergezegd, één computer, want het was zeldzaam dat een bedrijf er meerdere had. Vrijwelniemand had een PC in huis, Internet bestond nog niet, niemand had een mobiele telefoon.Mensen gebruikten schrijfmachines.In de afgelopen 30 jaar is de manier waarop mensen leven en werken drastisch gewijzigd.Dit is buitengewoon duidelijk als je kijkt naar het werk dat mensen doen. Bijvoorbeeld,toen ik een kind was werd twee keer per dag post bezorgd – vandaag de dag komt depostbode twee keer per week langs, wat betekent dat het leger van professionele postbodesgedecimeerd is. Bankkantoren sluiten omdat bankieren veel gemakkelijker online gedaankan worden. Helpdesks worden bemand door digitale avatars of vervangen door onlineinformatiesystemen. Grote warenhuizen gaan failliet omdat mensen inkopen online doen,wat heeft geleid tot een enorme reductie in het aantal benodigde verkopers. En hoeweldat een lichte toename in de behoefte aan transportmedewerkers heeft veroorzaakt, metzelfrijdende voertuigen in het verschiet zal de werkgelegenheid voor chauffeurs snel totnul afnemen.Dit zijn alle beroepen voor wat we noemen “laag opgeleiden,” maar dat wil niet zeggendat “hoog opgeleiden” veilig zijn. Ik heb programmeren gedoceerd aan professionele journalisten, die me vertelden dat computers grote delen van hun werk overnemen, zoals hetschrijven van eenvoudige artikelen en het doen van onderzoek – ze wilden mijn cursusvolgen omdat ze wisten dat zonder vaardigheden in het omgaan met digitale technologie,ze binnenkort op straat zouden staan. Programma’s zijn al ontwikkeld om eenvoudigemaar o-zo-tijdrovende activiteiten van juristen te automatiseren, namelijk het doorzoekenvan achtergrondmateriaal. Computers kunnen componeren, schilderen, en beeldhouwen– waarom zou je iemand een half jaar lang aan een blok graniet laten schaven als een3D-printer een beeldhouwwerk in een paar uur tijd produceert? Zelfs het ontwerpen enuitvoeren van wetenschappelijke experimenten wordt in diverse wetenschapsgebieden aldeels door computers gedaan.In de 30 jaar dat ik werk, heb ik de arbeidsmarkt zien veranderen van een situatie waarinhet gebruik van computers zeldzaam is, tot een situatie waarin de behoefte aan menselijkearbeidskrachten enorm is afgenomen – ongeacht het beroep. En die verandering is niet teneinde.Dat betekent niet dat er geen plaats meer is voor mensen op de arbeidsmarkt. Maar hetbetekent wel dat alleen mensen die iets kunnen bijdragen wat de computer niet goed alleen

viVoorwoordkan doen, een baan kunnen krijgen. In de nabije toekomst zal de werkgelegenheid onveranderlijk verbonden zijn aan de mogelijkheden van werkzoekenden om de kracht vanmensen en computers met elkaar te combineren zodat beide versterkt worden.Het probleem is dat om de mogelijkheid te hebben computers in te zetten om de kwaliteitvan je werk te verbeteren, het onvoldoende is als je een word processor of spreadsheetkunt gebruiken. Je moet daadwerkelijk in staat zijn de mogelijkheden van computers uitte buiten vanuit het perspectief van je eigen beroep. Bijvoorbeeld, een journalist die slechtsin staat is een programma te draaien dat feiten van het Internet verzamelt, is niet nodig.Echter, een journalist die in staat is een dergelijk programma uit te breiden en te verbeteren,is een waardevolle kracht.Om computers op een dergelijke creatieve manier te gebruiken, heb je vaardigheden nodigdie je in staat stellen te denken en problemen op te lossen als een programmeur. Ik hebjarenlang studenten programmeren geleerd, en ik weet dat voor velen dit geen natuurlijkemanier van werken is. Om de noodzakelijke vaardigheden te verkrijgen, moeten studenteneen aantal intensieve cursussen op dit gebied volgen.Als je bedenkt dat het de taak van universiteiten en hogescholen is om studenten voorte bereiden op een arbeidsmarkt waarop ze meer dan 40 jaar moeten functioneren, en alsje overweegt dat in de nabije toekomst (als het niet al zover is) de kennis en kunde omde kracht van computers te incorporeren in om-het-even-welke baan een vereiste is vooriedere employee, zou je verwachten dat “programmeren” beschouwd wordt als een basisvaardigheid voor iedere student. Helaas is dat niet zo. Typische basiscursussen voor iederestudent zijn “wetenschappelijk schrijven,” “wetenschapsfilosofie,” en “statistiek,” maar demeeste opleidingen zien programmeren nog steeds als niet meer dan een optie. Dat is hetniet.Iedere opleiding die “programmeren” niet als een verplichte cursus op het programma zet,faalt in mijn visie in haar taak studenten te prepareren voor de arbeidsmarkt. Ik zou zelfshet liefste zien dat middelbaren scholen – of misschien zelfs basisscholen – de leerlingenal zouden leren programmeren, omdat programmeervaardigheden gemakkelijker te lerenzijn op jonge leeftijd. De reden is dat programmeren een creatieve manier van denkenvereist, die lastiger aan te leren is als je al getraind bent in de “reproductieve” manier vandenken en werken die scholen aanleren.Alle studenten, ongeacht hun richting, moeten kunnen programmeren. Niet omdatiedereen programmeur moet worden – professioneel programmeren is hoogst gespecialiseerd werk dat slechts weinigen hoeven te beheersen. Maar de kennis om programma’s te kunnen bouwen geeft studenten de mogelijkheid te problemen aan te pakkenals een programmeur, geeft hen inzicht in de mogelijkheden en beperkingen van computers, en geeft hen de kracht computers in te zetten in een specifiek domein op een uniekmenselijke manier.Het doel van dit boek is om iedereen die dat wil te leren programmeren in Python. Hetboek is voornamelijk gericht op middelbaren scholieren, en studenten die onbekend zijnmet programmeren. Het boek moet het mogelijk maken voor iedereen om basiskennisvan programmeren op te doen, en zodoende voorbereid te zijn op de arbeidsmarkt van deeenentwintigste eeuw.Pieter Spronck2 mei 2016Maastricht, NederlandPieter Spronck is een Computer Science professor bij Tilburg University.

VoorwoordviiDankwoordIk dank Allen B. Downey, die het uitermate sterke Python 2 boek Think Python: How toThink Like a Computer Scientist heeft geschreven. Ikzelf heb Python programmeren geleerdmet dit boek, en ik heb het LATEX template van Downey’s boek gebruikt om mijn eigen boekte schrijven. Downey heeft recentelijk een Python 3 versie van zijn boek uitgebracht. Als jeEngels voldoende beheerst en al een beetje bekend bent met programmeren, doe je er goedaan dat boek erbij te halen – het is gratis te downloaden.Peter Wentworth heeft een Python 3 versie van Downey’s boek gemaakt. Zijn stijl vanlesgeven is niet de mijne, maar ik heb een hoop informatie uit zijn boek gehaald, waarvoordank.Ik dank ook Guido van Rossum, die Python origineel ontworpen heeft. Ik ben gek op programmeren, maar slechts weinig programmeertalen zijn plezierig om te gebruiken. Pythonis zeer prettig in het gebruik, wat vooral aan Van Rossum te danken is.Ik dank ook Ákos Kádár, Nanne van Noord, en Sander Wubben, die met mij gewerkthebben aan een vroege versie van een Python cursus, waarop ik dit boek gebaseerd heb.Ook dank ik de leden van Monty Python, wiens televisie en audio programma’s mij Engels hebben geleerd, en aan wie Python haar naam te danken heeft. Ik heb hier en daarvertalingen van stukjes van hun teksten gebruikt in demonstraties en opgaves in dit boek.Ik dank Myrthe Spronck, die de website bij dit boek gebouwd heeft. De website is te vindenvia http://www.spronck.net/pythonbook.Tenslotte dank ik iedereen die suggesties of correcties heeft ingestuurd (een lijst volgt hieronder).Als je een suggestie of correctie hebt, stuur dan een email naar pythonbook@spronck.net(dat adres is natuurlijk niet bedoeld om vragen over programma’s te stellen – er zijn veleplaatsen op het Internet waar programmeerhulp geboden wordt), of een boodschap achterlaten op het forum http://www.spronck.net/forum. Als ik een wijziging maak in het boekop basis van feedback, zal ik je naam in dit dankwoord opnemen (tenzij je aangeeft dat jedat liever niet hebt).Bijdragen Larry Cali ontdekte een fout in het antwoord bij opgave 4.3, waar problemen kondenoptreden met waardes die Python niet precies kan opslaan. Ik heb het antwoordverbeterd en een opmerking gemaakt in hoofdstuk 3 (gecorrigeerd in versie 1.0.5). Isaac Kramer ontdekte een fout in opgave 9.5, die het probleem in de code onzichtbaar maakte. Ik heb de code zo aangepast dat het probleem inderdaad zichtbaar iszoals ik uitleg bij de antwoorden (gecorrigeerd in versie 1.0.6). Ruud van Cruchten gaf aan dat de uitleg over het geven van commentaar overmeerdere regels in hoofdstuk 4 incompleet was en tot fouten kon leiden. Ik heb dezebeschrijving uitgebreid (gecorrigeerd in versie 1.0.7). Nade Kang gaf aan dat het antwoord op Opgave 7.9 (tweede raad-spelletje) verwarrend kan zijn. Ik heb de code iets aangepast ter verduidelijking (gecorrigeerd in versie1.0.7).

viiiVoorwoord Shiyu Zhang wees me op een paar nutteloze parameters in listing 8.16. Ik heb ditaangepast (gecorrigeerd in versie 1.0.8). Claudia Dai gaf een kleine fout in het antwoord op opgave 10.1 (klinkers tellen) aan(gecorrigeerd in versie 1.0.9). Een aantal studenten suggereerde dat het toevoegen van stroomdiagrammen aan dehoofdstukken over condities en iteraties zou helpen om meer begrip over deze concepten te krijgen. Ik heb deze suggestie opgevolgd (toegevoegd aan versie 1.0.9). Mauro Crociara gaf meerdere ideeën voor verbeteringen (toegevoegd aan versie1.0.11). David Ytsma wees mij op een fout in het antwoord bij opgave 6.1 (cijfers geven;gecorrigeerd in versie 1.0.11). Chris Spinks wees mij op fouten in het antwoord code bij opgave 21.4, de uitgebreidefruitmand, en in de reguliere expressies bij opgaves 25.3 en 25.4, waar namen uit eentekst gehaald moeten worden (opgelost in versie 1.0.12). Dirk Remmelzwaal wees mij op een foutje in de voorbeeldcode in sectie 5.3.3, waarpcinput besproken wordt (opgelost in versie 1.0.12). Jaap van der Heide wees mij op een stukje onvertaalde tekst in hoofdstuk 4 (opgelostin versie 1.0.13). Patrick Vekemans wees mij op een fout in de code in subsectie 7.3.2 (opgelost in versie1.0.13). Jose Perez-Carballo gaf aan dat de lijst van gereserveerde woorden die ik hadopgenomen, de lijst was die voor Python 2 geldt, en die in Python 3 wijzigingenheeft ondergaan (opgelost in versie 1.0.13). Jos Kaats wees me op een foutje in mijn beschrijving van de aanroep van functiesvanuit functies (opgelost in versie 1.0.14). Luis Mendo Tomas had een flink aantal opmerkingen die alle geleid hebben tot wijzigingen, onder andere wat betreft de beschrijving van default waardes voor functieparameters (versie 1.0.14). Sven de Windt wees me op een typo (opgelost in versie 1.0.15). Max Bierlee wees me op meerdere schrijffouten (opgelost in versies 1.0.15 en 1.0.16). Abdulkader Abdullah ontdekte een fout in de ranges die gebruikt werden in hetantwoord bij opgave 14.2 (opgelost in versie 1.0.16). Corné Heeren gaf veel ideeën voor verbeteringen. Ik ben zeer erkentelijk voor zijnsimpele manier om de middelste van drie getallen te bepalen in het hoofdstuk overfuncties (verwerkt in versie 1.0.16).

InhoudsopgaveVoorwoordv1Introductie11.1Hoe dit boek te gebruiken . . . . . . . . . . . . . . . . . . . . . . . . . . . .11.2Aannames en veronderstellingen . . . . . . . . . . . . . . . . . . . . . . . .21.3Waarom Python? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31.4Python’s beperkingen als programmeertaal . . . . . . . . . . . . . . . . . .41.5Wat betekent “denken als een programmeur?” . . . . . . . . . . . . . . . .41.6De kunst van het programmeren . . . . . . . . . . . . . . . . . . . . . . . .61.7Groei van klein naar groot . . . . . . . . . . . . . . . . . . . . . . . . . . . .71.8Python 2 of Python 3? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81.9Oefening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .823Python Gebruiken112.1Python installeren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .112.2Python programma’s creëren . . . . . . . . . . . . . . . . . . . . . . . . . .122.3Python programma’s uitvoeren . . . . . . . . . . . . . . . . . . . . . . . . .132.4Aanvullend materiaal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13Expressies153.1Resultaten tonen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .153.2Data types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .163.3Expressies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .183.4Stijl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21

x45678InhoudsopgaveVariabelen254.1Variables en waardes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .254.2Variabele namen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .274.3Debuggen met variabelen . . . . . . . . . . . . . . . . . . . . . . . . . . . .304.4Soft typing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .314.5Verkorte operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .324.6Commentaar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33Eenvoudige Functies375.1Elementen van een functie . . . . . . . . . . . . . . . . . . . . . . . . . . . .375.2Basis functies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .405.3Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46Condities516.1Boolean expressies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .516.2Conditionele statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . .556.3Vroegtijdig afbreken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63Iteraties677.1while loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .677.2for loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .737.3Loop controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .767.4Geneste loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .817.5De loop-en-een-half . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .837.6Slim gebruik van loops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .867.7Over het ontwerpen van algoritmes . . . . . . . . . . . . . . . . . . . . . .90Functies958.1Het nut van functies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .958.2Het creëren van functies . . . . . . . . . . . . . . . . . . . . . . . . . . . . .968.3Scope en levensduur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1078.4Grip krijgen op complexiteit . . . . . . . . . . . . . . . . . . . . . . . . . . .1118.5Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1158.6Anonieme functies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116

Inhoudsopgave9xiRecursie1219.1Wat is recursie? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1219.2Recursieve definities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12210 Strings13110.1Herhaling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13110.2Strings over meerdere regels . . . . . . . . . . . . . . . . . . . . . . . . . . .13210.3Speciale tekens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13410.4Tekens in een string . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13410.5Strings zijn onveranderbaar . . . . . . . . . . . . . . . . . . . . . . . . . . .13810.6string methodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13810.7Codering van tekens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14111 Tuples14711.1Gebruik van tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14711.2Tuples zijn onveranderbaar . . . . . . . . . . . . . . . . . . . . . . . . . . .15011.3Toepassingen van tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15012 Lists15312.1Basis van lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15312.2Lists zijn veranderbaar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15412.3Lists en operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15512.4List methodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .15612.5Alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16112.6Geneste lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16412.7List casting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16512.8List comprehensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16513 Dictionaries17113.1Dictionary basis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17113.2Dictionary methodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17213.3Keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17613.4Opslaan van complexe waardes . . . . . . . . . . . . . . . . . . . . . . . . .17613.5Snelheid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .177

xiiInhoudsopgave14 Sets18114.1Basis van sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18114.2Set methodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18214.3Frozensets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18515 Besturingssysteem18715.1Computers en besturingssystemen . . . . . . . . . . . . . . . . . . . . . . . 18715.2Command prompt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18815.3Bestandssysteem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18915.4os functies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19016 Tekstbestanden19316.1Platte tekstbestanden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19316.2Lezen van tekstbestanden . . . . . . . . . . . . . . . . . . . . . . . . . . . .19516.3Schrijven in tekstbestanden . . . . . . . . . . . . . . . . . . . . . . . . . . .19916.4Toevoegen aan tekstbestanden . . . . . . . . . . . . . . . . . . . . . . . . . .20116.5os.path methodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20116.6Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17 Exceptions20420717.1Errors en exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20717.2Afhandelen van exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . .20817.3Exceptions bij bestandsmanipulatie . . . . . . . . . . . . . . . . . . . . . . . 21317.4Genereren van exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 Binaire Bestanden21421718.1Openen en sluiten van binaire bestanden . . . . . . . . . . . . . . . . . . . 21718.2Lezen uit een binair bestand . . . . . . . . . . . . . . . . . . . . . . . . . . .18.3Schrijven in een binair bestand . . . . . . . . . . . . . . . . . . . . . . . . . 22118.4Positioneren van de pointer . . . . . . . . . . . . . . . . . . . . . . . . . . .19 Bitsgewijze Operatoren21822222719.1Bits en bytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22719.2Manipulatie van bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .22919.3Het nut van bitsgewijze operaties . . . . . . . . . . . . . . . . . . . . . . . . 232

Inhoudsopgavexiii20 Object Oriëntatie23520.1De object georiënteerde wereld . . . . . . . . . . . . . . . . . . . . . . . . . 23520.2Object oriëntatie in Python . . . . . . . . . . . . . . . . . . . . . . . . . . . .23920.3Methodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24320.4Nesten van objecten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24420.5Geheugenbeheer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24721 Operator Overloading25121.1Het idee achter operator overloading . . . . . . . . . . . . . . . . . . . . . . 25121.2Vergelijkingen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25221.3Berekeningen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25621.4Eénwaardige operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25821.5Sequenties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25922 Overerving26522.1Class overerving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26522.2Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26923 Iteratoren en Generatoren27323.1Iteratoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27323.2Generatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27923.3itertools module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28024 Command Line Verwerking28524.1De command line . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24.2Flexibele command line verwerking . . . . . . . . . . . . . . . . . . . . . . 28725 Reguliere Expressies28529125.1Reguliere expressies met Python . . . . . . . . . . . . . . . . . . . . . . . . 29125.2Reguliere expressies schrijven . . . . . . . . . . . . . . . . . . . . . . . . . . 29425.3Groeperen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .29825.4Vervangen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .300

xivInhoudsopgave26 Bestandsformaten30326.1CSV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30326.2Pickling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30526.3JavaScript Object Notation (JSON) . . . . . . . . . . . . . . . . . . . . . . . 30626.4HTML en XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27 Diverse Nuttige Modules30730927.1datetime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30927.2collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31027.3urllib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31127.4glob . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31227.5statistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313A Problemen Oplossen317B Verschillen met Python 2319C pcinput.py323D pcmaze.py325E Test Tekstbestanden327F Antwoorden331G Engelse Terminologie395

Hoofdstuk 1IntroductieComputers zijn prachtige machines. De meeste machines (auto’s, televisies, magnetrons)zijn gemaakt voor een specifiek doel dat ze effectief en efficiënt kunnen bereiken. Computers daarentegen zijn doelloze machines, die alles wat je maar wilt aangeleerd kunnenkrijgen. De kunde die je in staat stelt om computers te laten doen wat je wilt, heet “programmeren.”In iedere wetenschappelijke richting en in elk beroep, moeten mensen vandaag de dag omgaan met grote hoeveelheden data. Zij die in staat zijn de kracht van computers in te zettenom gebruik te maken van die data, met andere woorden, zij die kunnen programmeren,zijn veel beter in staat hun beroep uit te oefenen dan zij die dat niet kunnen. Ik durf zelfste stellen dat in de zeer nabije toekomst zij die niet kunnen programmeren niet meer arbeidsgeschikt zijn. Daarom zie ik het als een noodzaak dat iedereen tijdens zijn of haaropleiding leert programmeren.Programmeren betekent niet alleen dat je weet wat programmeerregels doen; het betekentook dat je kunt denken als een programmeur, en dat je problemen kunt analyseren vanuithet perspectief dat ze opgelost moeten worden door een computer. Deze vaardighedenkun je niet leren uit een boek. Je kunt ze alleen leren door daadwerkelijk programma’s temaken.Dit boek is geschreven om je de basis van de Python 3 computertaal te leren. Studentenleren met dit boek niet alleen de taal te gebruiken, maar doen er ook oefeningen mee.Het boek is niet alleen bedoeld voor studenten die vanuit zichzelf al kunnen en willenprogrammeren. Het is ook en misschien zelfs vooral bedoeld voor hen voor wie programmeren een vreemde taak is. De teksten in dit boek zijn vaak uitgebreider dan je in andereboeken tegenkomt, en proberen problemen te voorzien die je tegen kunt komen wanneerje nieuwe concepten probeert te begrijpen.1.1Hoe dit boek te gebruikenDit boek is bedoeld als cursus. Het is niet direct bedoeld als naslagwerk voor de Pythontaal. Naslagwerken zijn niet nodig, een uitstekende taalreferentie voor Python kan opInternet gevonden worden (http://docs.python.org).

2Hoofdstuk 1. IntroductieDe hoofdstukken van dit boek zijn geschreven om in volgorde bestudeerd te worden. Vooreen korte cursus Python, waarbij je je concentreert op “imperatief programmeren,” moetje de volgende onderwerpen bestuderen: variabelen en expressies, condities en iteraties,functies, strings, lists en dictionaries, en bestandsverwerking. Met andere woorden, je kuntje beperken tot de hoofdstukken 1 tot en met 19, waarbij de hoofdstukken 9 (recursie), 14(sets), 17 (exceptions), 18 (binaire bestanden), and 19 (bitsgewijze operatoren) beschouwdkunnen worden als optioneel materiaal, dat je kunt overslaan totdat je ze nodig hebt (waarbij ik wel aanbeveel dat je probeert recursie te begrijpen, aangezien het je helpt om sommige opgaven uit latere hoofdstukken op te lossen).Voor een uitgebreidere cursus Python moet je in ieder geval ook object oriëntatie bestuderen, dat wil zeggen hoofdstukken 20 tot en met 23, waarbij hoofdstuk 23 (iteratoren engeneratoren) beschouwd kan worden als geavanceerde stof.De overige hoofdstukken zijn alle nuttig maar optioneel. Je kunt hiervan bestuderen wat jewilt, hoewel ik aanbeveel dat je ze op zijn minst doorbladert om te zien waar ze over gaan.Toekomstige edities van dit boek kunnen extra optioneel materiaal bevatten.Tijdens het bestuderen van dit boek moet je een computer bij de hand houden waaropje Python hebt geïnstalleerd (hoofdstuk 2 legt uit hoe je Python kunt krijgen voor jouwcomputer). Het boek bevat vele kleine en grotere oefeningen, die je allemaal moet doentijdens het bestuderen. Als je veel van de oefeningen overslaat, zul je zeker niet lerenprogrammeren. Meer over het doen van oefeningen volgt later in dit hoofdstuk (1.9).Veel van de code fragmenten in dit boek – in ieder geval alle antwoorden op de opgaves enalle iets langere fragmenten – hebben een bestandsnaam boven de code genoemd. Datbetekent dat die code beschikbaar is als bestand, verkrijgbaar via de website die metdit boek geassocieerd is (http://www.spronck.net/pythonbook). Je kunt de code downloaden en meteen in een editor laden als je dat wilt.Let op! Het kopiëren en plakken van code vanuit een PDF bestand naar een editorwerkt over het algemeen niet. Tekst in een PDF bestand is niet opgeslagen op een manierdie ervoor zorgt dat spaties correct gekopieerd worden. Dus je moet ofwel code handmatigintypen, ofwel de bestanden gebruiken die ik beschikbaar heb gesteld.1.2Aannames en veronderstellingenDit boek veronderstelt dat je geen programmeervaardigheden hebt, maar dat je die wiltaanleren. Het veronderstelt ook dat je in ieder geval het vermogen hebt om abstract tedenken.Realiseer je dat om te leren programmeren je een flinke hoeveelheid tijd moet investeren.Je kunt niet volstaan met het materiaal doorlezen en hier en daar een kleine oefening doen.Je moet daadwerkelijk met de stof oefenen door ook de grotere opgaven te doen. Als je jebeperkt tot de basishoofdstukken (alles tot en met het omgaan met tekstbestanden), en jehebt nog geen programmeerervaring, moet je rekenen op een tijdsinvestering van 100 tot200 uur, afhankelijk van je aanleg. Als je alles wilt leren wat het boek aanbiedt, moet jerekenen op 200 tot 400 uur.Dit boek leert je niet om een professioneel programmeur te zijn. Het leert je de initiëlevaardigheden die iedere programmeur ook heeft aangeleerd tijdens zijn of haar opleiding.

1.3. Waarom Python?3Het boek eindigt nadat die eerste vaardigheden zijn bijgebracht. Voor de meeste mensenis dat voldoende om iedere programmeertaak die ze tegenkomen aan te pakken, en biedtvoldoende basis om meer te leren wanneer dat nodig is.Ik gebruik in het boek zoveel mogelijk de Nederlandse taal, maar ik kom er niet onderuitom zo nu en dan ook gebruik te maken van Engelstalige terminologie. Dat heeft drie redenen: (1) sommige termen zijn gewoon niet goed vertaalbaar (bijvoorbeeld “statement”),(2) sommige termen refereren aan Python taalelementen en die zijn Engelstalig (bijvoorbeeld “float,” wat een gebroken getal is

Ik dank Allen B. Downey, die het uitermate sterke Python 2 boek Think Python: How to Think Like a Computer Scientist heeft geschreven. Ikzelf heb Python programmeren geleerd met dit boek, en ik heb het LATEX template van Downey's boek gebruikt om mijn eigen boek te schrijven. Downey heeft recentelijk een Python 3 versie van zijn boek uitgebracht.

Related Documents:

Keywords: Crisis management, Game-based training, Serious games, Person-alised games, Real-time adaptation, Player monitoring 1 Introduction Traditional crisis management training is a paper-based, collaborative dynamic exercise [1]. In simple words, during training, a team of crisis responders are

Game-based training, personalized gaming, serious games, multi-modal player modeling, crisis management ACM Reference format: Paris Mavromoustakos-Blom, Sander Bakkes, and Pieter Spronck. 2018. Per-sonalized Crisis Management Training on a Tablet. In Proceedings of Foun-dations of Digital Games 2018, Malmö, Sweden, August 7-10, 2018 (FDG18),

Our AAT Advanced Diploma in Accounting course is the intermediate level of AAT’s accounting qualifications. You’ll master more complex accountancy skills, including advanced bookkeeping, preparing final accounts, and management costing techniques. You’ll also cover VAT issues in business, and the importance of professional ethics - all without giving up your job, family time or social .

AngularJS is an open-source web application framework or JavaScript framework. Develop and maintained by Google and by a community of individual developers. In other word you can say AngularJS is an extended form of HTML with new

Artificial intelligence: opportunities and implications for the future of decision making. 9 November 2016. Big data, artificial intelligence, machine learning and data protection 20170904 Version: 2.2 7 This may not sound very different from standard methods of data analysis. But the difference is that AI programs don’t linearly analyse data in the way they were originally programmed .

Cambridge International Examinations prepares school students for life, helping them develop an informed curiosity and a lasting passion for learning. We are part of Cambridge Assessment, a department of the University of Cambridge. Our international qualifications are recognised by the world’s best universities and employers, giving students a wide range of options in their education and .

The requirement for Civil Engineering activities to promote sustainable development and the impact on life and the environment. 6. ICT, fieldwork and laboratory practice. 7. Contexts in which Civil Engineering knowledge can be applied (e.g. operations & management, application & development of technology etc). 8. The principles of managing engineering processes. C. Cognitive, intellectual or .

communications capabilities; and to support and promote the ability of emergency response providers and relevant government officials to communicate in the event of natural disasters, acts of terrorism, and other man-made disasters. Provides a consultative structure to coordinate the cybersecurity