Programming 1 - sem2 (2022–2023)
Karen Baerts · UC Leuven Limburg
Je bent niet geregistreerd voor deze cursus.
RegistrerenHet materiaal gebruikt in deze dodona cursus is grotendeels gebaseerd op de dodona cursus “De programmeursleerling” van Professor dr. Pieter Spronck. Niet alle hoofdstukken van de “Programmeursleerling” cursus werden overgenomen. Sommige onderdelen werden herschreven in functie van de specifieke leerdoelen van deze “Programming 1” cursus. Voor de meeste hoofdstukken werden ook extra oefeningen toegevoegd. Met dank aan Prof. dr. Pieter Spronck en Prof. dr. Peter Dawyndt voor het ter beschikking stellen van het materiaal.
Je zal in deze cursus computerprogramma’s leren schrijven. We gebruiken hierbij de programmeertaal Python om deze code te schrijven. Dat betekent dat je een computer nodig hebt waarop Python geïnstalleerd is. Dit hoofdstuk legt uit hoe je Python kan installeren op je computer. Een IDE (Integrated Development Environment) is een computerprogramma dat een programmeur ondersteuning geeft bij het ontwikkelen van code. In deze cursus zullen we Visual Studio Code gebruiken als IDE voor het ontwikkelen van code. In dit hoofdstuk tonen we je hoe je VSC kan installeren op je computer en hoe je vanuit VSC de oefeningen van deze Dodona cursus kan indienen.
Welkom bij het eerste echte programmeerhoofdstuk. Expressies kan je 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 | |||
---|---|---|---|---|---|
Resultaten tonen | |||||
Tekst uitschrijven | |||||
Data types | |||||
Expressies | |||||
Stijl | |||||
Wat je geleerd hebt | |||||
Boeken bestellen | |||||
Syntaxfouten | |||||
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. Hierbij moet je vaak variabelen gebruiken om waardes in op te slaan.
Titel | Voortgang groep | Status | |||
---|---|---|---|---|---|
Variabelen en waardes | |||||
Debuggen met variabelen | |||||
Verkorte operatoren | |||||
Commentaar | |||||
Wat je geleerd hebt | |||||
Gemiddelde van drie waarden | |||||
Oppervlakte van een rechthoek | |||||
Omzetting van Celsius naar Fahrenheit | |||||
Oppervlakte van een cirkel | |||||
Variabelen omwisselen | |||||
Licht werk |
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 een later
hoofdstuk ga ik bespreken hoe je je eigen functies kunt maken.
Titel | Voortgang groep | Status | |||
---|---|---|---|---|---|
Elementen van een functie | |||||
Enkele basisfuncties | |||||
Modules | |||||
Wat je geleerd hebt | |||||
Lengte van een string | |||||
Langste dorpsnaam in Europa | |||||
Stelling van Pythagoras | |||||
Minimum, maximum en gemiddelde |
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 | |||
---|---|---|---|---|---|
Boolean expressies | |||||
Conditionele statements | |||||
Vroegtijdig afbreken | |||||
Wat je geleerd hebt | |||||
Letterscores | |||||
Letterscores bis | |||||
Geslaagd of niet? | |||||
Kleinste cirkel bepalen | |||||
Meerdere if statements | |||||
Waar staat je huis? | |||||
Hondenjaren in mensenjaren | |||||
BMI + waarden | |||||
Het zwarte schaap | |||||
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 programmeerinstructies 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 | |||
---|---|---|---|---|---|
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 bis | |||||
Tafels van vermenigvuldiging tris | |||||
Grootste, kleinste en drievouden | |||||
99 bottles of beer | |||||
Rij van Fibonacci | |||||
Gemeenschappelijke karakters | |||||
Benadering van pi | |||||
Priemgetallen | |||||
Som van twee kwadraten | |||||
Vijf dobbelstenen | |||||
DCBA = 4 × ABCD | |||||
Driehoekkruipers | |||||
Veelvouden |
In een vorig hoofdstuk werd beschreven 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.
Titel | Voortgang groep | Status | |||
---|---|---|---|---|---|
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 versie 4 | |||||
Gemeenschappelijke karakters versie 2 | |||||
Grerory-Leibnitz reeks | |||||
Kwadratische vergelijkingen versie 2 | |||||
Loop-en-een-half (TODO) | |||||
Binomiaalcoëfficiënt | |||||
Wat is er fout? |
Deze evaluatie bestaat uit 4 oefeningen. We beginnen eenvoudig, en eindigen met wat meer uitdaging. Het is de bedoeling enkel de reeds behandelde syntax te gebruiken.
Je lost de oefeningen op zonder gebruik te maken van testcases in Dodona. Dit betekent dat je zelf zal moeten controleren of je code de gewenste output genereert. We zetten er geen tijdslimiet op. Het is niet nodig om je code in te dienen tegen het einde van de les.
Het is toegestaan om inspiratie te halen uit reeds gemaakte oefeningen en samenvattingen. Je haalt echter het meeste uit deze zelfevaluatie als je dit beperkt. Je wordt enkel beter in het bedenken van algoritmes wanneer je dit vaak doet. Zoek dus zelf naar de oplossing, pijnig je hersens, geef niet op!
Beschouw dit als een test om enerzijds te ervaren dat programmeren zonder Dodona je dwingt om foutboodschappen te lezen en te interpreteren, en anderzijds om voor jezelf te kunnen oordelen of je huidige niveau voldoende is.
Vraag gerust feedback aan de lectoren wanneer je klaar bent. Na de les stellen we de oefeningen via Dodona beschikbaar zodat je jouw code ook zelf kan evalueren. Laat je echter niet vangen om dit te snel te doen, doe dit pas wanneer je écht denkt dat je code klaar is!
Veel succes!
Titel | Voortgang groep | Status | |||
---|---|---|---|---|---|
C-som | |||||
Kaprekargetallen | |||||
Perfecte getallen | |||||
Bankkaart |
De hoofdstukken tot dit punt bespraken een manier van programmeren die vaak “gestructureerd programmeren” of “imperatief programmeren” genoemd wordt. Deze aanpak betreft programma’s die bestaan uit een sequentie van instructies, beslissingen, en loops. Je kunt ieder programmeerprobleem oplossen middels deze aanpak. In de laatste decennia echter zijn er andere programmeer “paradigma’s” ontwikkeld, die helpen bij het ontwerpen en implementeren van grote programma’s. Een van de meest succesvolle paradigma’s is “object oriëntatie,” en de meeste moderne programmeertalen ondersteunen dit paradigma. Python is eigenlijk een object-georiënteerde taal.
Hoewel object oriëntatie een natuurlijke manier biedt om problemen en oplossingen te bezien, is het behoorlijk lastig om een object georiënteerd programma te ontwerpen. De reden dat het lastig is, is dat je het probleem dat je onderhanden hebt moet doorgronden in al zijn aspecten, voordat je begint met programmeren. Voor de meer complexe problemen kan dit behoorlijk overweldigend zijn, zeker als je weinig ervaring hebt met programmeren. Maar voor de grotere problemen moet je zowiezo veel tijd besteden aan het analyseren van je oplossing, en de object georiënteerde aanpak kan dan behulpzaam zijn bij het creëren van die oplossing. Je zult ook ontdekken dat de meeste modules object georiënteerd zijn opgezet, en dat object oriëntatie ook nuttig kan zijn bij de aanpak van kleinere problemen.
Dit hoofdstuk bediscussieert de basis van object oriëntatie. Meer over OO zal aan bod komen in het OPO “Programming 2”.
Titel | Voortgang groep | Status | |||
---|---|---|---|---|---|
De object georiënteerde wereld | |||||
Object oriëntatie in Python | |||||
Methodes | |||||
Nesten van objecten | |||||
Wat je geleerd hebt | |||||
Kleur | |||||
Bankrekening | |||||
Verwarming | |||||
Rechthoek |
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 | |||
---|---|---|---|---|---|
Wat we al kennen uit vorige hoofdstukken over strings | |||||
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 | |||||
Autocorrectie | |||||
Caesarrotatie |
Een “list” (Engelse woord voor “lijst”) is een collectie van data items. Lijsten zijn veranderbaar. Dit maakt ze tot een zeer flexibele data structuur, waar je op veel manieren gebruik van kunt maken.
Titel | Voortgang groep | Status | |||
---|---|---|---|---|---|
Basis van lists | |||||
Lists zijn veranderbaar | |||||
Lists en operatoren | |||||
List methodes | |||||
Alias | |||||
Geneste lists | |||||
List comprehensions | |||||
List casting | |||||
Wat je geleerd hebt | |||||
Lijst even of oneven | |||||
Dubbele waardes verwijderen uit een lijst | |||||
Het raadsel van de brug | |||||
Geschud kaartspel | |||||
Faro shuffle | |||||
FIFO | |||||
Fruitmand | |||||
Demografie |
Een tuple is een ongeordende en onwijzigbare 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 | |||
---|---|---|---|---|---|
Gebruik van tuples | |||||
Tuples zijn onveranderbaar | |||||
Toepassingen van tuples | |||||
Wat je geleerd hebt | |||||
Complexe getallen optellen | |||||
Complexe getallen vermenigvuldigen | |||||
Inttuple | |||||
YIQ | |||||
Vlaggen | |||||
Schaakverslag |
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 | |||
---|---|---|---|---|---|
Basis van sets | |||||
Set methodes | |||||
Frozensets | |||||
Wat je geleerd hebt | |||||
Socrates | |||||
Deelbaar | |||||
Dubbels | |||||
Taal | |||||
Samensmelten |
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 | |||
---|---|---|---|---|---|
Platte tekstbestanden | |||||
Lezen van tekstbestanden | |||||
Schrijven in tekstbestanden | |||||
Toevoegen aan tekstbestanden | |||||
os.path methodes | |||||
Encoding | |||||
Wat je geleerd hebt | |||||
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 | |||
---|---|---|---|---|---|
Errors en exceptions | |||||
Afhandelen van exceptions | |||||
Exceptions bij bestandsmanipulatie | |||||
Genereren van exceptions | |||||
Wat je geleerd hebt | |||||
Controleren |
Recursie is een vorm van iteratie die je kunt gebruiken nu je geleerd hebt om functies te maken. Recursie kan bepaalde problemen op een elegante en krachtige manier oplossen.
Titel | Voortgang groep | Status | |||
---|---|---|---|---|---|
Wat is recursie? | |||||
Recursieve definities | |||||
Wat je geleerd hebt | |||||
Fibonaccigetallen | |||||
Fibonaccigetallen versie 2 | |||||
Grootste gemene deler | |||||
Kleine letters | |||||
Torens van Hanoi |
Op dit punt in het boek heb ik min of meer alles wat je echt moet weten om een goede Python programmeur – of misschien zelfs een goede programmeur in het algemeen – te zijn aan de orde gebracht. Ik wil nu nog snel een aantal nuttige modules naar voren brengen die geen eigen hoofdstuk nodig hebben. Ik ga niet veel details geven; als je eenmaal weet wat het nut van een module is, kun je er meer informatie over vinden in de Python handleiding.
Titel | Voortgang groep | Status | |||
---|---|---|---|---|---|
Datetime | |||||
Collections | |||||
Urllib | |||||
Glob | |||||
Wat je geleerd hebt | |||||
Counter (TODO) | |||||
Modus (TODO) |