De Programmeursleerling voor 6 Wewi (2024–2025)
Pepijn De Petter · Onze-Lieve-Vrouw-Instituut Boom
In deze interactieve cursus leer je programmeren in Python 3. Daarbij gaan we ervan uit dat je nog geen enkele ervaring hebt met programmeren. Het leermateriaal is gebaseerd op het boek De programmeursleerling van Pieter Spronck (Tilburg University).
Leerkrachten die met deze cursus aan de slag willen gaan, nemen best ook even de documentatie door.
Je bent niet geregistreerd voor deze cursus.
RegistrerenComputers 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 kunnen krijgen. 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 zetten om 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 zelfs te 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 haar opleiding leert programmeren.
Programmeren betekent niet alleen dat je weet wat programmeerregels doen; het betekent ook dat je kunt denken als een programmeur, en dat je problemen kunt analyseren vanuit het perspectief dat ze opgelost moeten worden door een computer. Deze vaardigheden kun je niet leren uit een boek. Je kunt ze alleen leren door daadwerkelijk programma’s te maken.
Dit boek is geschreven om je de basis van de Python 3 computertaal te leren. Studenten leren 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 willen programmeren. 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 andere boeken tegenkomt, en proberen problemen te voorzien die je tegen kunt komen wanneer je nieuwe concepten probeert te begrijpen.
Zoals ik heb uitgelegd in de introductie, zul je Python code moeten schrijven om te kunnen leren met dit boek. Dat betekent dat je een computer nodig hebt waarop Python geïnstalleerd is, en je moet weten hoe je Python programma’s kunt schrijven. Dit hoofdstuk legt uit hoe je Python aan het werk krijgt.
Titel | Voortgang groep | Status | |||
---|---|---|---|---|---|
Inleiding | |||||
Python installeren | |||||
Python programma's creëren | |||||
Python programma's uitvoeren | |||||
Aanvullend materiaal | |||||
Hello, world! | |||||
Een expressie evalueren |
Welkom bij het eerste echte programmeerhoofdstuk. In dit hoofdstuk bespreek ik expressies, die je kunt beschouwen als berekeningen die je ook kunt uitvoeren met een simpele rekenmachine. Het is een klein begin, maar deze expressies ga je nodig hebben in alle volgende hoofdstukken.
Titel | Voortgang groep | Status | |||
---|---|---|---|---|---|
Inleiding | |||||
Resultaten tonen | |||||
Tekst uitschrijven | |||||
Data types | |||||
Expressies | |||||
Stijl | |||||
Wat je geleerd hebt | |||||
Boeken bestellen | |||||
ZeroDivisionError | |||||
Runtime-fouten | |||||
Alarm instellen |
Als je met code werkt, ben je vaak bezig met het ontwerpen van een procedure (of “algoritme”) dat een probleem op een algemeen toepasbare manier oplost. Bijvoorbeeld, in opgave 3.1 moest je de prijs van 60 boeken uitrekenen. De code die je schreef lost het probleem alleen op voor precies 60 boeken voor een bepaalde prijs. Als je een dergelijk probleem algemener wilt oplossen, moet je variabelen gebruiken om waardes in op te slaan.
Titel | Voortgang groep | Status | |||
---|---|---|---|---|---|
Inleiding | |||||
Variables en waardes | |||||
Namen van variabelen | |||||
Debuggen met variabelen | |||||
Soft typing | |||||
Verkorte operatoren | |||||
Commentaar | |||||
Wat je geleerd hebt | |||||
Gemiddelde van drie waarden | |||||
Oppervlakte van een cirkel | |||||
Aantal muntjes | |||||
Variabelen omwisselen |
Ik heb in de voorgaande hoofdstukken al gesproken over een aantal basis
“functies,” zoals print()
en int()
. In dit hoofdstuk worden deze
functies in meer detail besproken, en zal ik een aantal nieuwe functies
introduceren die nuttig gaan zijn in de volgende hoofdstukken. In
hoofdstuk
8
ga ik bespreken hoe je je eigen functies kunt maken.
Titel | Voortgang groep | Status | |||
---|---|---|---|---|---|
Inleiding | |||||
Elementen van een functie | |||||
Enkele basisfuncties | |||||
Modules | |||||
Wat je geleerd hebt | |||||
Lengte van een string | |||||
Stelling van Pythagoras | |||||
Minimum, maximum en gemiddelde | |||||
Machten van e | |||||
Gehele toevalsgetallen |
In een programma zijn er vaak regels code die je alleen wilt uitvoeren onder bepaalde omstandigheden. Om dat te regelen, bieden alle programmeertalen zogeheten “conditionele statements” of “condities.” In dit hoofdstuk leg ik uit hoe condities werken in Python.
Titel | Voortgang groep | Status | |||
---|---|---|---|---|---|
Inleiding | |||||
Boolean expressies | |||||
Conditionele statements | |||||
Vroegtijdig afbreken | |||||
Wat je geleerd hebt | |||||
Letterscores | |||||
Letterscores | |||||
Verschillende klinkers | |||||
Kwadratische vergelijkingen |
Computers raken niet verveeld. Als een computer een taak honderdduizenden malen moet herhalen, protesteert hij niet. Mensen daarentegen houden niet van teveel herhaling. Daarom moeten herhalende taken aan een computer worden overgelaten. Alle programmeertalen ondersteunen herhalingen. De klasse programmeerconstructies die herhalingen mogelijk maken heten “iteraties.” Een veelgebruikte term is “loops” (Engels, spreek uit: “loeps” – dit woord kun je netjes vertalen als “lussen,” maar dat zeggen programmeurs nooit).
Dit hoofdstuk legt uit wat je moet weten over loops in Python. Als programmeren helemaal nieuw voor je is, zul je wellicht het gevoel krijgen dat loops een lastig onderwerp zijn. Als dat zo is, neem dan de tijd voor dit hoofdstuk, en werk eraan totdat je zeker weet dat je alles snapt. Loops zijn zo’n basaal programmeerconcept dat je ze goed moet begrijpen. Elk hoofdstuk dat hierna komt maakt gebruik van loops.
Titel | Voortgang groep | Status | |||
---|---|---|---|---|---|
Inleiding | |||||
While loop | |||||
For loops | |||||
Loop controle | |||||
Geneste loops | |||||
De loop-en-een-half | |||||
Slim gebruik van loops | |||||
Over het ontwerpen van algoritmes | |||||
Wat je geleerd hebt | |||||
Oefeningen | |||||
Tafels van vermenigvuldiging | |||||
Tafels van vermenigvuldiging | |||||
Grootste, kleinste en drievouden | |||||
99 bottles of beer | |||||
Rij van Fibonacci | |||||
Gemeenschappelijke karakters | |||||
Benadering van pi | |||||
Priemgetallen | |||||
Tafels van vermenigvuldiging | |||||
Som van twee kwadraten | |||||
DCBA = 4 × ABCD | |||||
Apen en kokosnoten | |||||
Driehoekkruipers |
In hoofdstuk 5 beschreef ik hoe je eenvoudige functies kunt gebruiken, en hoe je functies kunt importeren uit modules. Dit hoofdstuk beschrijft hoe je je eigen functies en modules kunt creëren. Als je niet meer weet wat hoofdstuk 5 over functies zei, doe je er goed aan om dat hoofdstuk nogmaals door te nemen.
Titel | Voortgang groep | Status | |||
---|---|---|---|---|---|
Inleiding | |||||
Het nut van functies | |||||
Het creëren van functies | |||||
Scope en levensduur | |||||
Grip krijgen op complexiteit | |||||
Modules | |||||
Anonieme functies | |||||
Wat je geleerd hebt | |||||
Tafels van vermenigvuldiging | |||||
Gemeenschappelijke karakters | |||||
Grerory-Leibnitz reeks | |||||
Kwadratische vergelijkingen | |||||
Binomiaalcoëfficiënt | |||||
Wat is er fout? |
Recursie is een speciale techniek die je kunt gebruiken nu je geleerd hebt om functies te maken. Recursie kan bepaalde problemen op een elegante en krachtige manier oplossen, maar studenten vinden het vaak een lastig onderwerp. Daarom heb ik er een apart hoofdstuk aan gewijd. Als je bij bestudering van dit hoofdstuk denkt dat het te ingewikkeld voor je is, voel je dan vrij om het voorlopig over te slaan. Je kunt naderhand bij dit hoofdstuk terugkomen. De volgende hoofdstukken zijn weer een stuk gemakkelijker.
Titel | Voortgang groep | Status | |||
---|---|---|---|---|---|
Inleiding | |||||
Wat is recursie? | |||||
Recursieve definities | |||||
Wat je geleerd hebt | |||||
Fibonaccigetallen | |||||
Grootste gemene deler |
Tot nu toe gebruikten de meeste voorbeelden en opgaves getallen. Je hebt je misschien afgevraagd of programmeren vooral bedoeld is voor het manipuleren van getallen. In het dagelijks leven is het veel gebruikelijker om met tekstuele informatie om te gaan.
De reden dat de omgang met teksten was uitgesteld tot nu, is dat in programmeertalen het veel gemakkelijker is om met getallen om te gaan dan met teksten. Maar in dit hoofdstuk leg ik uit hoe je teksten kunt manipuleren met programma’s.
In programmeeromgevingen worden teksten weergegeven door strings. Dit hoofdstuk geeft details over strings, en over functies die beschikbaar zijn om strings aan te pakken.
Titel | Voortgang groep | Status | |||
---|---|---|---|---|---|
Inleiding | |||||
Herhaling | |||||
Strings over meerdere regels | |||||
Speciale tekens | |||||
Tekens in een string | |||||
Strings zijn onveranderbaar | |||||
String methodes | |||||
Codering van tekens | |||||
Wat je geleerd hebt | |||||
Klinkers tellen | |||||
Tussen haakjes | |||||
Roteer een circulair alfabet | |||||
Woorden tellen | |||||
ASCII volgorde |
Een tuple is een groep van één of meer waardes die als een geheel behandeld worden. Dit hoofdstuk legt uit hoe je tuples kunt herkennen en gebruiken.
Titel | Voortgang groep | Status | |||
---|---|---|---|---|---|
Inleiding | |||||
Gebruik van tuples | |||||
Tuples zijn onveranderbaar | |||||
Toepassingen van tuples | |||||
Wat je geleerd hebt | |||||
Complexe getallen optellen | |||||
Complexe getallen vermenigvuldigen |
Een “list” (Engelse woord voor “lijst”) is een geordende verzameling van data items, net zoals een tuple. Het verschil tussen lists en tuples is dat lists veranderbaar zijn. Dit maakt ze tot een zeer flexibele data structuur, waar je op veel manieren gebruik van kunt maken.
Titel | Voortgang groep | Status | |||
---|---|---|---|---|---|
Inleiding | |||||
Basis van lists | |||||
Lists zijn veranderbaar | |||||
Lists en operatoren | |||||
List methodes | |||||
Alias | |||||
Geneste lists | |||||
List casting | |||||
List comprehensions | |||||
Wat je geleerd hebt | |||||
Geschud kaartspel | |||||
FIFO (TODO) | |||||
Zeef van Eratosthenes (TODO) |
Strings, tuples en lists zijn geordende data structuren, wat inhoudt dat ze via indices benaderd kunnen worden. Maar niet alle data verzamelingen hebben een natuurlijke manier van numeriek geordend zijn, en deze kunnen dus niet (gemakkelijk) geïndiceerd worden. Python biedt “dictionaries” als een manier om ongeordende data te structureren.
Titel | Voortgang groep | Status | |||
---|---|---|---|---|---|
Inleiding | |||||
Dictionary basis | |||||
Dictionary methodes | |||||
Keys | |||||
Opslaan van complexe waardes | |||||
Snelheid | |||||
Wat je geleerd hebt | |||||
Woorden tellen | |||||
Filmbeoordelingen | |||||
Bibliotheek (TODO) |
Sets zijn ongeordende data structuren die alleen unieke elementen kunnen bevatten. Slechts weinig programmeertalen ondersteunen het gebruik van sets, maar Python doet het wel. Sets worden niet vaak gebruikt, maar kunnen soms een leuke oplossing geven voor een probleem.
Titel | Voortgang groep | Status | |||
---|---|---|---|---|---|
Inleiding | |||||
Basis van sets | |||||
Set methodes | |||||
Frozensets | |||||
Wat je geleerd hebt | |||||
Socrates | |||||
Deelbaar |
Tot nu toe heb ik Python programma’s behandeld als functionaliteiten die
los staan van alles wat zich buiten het programma bevindt. Python
programma’s draaien echter op een computer, en zo nu en dan moet een
programma omgaan met de eigenschappen van een specifieke computer. Vanaf
hoofdstuk
16
gaat dit een belangrijke rol spelen, omdat ik dan het omgaan met
bestanden ga behandelen. Om met de eigenschappen van een specifieke
computer te kunnen omgaan, introduceert Python een aantal functies in de
os
module, waar os
de afkorting is voor “operating system”
(besturingssysteem). Dit hoofdstuk bespreekt de belangrijkste functies
uit de os
module.
Titel | Voortgang groep | Status | |||
---|---|---|---|---|---|
Inleiding | |||||
Computers en besturingssystemen | |||||
Command prompt | |||||
Bestandssysteem | |||||
OS functies | |||||
Wat je geleerd hebt | |||||
Directorystructuur |
Eén van de belangrijkste toepassingen van Python voor dataverwerking is het lezen, wijzigen, en schrijven van tekstbestanden. Data wordt vaak opgeslagen in tekstbestanden, omdat dit soort bestanden gemakkelijk tussen verschillende programma’s overgedragen kan worden. Er zijn meerdere standaard bestandsformaten voor tekstbestanden, zoals “comma-separated values” (CSV) bestanden. Python ondersteunt een aantal van die formaten via modules, waarvan ik sommige later zal bespreken. Dit hoofdstuk focust op het openen, lezen, schrijven, en sluiten van willekeurige bestanden, ongeacht het formaat.
Titel | Voortgang groep | Status | |||
---|---|---|---|---|---|
Inleiding | |||||
Platte tekstbestanden | |||||
Lezen van tekstbestanden | |||||
Schrijven in tekstbestanden | |||||
Toevoegen aan tekstbestanden | |||||
os.path methodes | |||||
Encoding | |||||
Wat je geleerd hebt | |||||
Woorden tellen | |||||
Woorden tellen | |||||
Zonder klinkers | |||||
Gemeenschappelijke woorden | |||||
Letterfrequenties |
Soms treden runtime errors op niet omdat je een programmeerfout hebt gemaakt, maar omdat er een probleem optreedt dat je niet kon voorzien toen je het programma schreef. Dit is buitengewoon relevant als je met bestanden werkt: bijvoorbeeld, als je een bestand verwerkt dat op een USB-stick staat, en de gebruiker verwijdert de USB-stick tijdens de verwerking, krijg je uiteraard een fout die je niet echt zou kunnen voorzien in je code. Iedere runtime error genereert in de code een zogenaamde “exception” (“uitzondering”) die je kunt “afvangen.” Het afvangen van een exception betekent dat je in je programma code opneemt die ervoor zorgt dat de opgetreden fout zoveel mogelijk netjes wordt afgehandeld, in plaats van je programma abrupt af te breken.
Titel | Voortgang groep | Status | |||
---|---|---|---|---|---|
Inleiding | |||||
Errors en exceptions | |||||
Afhandelen van exceptions | |||||
Exceptions bij bestandsmanipulatie | |||||
Genereren van exceptions | |||||
Wat je geleerd hebt | |||||
Controleren |