Uploaded by thijmenmeddeler

cursus programmeren python

advertisement
Cursus programmeren in Python
Navigatie
1. Hieronder kun je op een hoofdstuk klikken. Wanneer je aan het begin van een
hoofdstuk bent kun je op de paragraaf klikken. Onder aan de pagina staat een link
om terug te keren naar de inhoudsopgave.
Inhoudsopgave Cursus
2. Aan het eind van deze cursus staat een klein naslagwerk om dingen snel op te
zoeken. Onder iedere pagina staat een link ernaartoe.
Inhoudsopgave naslagwerk
3. Verder kun je met <ctrl><F> een zoekscherm in de pdf openen om snel een
zoekterm in te kunnen voeren die je naar de juist pagina brengt.
Stappenplan fouten opsporen
2 Programmeertechnieken
Als je de fout in je programma niet kunt vinden, klik dan op bovenstaande link.
Inhoudsopgave Cursus
1
Inhoudsopgave naslagwerk
Inhoudsopgave Cursus
Les 1 1.1 Waarom Python 1.2 Werken met Python3.2 1.3 Pyscripter Portable
1.4 Zelf aan de slag
1.5 Rekenkundige operatoren 1.6 Commentaar
1.7 Regelnummers
1.8 Volgorde van bewerkingen 1.9 Printfunctie
1.10 Escapeteken \
1.11 Opgaven
Les 2 2.1 Variabelen
2.2 Variabelenamen 2.3 Integers, floats en strings
2.4 Invoer van gegevens
2.5 Plakteken
2.6 Strings omzetten naar
integers en andersom
2.7 Functies nesten
2.8 Kommanotatie 2.9 De functie
len() 2.10 Foutmeldingen oplossen
2.11 Opgaven
Les 3 3.1 Vertakkingen 3.2 Waar of niet waar
3.3 Inspringingen 3.4
Vergelijkings operatoren
3.5 Logische operatoren 3.6 If elif else 3.7 if in
if opdracht 3.8 Opgaven
Les 4 4.1 Naslagwerken 4.2 Built in functies 4.3 Printfunctie 4.4 Modules
importeren 4.5 Module random 4.6 Tekenen 4.7 Opgaven
Les 5 5.1 Lijsten 5.2 Index 5.3 Toevoegen, verwijderen en samenvoegen
5.4
Lijst in een lijst
5.5 Snel vullen, index uitlezen en lengte van de lijst bepalen
5.6 In en not in
5.7 For lus
5.8 range(start,stop,stapgrootte)
5.9
Gebruik van de index in een lus
5.10 Opgaven
Les 6 6.1 Tekenen met een for-lus
6.4 Lus in een lus 6.5 Opgaven
6.2 While lus en declareren
6.3 Eeuwige lus
Les 7 7.1 Algoritme 7.2 PSD 7.3 Structorizer 7.4 Teller, break, continue, exit
Enumerate zorgt voor teller in for lus 7.6 Opgaven
7.5
Les 8 8.1 Tuples 8.2 Dictionaries 8.3 Lezen van en schrijven in bestanden met de
with opdracht
8.4 Lezen van en schrijven in dictionairies
8.5
Opgaven
Les 9 9.1 Modulair werken met zelfgemaakte functies
database maken 9.4 Scope 9.5 Opgaven
Les 10 10.1 Error Handling 10.2 Opgaven blok 1
10.5 Breakpoints 10.6 Opgaven blok 2
9.2 Telefoonlijst
10.3 Debugging
9.3 Een
10.4 Stepping
Les 11 11.1 Object georiënteerd programmeren Encapsulation 11.2 Class
Instance Object Attribute Value 11.3 Methoden Constructor self 11.4 Documentatie
van de class 11.5 Opgaven
Les 12 12.1 Overerving (Inheritance) 12.2 Maintainable software
Inhoudsopgave Cursus
2
12.3 Opgaven
Inhoudsopgave naslagwerk
Les 1 1.1 Waarom Python 1.2 Werken met Python3.2 1.3
Pyscripter Portable
1.4 Zelf aan de slag
1.5
Rekenkundige operatoren 1.6 Commentaar
1.7 Regelnummers
1.8 Volgorde van bewerkingen
1.9 Printfunctie 1.10 Escapeteken \
1.11 Opgaven
1.1 Waarom Python
Er zijn heel veel programmeertalen. Vaak wordt de vraag gesteld: “welke taal kun je als
beste leren?” Het meest gegeven antwoord is: “dat hangt ervan wat je ermee wilt doen.
Iemand die websites bouwt is het meest gebaat bij PHP of Perl, iemand die games maakt
zal eerder Java of C++ gaan leren en iemand die veel werkt met Microsoft Office
pakketten zal meer hebben aan Visual Basic.” Een aantal docenten en professoren zegt
echter “Begin met Python”. De redenen die zij aanvoeren zijn:
 Python is veel makkelijker aan te leren dan bijvoorbeeld PHP, Java of C++.
 Met Python kun je met minder code hetzelfde bereiken als in andere talen.
 Python is een moderne taal waarmee je prima object georiënteerd kunt
programmeren.
 Python kent een eenvoudige portable editor die vanaf usb-stick draait.
 Python is open source en daardoor helemaal gratis.
 Over de hele wereld werken vrijwilligers aan de ontwikkeling van deze taal maar
ook bedrijven als Google dragen hun steentje bij.
Wanneer je eenmaal programmeren hebt geleerd in Python is de overstap naar een
andere taal vrij gemakkelijk. Alle programmeertalen lijken namelijk op elkaar. Dat het
eenvoudige taal is wil niet zeggen dat je er geen ingewikkelde dingen mee kunt
programmeren.
1.2 Werken met Python3.2
Python is een programmameertaal die nog steeds verder ontwikkeld wordt. Wij werken
met versie 3.2.
Er zijn verschillende manieren om met python te werken:
 PyscripterPortable. Dit heeft de voorkeur. Deze portable python bewerker (editor)
werkt zelfs op je usb-stick dus je kunt er ook thuis mee werken. PyscripterPortable
is een windows programma. Mac gebruikers zullen thuis een andere editor/compiler
voor Python moeten installeren. Op school is het te bereiken via het menu.
 Online editor. Daar zijn er verschillende van. Tot nu toe bieden ze echter minder
functionaliteit als offline programma’s.
1.3 Pyscripter Portable
Een portable programma is een programma dat je niet hoeft te installeren. Je kopieert het
gewoon naar je stick.
 Klik hiervoor op “Deze computer, lesmateriaal(Y), Informatica, Portable Tools”.
 Kopieer nu de map “python_portable_3211” naar je stick.
Inhoudsopgave Cursus
3
Inhoudsopgave naslagwerk
 Thuis kun je de map weer naar computer kopiëren. Maak daar een snelkoppeling
naar je bureaublad van PyScripter-Portable.exe
.
 Wanneer je deze map thuis op je stick of je computer opent klik je op PyScripterPortable.exe.
Dit is een handige editor voor python. Op school zoek je het
programma
in het menu op.
 Je krijgt nu een scherm te zien dat er uitziet als hieronder:
De editor is verdeeld in drie gedeeltes. Het gedeelte linksboven dient voor navigatie en
gebruik je het minst. In het gedeelte rechtsboven typ je de code en op de onderbalk komt
het resultaat; de output van je programmeercode of een eventuele foutmelding. Zorg dat
de onderste balk op tabblad “Python interpreter” staat.
Usb-stick vergeten
Wanneer je geen usb-stick bij je hebt, sla je de bestanden op onder "Mijn documenten" in
een map "python". Je stuurt de bestanden als bijlage van een mail aan jezelf zodat je
thuis verder kunt werken.
Mac-gebruikers
Op een Mac is python 2.7 standaard geinstalleerd. Je hebt echter versie 3 nodig. Het
volgende wat je nodig hebt is een "editor en compiler". Hierin kun je de code schrijven en
op fouten laten controleren. Op de volgende site staat uitgelegd wat je alle maal moet
Inhoudsopgave Cursus
4
Inhoudsopgave naslagwerk
doen.
http://blog.manbolo.com/2013/02/04/how-to-install-python-3-and-pydev-on-osx#4
Dan zit je alleen nog met het probleem van het overbrengen van code tussen thuis (mac)
en school (windows). Wat je zou kunnen doen is je code in een e-mail naar jezelf plakken.
Die email haal je dan op de andere locatie op. Je moet dan nog wel de tab-stops
aanpassen. Een andere mogelijkheid is om met een online editor te werken.
1.4 Zelf aan de slag
Wis in het scherm rechtsboven de onderste vier regels. Later leggen we wel uit wat je
hiermee kunt doen. In het bovenste gedeelte schrijf je achter “name”: “Les 1” en achter
“Author” “je eigen naam”. Verder blijft alles hetzelfde.
 Kies in het menu file, save en sla het bestand op als “les_1.py” in een nieuwe map
“python” op je stick. De extensie “py” wordt er vanzelf al achter gezet dus die hoef
je niet te typen. Dit doe je aan het begin van iedere nieuwe les.
 Typ nu in het gedeelte rechtsboven onder de groene letters:
print(2 + 3)
 Klik in het menu op run,run of toets <CTRL><F9> of klik op het groene pijltje in het
menu. Het programma wordt nu uitgevoerd en in de onderbalk verschijnt het getal
5. Het programma heeft drie dingen gedaan: het heeft de getallen 2 en 3 opgeteld,
de uitkomst naar het scherm geschreven en is naar de volgende regel gesprongen.
Dit laatste zie je aan de drie vishaken onder de “5”.
1.5 Rekenkundige operatoren
De plus in de vorige opdracht heet een “rekenkundige operator”. Er zijn nog meer
rekenkundige operatoren in Python 3. Hier volgt een overzicht.
+ voor optellen
– voor aftrekken
* voor vermenigvuldigen
/ voor delen
** voor machtsverheffen bijvoorbeeld 2**3 = 2*2*2 = 8
% voor modulus of modulo; dit is de rest van een deling.
Bijvoorbeeld 7%3 geeft 1 want 7 gedeeld door 3 is 2 met rest 1.
 Typ nu onder “print(2+3)” het volgende:
print(2**4)
 Run het programma met <CTRL><F9>. Als het goed is verschijnt onderaan eerst
de uitkomst van de eerste regel: 5 en daarna de uitkomst van de tweede regel: 16.
1.6 Commentaar
Wanneer je programmeert is het belangrijk dat je er voldoende commentaar tussenzet.
Dan kun jij of een ander later beter zien waar de code over gaat. Commentaarregels
Inhoudsopgave Cursus
5
Inhoudsopgave naslagwerk
worden niet uitgevoerd. In python gebruiken we hiervoor het hekje #. Ze worden ook
gebruikt om code tijdelijk uit schakelen bij het testen.
 Typ boven de eerste regel het volgende:
# Voorbeelden les 1
 Run het programma met <CTRL><F9>. Je krijgt hetzelfde als de vorige keer want
commentaarregels worden niet uitgevoerd.
Wanneer je het programma runt worden alle regels achtereenvolgens uitgevoerd.
Wanneer je wilt dat bijvoorbeeld alleen de laatste regel wordt uitgevoerd maak je van de
tweede regel een commentaarregel. Hiervoor zit in “portable python” een speciale knop in
het menu.
 Selecteer de tweede regel en klik op de knop:
 Run het programma met <CTRL><F9>. Als het goed is verschijnt nu alleen “16”.
Door de tweede regel opnieuw te selecteren en op de ## knop te drukken kun je de regel
weer actief maken. Dit is handig bij het testen van je code.
 Probeer het uit en run het programma.
1.7 Regelnummers
Wat ook handig is zijn regelnummers. Wanneer je een foutje maakt, verschijnt er een
foutmelding met daarin het regelnummer van de regel waarin de fout zit.
 Klik op de knop van regelnummers:
 Vul de bovenste commentaarregels in zoals hieronder:
Inhoudsopgave Cursus
6
Inhoudsopgave naslagwerk
1.8 Volgorde van bewerkingen
De rekenvolgorde zoals je die bij het vak rekenen hebt gehad geldt hier ook:
Haakjes gaan voor alles.
**
*, /, %
+, –
 Typ als vierde regel van je programma:
print(2+3*4)
 Schakel de tweede en de derde regel van je programma uit me ##.
 Run het programma met <CTRL><F9>. Als het goed is, is de uitkomst “14”. Eerst
wordt de vermenigvuldiging uitgevoerd daarna pas de optelling.
Wil je toch dat 2 en 4 eerst worden opgeteld, dan zul je haakjes moeten gebruiken.
 Typ als vijfde regel van je programma:
print((2+3)*4)
 Run het programma met <CTRL><F9>. Als het goed is komt er nu “20” uit. Dat is
wat anders dan in de vorige opdracht. nu wordt ere vanwege de haakjes eerst
opgeteld en daarna pas vermenigvuldigd.
Opslaan
 Klik linksboven op de diskette om het programma op te slaan. Sla het op je usbstick op in een map die “python” heet. Noem het bestand “les_1”.
 Sla iedere nieuwe les in een nieuw bestand op.
 Wanneer je het bestand eenmaal een naam gegeven hebt en één keer hebt
opgeslagen dan dan hoef je jezelf geen zorgen meer te maken over opslaan. Iedere
keer als je het bestand runt wordt het automatisch opgeslagen.
1.9 Printfunctie
De printfunctie heeft nog meer mogelijkheden. Je kunt ook tekst en allerlei tekens op het
scherm zetten.
 Typ:
print(“Dit is mijn eerste zin.”)
en test uit of het werkt. Let op de dubbele aanhalingstekens. Gebruik hiervoor de
<SHIFT> toets.
 Wanneer je de zin kopieert in plaats van typt zul je merken dat je een foutmelding
krijgt. Dit komt omdat de aanhalingstekens niet goed doorkomen. Die zul je
Inhoudsopgave Cursus
7
Inhoudsopgave naslagwerk
opnieuw moeten typen.
 Met behulp van komma’s kun je tekst en getallen afwisselen. Let op de dubbele
aanhalingstekens.
 Typ:
print("Hij bestelde",3*4,"krentenbollen.")
Als het goed is komt er : Hij bestelde 12 krentenbollen.
 Typ nu:
print("Hij bestelde",”3*4”,"krentenbollen.")
Als het goed is komt er : Hij bestelde 3*4 krentenbollen.
Onthoud dat om getallen waar je mee rekent geen aanhalingstekens komen en als het
letterlijk moet worden weergegeven wel.
1.10 Escapeteken \
Soms staan er tekens in een zin die je niet zonder meer letterlijk kunt typen. Dit zijn
bijvoorbeeld de dubbele aanhalingstekens zelf.
 Typ:
print("Hij zei: "Wat een onzin".")
Als het goed is krijg je nu een foutmelding.
 Verbeter de code tot:
print("Hij zei: \"Wat een onzin\".")
Merk op dat door de schuine strepen (backslash) de dubbele aanhalingstekens wel
geprint worden. De backslash zorgt ervoor dat ze letterlijk geprint worden en ziet ze
niet meer als onderdeel van de code maar als een stukje tekst.
De backslash wordt ook wel het escape teken genoemd. Hij wordt onder andere gebruikt
om code van hackers onschadelijk te maken. In andere programmeertalen kan het ook
een ander teken zijn dan de backslash.
 Sla een regel over.
 Typ de volgende regel:
# Opgaven les 1.
Maak nu in hetzelfde bestand de volgende opgaven. Vergeet niet om je bestand op te
slaan als je stopt. Schrijf boven iedere regel een commentaarregel met het nummer van
de opgave dus bijvoorbeeld zo:
# 1.1
1.11 Opgaven
1.1.
Maak een programmaregel die 5 tot de macht 4 uitrekent. Als het goed is komt er
Inhoudsopgave Cursus
8
Inhoudsopgave naslagwerk
1.2.
1.3.
1.4.
1.5.
1.6.
1.7.
625 uit.
Maak een programmaregel die 70 deelt door 3. Als het goed is komt er 23.333333
uit.
Maak een programmaregel die de rest van 658 gedeeld door 15 uitrekent. Als het
goed is komt er 13 uit.
Maak een programmaregel die de volgende berekening uitvoert (4+2)*6-(8-2)/(4-1).
Als het goed is komt er 34.0 uit. Als dat niet het geval is controleer dan je haakjes.
Er moeten evenveel linker als rechter haakjes zijn.
Maak een programmaregel die de volgende zin op het scherm zet: Ik begin net met
programmeren.
Iemand heeft twee keer vijf km gefietst en drie keer twee km gelopen. Maak een
programmaregel waarin deze berekeningen worden uitgevoerd en die de volgende
zin op het scherm zet: Ik heb vandaag 10 km gefietst en 6 km gelopen.
Maak een programmaregel die de volgende zin op het scherm zet: Het antwoord is
“Ja/Nee”. Zorg dat de aanhalingstekens ook geprint worden!
Maak een backup van je bestand en LAAT JE LES DOOR DE DOCENT AFTEKENEN.
Inhoudsopgave Cursus
9
Inhoudsopgave naslagwerk
Les 2 2.1 Variabelen
2.2 Variabelenamen 2.3
Integers, floats en strings
2.4 Invoer van gegevens
2.5 Plakteken
2.6 Strings omzetten naar integers
en andersom
2.7 Functies nesten
2.8 Kommanotatie
2.9 De functie len() 2.10 Foutmeldingen oplossen
2.11 Opgaven
Open Python Portable. Maak linksboven met
een nieuw bestand aan. Wis de laatste
vier regels. Sla het bestand op als “les_2” in de map “python” op je usb-stick.
2.1 Variabelen
Een variabele kun je zien als een leeg doosje waar je iedere keer wat anders in kunt
stoppen.
 Typ het volgende programmaatje:
# Voorbeelden Les 2
# variabelen
eersteGetal = 7
tweedeGetal = 8
print(eersteGetal + tweedeGetal)
 Run het programma. Als het goed is komt er 15 uit.
 Verander 7 in 2. Run het programma. Als het goed is komt er 10 uit. Je hebt 7 uit
het doosje “eersteGetal” gehaald en er 2 in gestopt.
2.2 Variabelenamen
Het is een goede gewoonte om variabelenamen te laten beginnen met een kleine letter
en ieder heel woord in de variabele naam met een hoofdletter te laten beginnen.
Bijvoorbeeld: eenZeerLangeVariabeleNaam
2.3 Integers, floats en strings
 Integers zijn gehele getallen.
 Floats zijn getallen met een zwevende punt. Ze worden ook wel “real” of “double”
genoemd. Je schrijft ze met een punt dus bijvoorbeeld 25.3
 Een string is een tekenreeks. Voorbeelden zijn koekje, jan@gmail.com, op67wr#.
Met een string kun je niet rekenen. Om een string moet je altijd aanhalingsteken
zetten.
Dit zijn slechts de drie eenvoudigste datatypen (gegevenssoorten). Er zijn er nog meer.
Inhoudsopgave Cursus
10
Inhoudsopgave naslagwerk
➢ Maak het voorgaande programmaatje inactief met de ## knop. Sla een regel over
en typ het volgende programma. Let op dat als je code kopieert van pdf naar de
editor, je de dubbele aanhalingstekens opnieuw moet typen.
# floats
x = 3.2
y = 4.1
print(x+y)
Run daarna het programma. Als het goed is komt er 7.3 uit.
➢ Probeer dit ook eens:
# foute notatie voor floats
a = 2,3
b = 3,1
print(a+b)
Nu komt er heel wat anders uit namelijk (2,3,3,1) De komma notatie wordt gebruikt voor
een ander datatype: de “lijst”.
➢ Maak het voorgaande programmaatje inactief met de ## knop. Sla een regel over
en typ het volgende programma:
# string, gebruik aanhalingstekens
huisNummer = "twee"
print(huisNummer)
print("huisNummer")
➢ Run het programma. Hieronder staat wat er uit zou moeten komen:
 twee
 huisNummer
De aanhalingstekens binnen de print opdracht zorgen ervoor dat
de tekst letterlijk wordt geprint.
2.4 Invoer van gegevens
Tot nu toe moest je alles van te voren in het programma stoppen. Je kunt het programma
echter ook om gegevens laten vragen. Dit gebeurt met de functie “input”. Op internet kom
je nog vaak de functie raw_input() tegen maar die komt uit python 2 en wordt in python 3
niet meer gebruikt.
➢ Maak de voorgaande programmaregels inactief, sla een regel over en typ het
volgende:
# Strings invoeren
je_naam = input("Noem je naam: ")
print("Jij heet " + je_naam + ".")
In dit programma wordt datgene wat ingevoerd wordt via het invoerscherm opgeslagen in
de variabele (het lege doosje) je_naam . Vervolgens wordt in de print functie de inhoud
van het doosje je_naam op het scherm gezet.
➢ Run het programma. Als het goed is komt er eerst een invulschermpje tevoorschijn:
Inhoudsopgave Cursus
11
Inhoudsopgave naslagwerk
➢ Klik met je muis in het witte gedeelte en typ bijvoorbeeld Piet . Klik daarna op OK.
Als het goed is komt nu het zinnetje “Jij heet Piet. ” op het scherm te staan.
De letterlijke tekst wordt binnen de print functie door dubbele aanhalingstekens omgeven.
Merk op dat achter het woordje “heet” en extra spatie staat. Om variabelen staan geen
aanhalingstekens. De stukjes worden aan elkaar geplakt met het plus teken.
2.5 Plakteken
Onthoud: Het plus teken + is het plakteken. Hiermee kun je strings en variabelen aan
elkaar plakken.
2.6 Strings omzetten naar integers en andersom
De functie input kan alleen maar strings inlezen. Dat is lastig als je getallen wilt inlezen die
je daarna in een berekening wilt gebruiken. De functie int() zorgt voor de omzetting van
string naar integer. Andersom zorgt de functie str() voor de omzetting van integers naar
strings. Dit heb je bijvoorbeeld nodig om bij de printfunctie integer variabelen en strings
aan elkaar te plakken.
➢ Maak de voorgaande programmaregels inactief, sla een regel over en typ het
volgende:
# Strings omzetten naar integers en andersom
a = int(input("Noem het eerste getal: "))
b = int(input("Noem het tweede getal: "))
c=a+b
print("Wanneer je " + str(a) + " en " + str(b) + " optelt krijg je " + str(c) + ".")
➢ Run het programma. Als het goed is komt er “Wanneer je 20 en 30 optelt krijg je
50.” op het scherm te staan als je de getallen 20 en 30 hebt ingevoerd.
2.7 Functies nesten
a = int(input("Noem het eerste getal: "))
In bovenstaand voorbeeld zie je dat de functie input() in de functie int() genest zit. Eerst
wordt de binnenste functie uitgevoerd, daarna pas de buitenste. In dit geval wordt er eerst
input opgehaald en daarna wordt van de string die ingevoerd is pas een integer gemaakt.
Let goed op de haakjes. Er moeten altijd evenveel haakjes naar links zijn, als naar rechts.
2.8 Kommanotatie
Voorgaande code voor de printfunctie kan een stuk korter door gebruik te maken van de
komma notatie.
Inhoudsopgave Cursus
12
Inhoudsopgave naslagwerk
➢ Maak de voorgaande programmaregels inactief, sla een regel over en typ het
volgende:
# Komma notatie
a = int(input("Noem het eerste getal: "))
b = int(input("Noem het tweede getal: "))
c = a+b
print("Wanneer je",a,"en",b,"optelt krijg je",c,".")
➢ Run het programma. Als het goed is komt er weer “Wanneer je 20 en 30 optelt krijg
je 50.” op het scherm te staan als je de getallen 20 en 30 hebt ingevoerd. Merk op
dat de komma’s ook meteen voor een spatie zorgen.
2.9 De functie len()
De functie len() telt hoeveel tekens er in een string zitten.
➢ Maak de voorgaande programmaregels inactief, sla een regel over en typ het
volgende:
# De functie len()
mijnNaam = input("Noem je naam:")
lengte = len(mijnNaam)
print(4*(mijnNaam + lengte*" "))
➢ Run het programma. Als het goed is komt er “Harm Harm Harm Harm “ te
staan als Harm de ingevoerde naam is. Omdat Harm vier letters heeft worden er
vier spaties achter gezet. Dit wordt vier keer afgedrukt. Merk op dat de operator *
dus ook toepasbaar is op strings.
2.10 Foutmeldingen oplossen
Mogelijk heb je bij de voorbeelden alt foutmeldingen gekregen door tikfouten op kopieer en
plakfouten.
1. In de foutmelding staat altijd het regelnummer. Meestal bevindt de fout zich in de
regel zelf of de regel erboven.
2. Wanneer in de foutmelding Engelse woorden voorkomen die je niet kent haal je die
door de vertaalmachine.
3. Wanneer in de foutmelding iets van string of integer voorkomt is het meestal een
notatiefout.
4. Wanneer in de foutmelding “indent” voorkomt dan heeft het met inspringende code
te maken. Python dwingt je alles netjes te noteren.
5. Bij kopiëren en plakken kunnen de aanhalingstekens soms niet goed doorkomen.
 Sla een regel over.
Inhoudsopgave Cursus
13
Inhoudsopgave naslagwerk
 Typ in de volgende regel:
# Opgaven les 2.
Maak nu in hetzelfde bestand de volgende opgaven. Vergeet niet om je bestand op te
slaan als je stopt. Schrijf boven iedere regel een commentaarregel met het nummer van
de opgave dus bijvoorbeeld zo:
# 2.1
2.11 Opgaven
2.1.
2.2.
2.3.
2.4.
2.5.
Schrijf een programma dat de gebruiker zijn of haar naam laat invoeren. Vervolgens
moet de naam uitgeprint worden in een zin.”Als er “Pietje”wordt ingevoerd moet er:
Mijn naam is Pietje. komen te staan. Let op de punt aan het einde van de zin.
Schrijf een programma van vier regels dat om twee getallen vraagt, eerst om het
ene en daarna om het andere. De getallen moeten vermenigvuldigd worden. De
uitkomst van de vermenigvuldiging moet geprint worden in het zinnetje: Wanneer
je .. en .. vermenigvuldigd komt er .. uit. Op de plaats van de puntjes komen dan de
ingevoerde getallen en de uitkomst. Hou invoer, berekening en uitvoer gescheiden.
Schrijf een programma van drie regels dat naar een getal vraagt. Het programma
telt 3 bij dat getal op. Daarna vermenigvuldigt het programma het resultaat met 2,
trekt er 4 vanaf, trekt er twee keer het oorspronkelijke getal vanaf, voegt 3 toe en
print het zinnetje: “De uitkomst is ...” met op de plaats van de puntjes de
verrassende uitkomst van de som. Hou invoer, berekening en uitvoer gescheiden.
Voer het programma een paar keer uit. Test of er altijd 5 uitkomt.
Schrijf een programma van twee regels dat om een dier vraagt. Vervolgens moet dit
woord 2000 keer geprint worden steeds gescheiden door een spatie. Tip: bekijk het
laatste voorbeeld.
Schrijf een programma dat de gebruiker vraagt naar zijn of haar favoriete kleur.
Zorg dat de volgende output op het scherm verschijnt als de kleur rood wordt
gebruikt. Tussen de woorden bevindt zich slechts één spatie. Gebruik vier
printregels.Tip: bekijk het laatste voorbeeld nog eens.
Sla je bestand op.
Maak een backup van je bestand.
LAAT JE LES DOOR DE DOCENT AFTEKENEN.
Inhoudsopgave Cursus
14
Inhoudsopgave naslagwerk
Les 3 3.1 Vertakkingen 3.2 Waar of niet waar
3.3
Inspringingen 3.4 Vergelijkings operatoren
3.5
Logische operatoren 3.6 If elif else 3.7 if in if opdracht
3.8 Opgaven
Open Python Portable. Maak linksboven met
een nieuw bestand aan. Wis de laatste
vier regels. Sla het bestand op als “les_3” in de map “python” op je usb-stick.
3.1 Vertakkingen
Het gebeurt in een computerprogramma nog wel eens dat afhankelijk van de ingevoerde
gegevens of de uitkomst van een vorige berekening, dat het programma verschillende
dingen kan doen. Het programma vertakt zich dan als het ware.
3.2 Waar of niet waar
Het volgende programma vraagt de gebruiker om zijn voornaam.
 Typ en run:
# Voorbeelden les 3
# Vertakkingen
voornaam = input("Noem je voornaam: ")
if voornaam:
print("Dank je wel.")
else:
print("Je bent vergeten om iets in te vullen.")
De regel “if voornaam” betekent: “Bestaat de variabele voornaam.”
Als er iets ingevuld is dan is het antwoord op deze vraag “Ja”. De bewering is dan waar
(engels: true).
Is er niets ingevuld dan is het antwoord op deze vraag “Nee” en is de bewering niet waar
(engels: false).
Het “else” gedeelte mag je weglaten als er niets hoeft te gebeuren als niet aan de
voorwaarde is voldaan.
Let op de dubbele punt achter if en else.
3.3 Inspringingen
Let op!!! De inspringingen (indentation) zijn in Python verplicht. Python dwingt je als het
ware tot het netjes opschrijven van code. Als in de foutmelding het woordje “indent” (=
inspringing) voorkomt dan weet je dat hiermee iets is fout gegaan.
3.4 Vergelijkings operatoren
Operator voorbeeld
Inhoudsopgave Cursus
Omschrijving
15
Inhoudsopgave naslagwerk
A == B
A != B
A>B
A<B
A >= B
A <= B
Waar als A gelijk is aan B
Waar als A niet gelijk is aan B.
Waar als A groter is dan B
Waar als A kleiner is dan B.
Waar als A groter of gelijk aan B is.
Waar als A kleiner of gelijk aan B is.
Verschil python 2 en 3: in python 2 mocht je in plaats van != ook <> gebruiken. In python 3
mag dit niet meer.
In if elif else opdrachten worden vaak logische operatoren gebruikt. Deze kijken of een
bewering waar of niet waar is.
Let op dat als twee dingen aan elkaar gelijk moeten zijn het dubbele == teken wordt
gebruikt.
3.5 Logische operatoren
Deze worden ook wel booleaanse operatoren genoemd.
Operator
Omschrijving
Effect
Voorbeeld
A and B
en
Waar als A en B beiden waar zijn. Niet waar in alle andere
gevallen.
A or B
of
Waar als of A of B of beiden waar zijn. Niet waar als A en B
beiden niet waar zijn.
not B
Ontkenning
Waar als B niet waar is.
Het volgende programma controleert of twee wachtwoorden aan elkaar gelijk zijn:
 Typ, run en probeer alle mogelijkheden uit:
# wachtwoorden
wachtwoord1 = input("Voer een wachtwoord in:")
wachtwoord2 = input("Voer het wachtwoord nogmaals in:")
if wachtwoord1 == wachtwoord2:
print("De wachtwoorden zijn aan elkaar gelijk.")
else:
print("De wachtwoorden zijn niet aan elkaar gelijk")
Het volgende programma print een boodschap uit als beide ingevoerde getallen groter dan
5 zijn. Als dat niet het geval is, gebeurt er niets.
 Typ, run en probeer alle mogelijkheden uit:
# aan beide voorwaarden is voldaan
a = int(input("Noem een getal onder de 10:"))
b = int(input("Noem een ander getal onder de 10:"))
if a > 5 and b > 5:
print("Beide getallen zijn groter dan 5.")
Het volgende programma print een boodschap uit als één of meer ingevoerde getallen
groter dan 5 zijn. Verder wordt de optelsom van beide getallen geprint. Als dat niet het
Inhoudsopgave Cursus
16
Inhoudsopgave naslagwerk
geval is, gebeurt er niets.
 Typ, run en probeer alle mogelijkheden uit. De tabs zul je opnieuw in moet stellen.
# aan één van de voorwaarden is voldaan
a = int(input("Noem een getal onder de 10:"))
b = int(input("Noem een ander getal onder de 10:"))
if a > 5 or b > 5:
c = a+b
print("Eén of meer getallen zijn groter dan 5.")
print(c)
#not operator
voornaam = input("Noem je voornaam: ")
if not voornaam:
print("Je bent vergeten om iets in te vullen.")
else:
print("Dank je wel.")
3.6 If elif else
Het komt vaak voor dat er meer dan twee mogelijkheden zijn. Dan breid je de if else
opdracht uit tot if elif else. Er mogen zoveel elif regels tussen staan als je maar wilt. In het
volgende programma zijn er vier categorieën van getallen. Merk verder op dat in de ifopdracht er meer dan één logische operator wordt gebruikt. elif en else mogen ook
weggelaten worden als er geen opdracht hoeft te worden uitgevoerd.
 Typ en run:
# Prijzen
prijs = int(input("Kies een geheel getal onder de tien voor je prijs:"))
if prijs == 1 or prijs == 4 or prijs == 9:
print("Je hebt een cadeaubon gewonnen.")
elif prijs == 2:
print("Je hebt een reis naar Ameland gewonnen.")
elif prijs == 7:
print("Je hebt een auto gewonnen.")
else:
print("Je hebt helaas geen prijs.")
3.7 if in if opdracht
Het is ook mogelijk om binnen een if opdracht een andere if opdracht te nesten. Op dat
moment worden de inspringen erg belangrijk zodat je weet wat bij wat hoort. In
onderstaand voorbeeld wordt aan mensen die “Piet” heten en ouder dan twaalf jaar zijn
een extra vraag gesteld.
 Typ, run en probeer alle mogelijkheden uit. Wanneer je kopieert en plakt moet je de
aanhalingstekens en de inspringingen opnieuw doen.
Inhoudsopgave Cursus
17
Inhoudsopgave naslagwerk
# If in een if opdracht
voornaam = input("Wat is je voornaam:")
if voornaam == "Piet":
leeftijd = int(input("Wat is je leeftijd:"))
if leeftijd > 12:
achternaam = input("Wat is je achternaam:")
print("Jij heet", voornaam, achternaam,"en je bent",leeftijd,"jaar.")
else:
print("Je hebt niet de leeftijd die we zoeken.")
else:
print("Je bent niet degene die we zoeken.")
Testen
Als de code lijkt te werken moet je allerlei invoergegevens uitproberen om te kijken of
iedere vertakking van het programma werd. Goed testen is net zo belangrijk als goed
coderen.
 Sla het bestand op.
 Sla een regel over.
 Typ in de volgende regel:
# Opgaven les 3.
Maak nu in hetzelfde bestand de volgende opgaven. Vergeet niet om je bestand op te
slaan als je stopt. Schrijf boven iedere regel een commentaarregel met het nummer van
de opgave dus bijvoorbeeld zo:
# 3.1
3.8 Opgaven
3.1 Hou je van Python?
Maak een programma dat vraagt “Hou je van Python?”. Als het antwoord “Ja” is moet er
“Dat is goed nieuws.” op het scherm komen. Als het antwoord “Nee” is moet er “Dat is
slecht nieuws.” op het scherm komen. In alle andere gevallen moet er “Dat is geen
antwoord op mijn vraag.” op het scherm komen.
3.2 Not code
Schrijf een programma dat de gebruiker vraagt om een code te noemen. Als er geen code
wordt ingevuld moet het antwoord: “ Je hebt niets ingevuld.“ geprint worden. Gebruik
hiervoor verplicht de not operator. Als er wel een code is ingevoerd moet er “ Je code was:
...” worden geprint met op de plaats van de puntjes de code.
3.3 Beide kleuren
Schrijf een programma dat twee keer om een kleur vraagt. Alleen als er de eerste keer
rood geantwoord wordt en de tweede keer blauw komt er een mededeling “Dat zijn de
juiste kleuren.” In alle andere gevallen moet de mededeling komen: “Dat zijn niet de juiste
kleuren.”
3.4 Even of oneven
Inhoudsopgave Cursus
18
Inhoudsopgave naslagwerk
Schrijf een programma waarbij de gebruiker een getal moet invoeren. Het programma
moet vervolgens bepalen of het getal even of oneven is en daarvan melding maken. Tip:
Gebruik de modulus operator (zie les_1). Bedenk wat de rest is als je een even of een
oneven getal deelt door twee.
3.5 Zwart of wit
Schrijf een programma dat de gebruiker vraagt om een kleur. Wanneer de kleur “zwart” of
“wit” is moet de melding komen “De kleur was zwart of wit.” Wanneer het een andere kleur
is die begint met een letter na “d” in het alfabet moet de melding komen: “De kleur begint
met een letter na “d” in het alfabet.” In de andere gevallen hoeft er niets te gebeuren.
Gebruik logische operatoren. Let op dat de aanhalingstekens om “d” letterlijk
weergegeven moeten worden. Tip: de groter dan operator werkt ook voor letters.
3.6 Geschikt of ongeschikt
Schrijf een programma dat test of iemand geschikt is voor de Landmacht. De eerste vraag
die de gebruiker moet beantwoorden luidt: “Wat is je leeftijd? Alleen als je minstens 17 jaar
bent krijg je vraag twee anders krijg je de melding: “Je bent ongeschikt”. Vraag twee luidt:
“Wat is je lengte in cm?” Alleen als je minimaal 155 cm bent krijg je de derde vraag anders
krijg je de melding “Je bent ongeschikt”. Vraag 3 luidt “Heb je de Nederlandse
nationaliteit?” Als het antwoord “Ja” of “ja” is krijg je de melding “Je bent geschikt”. Bij ieder
ander antwoord krijg je de melding “Je bent ongeschikt.” Test alle mogelijkheden.
Sla je bestand op.
Maak een backup van je bestand.
LAAT JE LES DOOR DE DOCENT AFTEKENEN.
Inhoudsopgave Cursus
19
Inhoudsopgave naslagwerk
Les 4 4.1 Naslagwerken 4.2 Built in functies 4.3 Printfunctie
4.4 Modules importeren 4.5 Module random 4.6 Tekenen
4.7 Opgaven
Open Python Portable. Maak linksboven met
een nieuw bestand aan. Wis de laatste
vier regels. Sla het bestand op als “les_4” in de map “python” op je usb-stick.
Python 3 kent een groot aantal ingebouwde functies. Dat aantal kun je nog uitbreiden door
bepaalde bibliotheken te importeren. In deze les leer je vooral hoe je dingen zelf kunt
opzoeken.
4.1 Naslagwerken
 De officiële documentatie voor Python 3 staat op: https://docs.python.org/3.2/
➔ Wanneer je hier op "Library Reference" klikt en kun je bij alle built in
functies komen.
➔ Via Global Module Index kun je bij een heleboel modules komen.
➔ Dezelfde documentatie is te bereiken via het menu “Help”, “Python
manuals”.
4.2 Built in functies
Je zoekt bijvoorbeeld een functie over afronden. Hier volgt een stappenplan:
➢ De functienamen zijn Engelstalig dus je moet eerst het Engelse woord vinden. Je
vult het woord "afronden" in bij een vertaalsite. Dan vindt je het Engelse woord
ervoor namelijk “round”.
➢ Typ in bij de zoekmachine “python3 round”.
➢ Meestal komen de volgende twee sites bovendrijven:
https://docs.python.org/3.3/library/functions.html
Dit is de officiële documentatie van Python waarin precies uitgelegd wordt wat de
functie inhoud en wat hij doet. Klik op round(). Je vindt:
round(number[, ndigits])
Return the floating point value number rounded to ndigits digits after the decimal
point. If ndigits is omitted, it defaults to zero.
Uitleg in het Nederlands:
number kan hier een getal zijn of een variabele die een getal bevat.
Het gedeelte tussen de rechte haken is niet verplicht maar als je het wel gebruikt is
dit het aantal cijfers achter de komma. Als je het weglaat rond hij af op nul
decimalen.
http://www.tutorialspoint.com/python/number_round.htm
Even naar beneden scrollen en je vindt wat voorbeeldcode over de functie round().
Wees erop bedacht dat deze voorbeelden in de Python 2 notatie staan. Een
belangrijk verschil is de notatie van de printfunctie. In python 2 bevat deze geen
haakjes, in Python 3 die wij gebruiken echter wel. In de documentatie Python 2 en
Python 3 na het einde van deze cursus vindt je de belangrijkste verschillen.
Inhoudsopgave Cursus
20
Inhoudsopgave naslagwerk
 Typ en run:
# Voorbeeld 1 Afronden
getal = float(input("Voer een getal in met vijf cijfers achter de punt:"))
afgerond = round(getal,1) # Rond af op 1 cijfer achter de punt.
print(getal, afgerond)
4.3 Printfunctie
Een belangrijke functie is de functie print() . In de documentatie vind je:
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
Deze functie kan dingen wegschrijven.
Binnen de haakjes vind je een aantal parameters: objects, sep, end, file en flush.
 *objects Door haakjes gescheiden kunnen dit meerdere variabelen, strings,
integers, en andere gegevenstypen zijn. Voorbeeld:
a=3
print(a,"voet",24)
geeft: 3 voet 24
 sep komt van separator = scheidingsteken; dit is standaard de spatie.
Voorbeeld: print(2,3,4,sep='|') geeft 2|3|4
 end is wat er na de opdracht moet gebeuren. Standaard staat deze op \n wat
nieuwe regel betekent.
 file is het bestand waar hij naar schrijft. Dit is standdaard “sys.stdout”; alles wat
hierin komt gaat naar het scherm. Je kan echter ook naar bijvoorbeeld voorbeeld.txt
schrijven.
 flush Wanneer je byte voor byte iets naar een bestand wegschrijft kost dat veel tijd.
Dit gebeurd bij Flush=true. Om de performance te verbeteren worden de gegevens
vaak in een tijdelijke buffer weggeschreven. Pas als er voldoende gegevens zijn
wordt het in één keer als één groot blok weggeschreven naar het bestand. Dit
verbetert de performance. Standaard wordt bij de print functie pas iets echt
weggeschreven bij een nieuwe regel. Dit gebeurt bij Flush=false. Flush=true
gebruik je eigenlijk alleen in situaties waarbij je zeker wilt zijn dat het
weggeschreven is voordat je verder gaat. Normaal gesproken is dit niet nodig.
4.4 Modules importeren
Naast de built in functies kent Python een heleboel modules van functies die je kunt
importeren. Dit doe je met de opdracht import. Voorbeelden van modules zijn:
 NumPy en SciPy die vol zitten met wiskundige functies
 Pygame voor het maken van 2d-games in Python
 Pyglet voor 3d animatie en games
 random voor willekeurige getallen
 turtle voor tekenen
De bovenste drie zijn niet meegeleverd met pyscripter portable maar zijn wel gratis van het
internet te halen. De onderste twee wel.
In paragraaf 4.1 staat hoe je functies kunt vinden in deze modules.
Inhoudsopgave Cursus
21
Inhoudsopgave naslagwerk
4.5 Module random
Random getallen
Random getallen zijn willekeurig gegenereerde getallen. Python kent hier verschillende
functies voor. De functies bevinden zich in de module “random”. Wil je een random functie
kunnen gebruiken dan moet je eerst de module aanroepen. Dit doe je met “import”. Het
volgende programma genereert gehele getallen van 20 tot en met 30.
 Typ en run het programma minimaal 5 keer. Je zult zien dat er steeds een
willekeurig getal tussen 20 en 30 op het scherm komt.
# Voorbeeld 2 Random getallen
import random
a = random.randint(20,30)
print(a)
Merk op dat je de naam van de module voor de naam van de functie moet plakken.
4.6 Tekenen
Om in Pyscripter Portable te kunnen tekenen moeten we eerst een instelling aanpassen.
Module Turtle
1. Ga in het menu naar "Run, Python Engine" en kies dan Remote(Tk). De standaard
instellling is “Remote”. De module Turtle die we gaan gebruiken heeft echter
“Remote(Tk)” nodig.
Alle turtle opdrachten zijn te vinden op: https://docs.python.org/3.2/ Kies daarna voor
Global Module Index en dan turtle. Je kunt ook in het menu klikken op Help, Python
manuals, modules, turtle.
Turtle betekent schildpad. We gaan nu een rechthoekje tekenen. In het programma is de
schildpad een soort pijltje.
2. Typ en run:
#Voorbeeld 3 Rechthoek
import turtle #We mogen gebruik maken van de functies uit de turtle module
venster = turtle.Screen() # maakt een grafisch venster
jorah = turtle.Turtle() # maakt een schildpad genaamd jorah
jorah.forward(100) # Er onstaat een lijntje van 100 pixels lang
jorah.left(90) # jorah draait 90 graden naar links
jorah.forward(50)
jorah.left(90)
jorah.forward(100)
jorah.left(90)
jorah.forward(50)
jorah.left(90)
venster.exitonclick() # Sluit het venster af als je er op klikt
Inhoudsopgave Cursus
22
Inhoudsopgave naslagwerk
3. Maak alle voorgaande code inactief met ##.
4. Typ # Opgaven les 4
5. Typ #4.1
4.7 Opgaven
4.1 Grootste getal
Maak een programma dat vier keer om een geheel getal vraagt. Vervolgens moet het
programma het grootste getal bepalen. Gebruik hiervoor een slimme “built in” functie. Zoek
deze zelf (zie 4.1) op want we hebben hem nog niet eerder gebruikt. Test je programma
met diverse getallen. Probeer met name het rijtje 1,2,9,42.
4.2 Raden
Schrijf een programma waarbij een random getal van 1 tot en met 3 gegenereerd wordt.
Laat dit getal printen. Laat daarna de gebruiker een getal onder de 4 raden. Als het getal
geraden wordt moet er “Goed geraden!” op het scherm komen. Als het fout is moet er
“Fout” op het scherm komen te staan. Tip: zorg dat bij het testen het random getal geprint
wordt.
4.3 Driehoek
Teken met de module Turtle een rode driehoek met een blauwe rand. Hak het probleem in
drie stukken:
1 Driehoek tekenen Tip kopieer de code uit het voorbeeld en vermaak deze.
2 Blauwe rand Tip Zoek in de module turtle naar een functie voor kleur.
3 Driehoek is gevuld met rode kleur. Tip Zoek in de module turtle op, hoe je dit moet doen.
4.4 Kies je richting
Teken met de module een lijn. Daarna moet het programma vragen “Welke kant wil je
op?”.
Als de gebruiker “rechts” antwoordt moet er een lijn naar rechts worden getekend.
Als de gebruiker “links” antwoordt moet er een lijn naar links worden getekend.
Als de gebruiker iets anders antwoordt moet er een lijn rechtdoor worden getekend.
Tekening bij antwoord “rechts”.
Sla je bestand op.
Maak een backup van je bestand.
LAAT JE LES DOOR DE DOCENT AFTEKENEN.
Inhoudsopgave Cursus
23
Inhoudsopgave naslagwerk
Les 5 5.1 Lijsten 5.2 Index 5.3 Toevoegen,
verwijderen en samenvoegen
5.4 Lijst in een lijst
5.5 Snel vullen, index uitlezen en lengte van de lijst
bepalen
5.6 In en not in
5.7 For lus
5.8
range(start,stop,stapgrootte)
5.9 Gebruik van de
index in een lus
5.10 Opgaven
Open Python Portable. Maak linksboven met
een nieuw bestand aan. Wis de laatste
vier regels. Sla het bestand op als “les_5” in de map “python” op je usb-stick.
Naast strings, integers en floats kent python nog een paar belangrijke datatypen. In deze
les introduceren we “lijsten”.
5.1 Lijsten
Een variabele is een leeg doosje waar je precies één ding in kunt doen. Een lijst kun je
vergelijken met een leeg doosje met meer vakjes. Je definieert ze door rechte haken te
gebruiken.
 Typ en run:
# Voorbeeld 1 lijsten
eenLegeLijst = []
eenAndereLijst = [1,2,3]
print (eenAndereLijst)
5.2 Index
De inhoud van de lijst kunnen we bereiken met behulp van een zogenaamde index. Deze
geeft de positie in de lijst aan. Het eerste element van de lijst heeft index 0, het tweede 1
enzovoort.
 Typ en run:
# Voorbeeld 2 index
eenLijst = [5,66,"zon",'maan','ster']
print(eenLijst)
# print de hele lijst
print(eenLijst[0])
# print index 0, dat is 5
print(eenLijst[2])
# print index 2, dat is zon
print(eenLijst[-1]) # bij een negatieve index wordt vanaf achteren geteld
Wanneer je de inhoud van de lijst wilt veranderen gebruik je de index.
 Typ en run:
# Voorbeeld 3 lijst aanpassen
getalLijst = [14,16,18]
print(getalLijst)
Inhoudsopgave Cursus
24
Inhoudsopgave naslagwerk
getalLijst[2] = 32
print(getalLijst)
Als het goed is print hij als laatste regel: [14, 16, 32]
5.3 Toevoegen, verwijderen en samenvoegen
Met de functie append() kun je iets aan een lijst toevoegen.
 Typ en run:
# Voorbeeld 4 Iets aan een lijst toevoegen
lijst = [7,8,9]
lijst.append(13)
print(lijst)
Als het goed is print hij als laatste regel: [7, 8, 9, 13]
Met het commando del kun je iets uit een lijst verwijderen.
 Typ en run:
# Voorbeeld 5 Iets uit een lijst verwijderen
lijst3 = [5,6,7,8]
del lijst3[2]
print(lijst3)
Als het goed is print hij als laatste regel: [5, 6, 8]
Met het + teken kun je twee lijsten samenvoegen.
 Typ en run:
# voorbeeld 6 Twee lijsten samenvoegen
lijst4 = [11,12,13]
lijst5 = [28,33,45,67]
nieuweLijst = lijst4 + lijst5
print(nieuweLijst)
Als het goed is print hij als laatste regel: [11, 12, 13, 28, 33, 45, 67]
5.4 Lijst in een lijst
 Typ en run:
# Voorbeeld 7 Lijst in een lijst
lijst1 = [38,40,42]
lijst2 = [3]
lijst2.append(lijst1)
print(lijst2)
Als het goed is print hij als laatste regel: [3, [38, 40, 42]]
Het eerste element van de lijst is 3 maar het tweede element is zelf ook weer een lijst.
Inhoudsopgave Cursus
25
Inhoudsopgave naslagwerk
Door een dubbele index te gebruiken kunnen we elementen uit zo'n lijst in een lijst
ophalen.
 Voeg de volgende regel toe aan de vorige code en run:
print(lijst2 [1][2])
Als het goed is print hij als laatste regel: 42
De eerste index 1 geeft aan dat het om het tweede element gaat immers de telling begint
bij nul. De tweede index 2 geeft aan dat het om het derde element van dit tweede element
gaat.
Het nesten van lijsten in lijsten is bijzonder nuttig. Je kunt er bijvoorbeeld een adresboek
mee maken. Voorbeeld:
adresboek = [ [ “Karel”,”Jansen”, “4302KK”, “Lutjebroek”], [“Hans”, “Worst”, “2211QQ”,
“Bommerdam”, ….........]
5.5 Snel vullen, index uitlezen en lengte van de lijst bepalen
Een lijst snel vullen met dezelfde elementen gaat met behulp van het
vermenigvuldigingsteken *. Dit heb je bijvoorbeeld nodig als alle elementen in een lijst een
bepaalde beginwaarde moeten hebben.
 Typ en run:
# Voorbeeld 8 Een lijst snel vullen
nulLijst = [6]*10
print(nulLijst)
Als het goed is print hij als laatste regel: [6, 6, 6, 6, 6, 6, 6, 6, 6, 6]
De index van een bepaald element in een lijst vinden gaat met de index() functie.
 Typ en run:
# Voorbeeld 9 De index van een element vinden
print([3,5,7,9].index(5))
Als het goed is komt hier 1 uit want het element 5 bevindt zich op positie 1.
Om de lengte van een lijst te bepalen gebruiken we de functie len().
 Typ en run:
# Voorbeeld 10 De lengte van een lijst bepalen
langLijst = [1,2,5,6,6,8,9]
print(len(langLijst))
Als het goed is komt hier 7 uit.
5.6 In en not in
In een eerdere les ben je al vergelijkingsoperatoren tegen gekomen zoals ==, != en >. Hier
volgen er nog twee die je vaak nodig hebt:
Inhoudsopgave Cursus
26
Inhoudsopgave naslagwerk
Operator
A IN B
A NOT IN B
Omschrijving
Waar als A behoort tot de verzameling B
Waar als A niet behoort tot de verzameling B
Met het volgende programma kun je testen of de kleur die gebruiker invoert behoort tot
een verzameling van kleuren.

Typ en run:
# Voorbeeld 11 IN operator
keuze = input("Noem een kleur:")
if keuze in ("geel","rood"):
print(“Goed geraden.”)
5.7 For lus
Lussen in een programma worden ook wel iteraties of herhalingen genoemd. De twee
belangrijkste zijn de while-lus en de for-lus. De for lus wordt veel gebruikt om een
bepaalde reeks af te lopen. De while lus gebruik je als er een voorwaarde gesteld moet
worden om de lus te laten stoppen.
Met het volgende opdrachten kun je een reeks uitprinten die in een variabele of lijst zit.
Probeer het maar uit.
Typ en run:
# Voorbeeld 12 For-lus
for x in 'Python':
print ('Dit is de letter: ' + x)
De for lus loopt hier alle tekens van het woord 'Python' af en print ze regel voor regel uit.

Typ en run:
# Voorbeeld 13 For-lus en lijst
fruitlijst = ['banaan', 'appel', 'mango']
for fruit in fruitlijst:
print ('We hebben een : ' + fruit)
De for lus loopt hier een hele lijst af en print de inhoud van die lijst regel voor regel uit.

5.8 range(start,stop,stapgrootte)
In combinatie met een for-lus wordt de functie range veel gebruikt. Het volgende
programma print het getal 26, dan drie minder dus 23, dan 20 enzovoort totdat de teller
gelijk aan 14 wordt. Dan springt hij uit de lus en stopt het programma.

Typ en run:
# Voorbeeld 14 range
for teller in range(26,14,-3):
print(teller)
Inhoudsopgave Cursus
27
Inhoudsopgave naslagwerk
Opdrachten:
5.9 Gebruik van de index in een lus
In het volgende programma wordt gebruik gemaakt van de index. Let op dat de eerste
index altijd 0 is. Dus index = 0 hoort bij 'banaan'. De len() functie is hier gebruikt om de
lengte van de lijst te bepalen. Voor onderstaand voorbeeld is de lengte van de lijst dus 3.
Zo gauw de index 3 wordt stopt de for lus.

Typ en run:
# Voorbeeld 15 Gebruik van de index
fruitlijst = ['banaan', 'appel', 'mango']
for index in range(len(fruitlijst)):
print ('Dit soort fruit heet: ' + fruitlijst[index])



Maak alle voorgaande code inactief met ##.
Typ # Opgaven les 5
Typ #5.1
5.10 Opgaven
5.1
5.2
5.3
5.4
5.5
5.6
5.7
Maak een lijst met daarin vier dieren. Zorg dat de hele lijst wordt geprint.
Maak een programma waarin een lijst met drie kleuren wordt gedefinieerd.
Vervolgens moet er op het scherm de vraag komen om nog een kleur te noemen.
Deze moet worden toegevoegd aan de lijst. Tenslotte moet de lijst met de vier
kleuren worden geprint.
Maak een lijst met letters en een andere lijst met getallen. Voeg de twee lijsten
samen tot één. Print de nieuwe lijst uit.
Maak een lijst van de getallen 1,2, 3 en 4. Haal m.b.v. een index het derde getal
eruit en laat dit printen.
Maak de volgende lijst mijnLijst = [22,33,44, [5,6,7,8,9]] en haal met behulp van
een dubbele index het getal 9 eruit. .Print daarna de hele lijst nogmaals uit. Als je
het goed gedaan hebt wordt het getal 9 niet geprint omdat je het hebt verwijderd.
Schrijf een programma met een for-lus dat de getallen 100, 130, 160, ….. en zo
steeds dertig meer, onder elkaar weergeeft. Het laatste getal moet iets kleiner dan
10000 zijn.
Maak een programma dat een lege lijst definieert. Zorg vervolgens met een for lus
er voor dat de lijst gevuld wordt met 2, 9, 16 …. en zo steeds zeven erbij. Het
laatste getal moet iets kleiner dan 1000 zijn. Print vervolgens het getal met index
77. Als je het goed gedaan hebt komt hier 541 uit.
Inhoudsopgave Cursus
28
Inhoudsopgave naslagwerk
Les 6 6.1 Tekenen met een for-lus 6.2 While lus en
declareren 6.3 Eeuwige lus 6.4 Lus in een lus
6.5 Opgaven
6.1 Tekenen met een for-lus
We gaan een vierkant op een slimme manier tekenen. In plaats van vier keer dezelfde
twee regels te typen maken we een lus die vier keer herhaald wordt.
1. Typ en run
#Voorbeeld 1 Vierkant
import turtle
venster = turtle.Screen()
lola = turtle.Turtle()
for i in range(4):
lola.forward(100)
lola.left(90)
venster.exitonclick()
Let op dat je de twee onderste regels één Tab (=toets op toetsenbord) inspringing geeft.
De ingesprongen regels worden vier keer uitgevoerd.
Maak de vorige code inactief met ## en sluit het tekenvenster af door er op te klikken.
2. Typ en run:
#Voorbeeld 2 Ster
import turtle
ster = turtle.Pen()
for i in range(3):
ster.forward(200)
ster.right(150)
Je krijgt nu bovenstaande zandloper. De lus wordt nu drie keer uitgevoerd.
3. Pas het getal 3 nu zo aan dat er onderstaande ster ontstaat.
Inhoudsopgave Cursus
29
Inhoudsopgave naslagwerk
4. Maak alle bovenstaande code inactief en sluit het tekenvenster af door er op te
klikken..
5. Typ en run onderstaande code:
#Voorbeeld 3 Spiraal
import turtle
venster = turtle.Screen()
spiraal = turtle.Turtle()
for i in range(40):
spiraal.forward(i*5)
spiraal.right(144)
venster.exitonclick()
In dit programmaatje is 144 de hoek waarover gedraaid wordt. Het eerste lijnstuk is 10 x 1
= 10 pixels lang. i wordt echter steeds eentje opgehoogd. Het tweede lijnstuk is dus 10 x 2
is 20 pixels lang enzovoort. Je krijgt de figuur hieronder:
6.2 While lus en declareren
Een while lus is een ander type lus. Je kunt er meer mee maar hij is iets lastiger in
gebruik.
Het volgende programma laat de gebruiker een getal onder de tien raden net zolang tot de
gebruiker het raadt.

Typ, run en test dit programma:
# Voorbeeld 4 While lus
import random
getal = random.randint(1,9)
print(getal)
raad = 0
while raad != getal:
raad = int(input("Noem een getal onder de 10"))
print("Goed geraden")
➔ De derde regel gebruikt de functie randint waarbij je een geheel getal kiest dat
minimaal 1 en maximaal 9 is.
➔ De regel print(getal) is voor testdoeleinden zodat je niet eindeloos hoeft te raden.
➔ De regel raad = 0 is nodig omdat anders het programma de variabele “raad” niet
Inhoudsopgave Cursus
30
Inhoudsopgave naslagwerk
kent bij het begin van de while lus. Dit heet een variabele declareren.
➔ De regel while raad != getal: betekent: Zolang de variabele “raad” niet gelijk is aan
de variable “getal”.
➔ In de regel daaronder staat de opdracht die uitgevoerd wordt zolang het getal niet
geraden is.
➔ Zo gauw het getal geraden is springt het programma uit de lus en voert de laatste
regel van het programma uit.
6.3 Eeuwige lus
Bij lussen bestaat altijd het gevaar dat je in een zogenaamde eeuwige lus terecht komt.
Het programma blijft dan maar doorgaan en stopt niet uit zichzelf. De oorzaak is dat aan
de voorwaarde waardoor de lus stopt nooit wordt voldaan.
De oplossing is om de applicatie waarin het programma draait af te sluiten. In windows
doe je dit door op <CTR><ALT><DEL> te drukken. Hierdoor kun je taakbeheer openen en
bij tabblad “toepassingen” het programma afsluiten.
Typ, run en gebruik taakbeheer of klik op het kruisje van het programma om het af
te sluiten:
# Voorbeeld 5 Eeuwige lus
a = 10
while a != 6:
a=a+1
print(a)
In het programma hierboven blijft a altijd ongelijk aan 6 en zal de lus dus door blijven
gaan.

6.4 Lus in een lus
Wanneer de opdrachten wat ingewikkelder worden moet een programmeur al gauw zijn
toevlucht nemen tot een lus in een lus.
Het volgende programma berekent alle veelvouden van 12 die tevens veelvoud van 15 zijn
tussen 0 en 500. Je ziet dat in de binnenste lus ook nog een if opdracht zit. Let op de
inspringingen.

Typ en run:
# Voorbeeld 6 Een lus in een lus
for a in range(0,500,12):
for b in range(0,500,15):
if a == b and a != 0:
print(a)
Als je foutmeldingen krijgt met “indentation” staan de inspringingen niet goed. Dit gebeurt
vooral als je kopieert en plakt.



Maak alle voorgaande code inactief met ##.
Typ # Opgaven les 6
Typ #6.1
Inhoudsopgave Cursus
31
Inhoudsopgave naslagwerk
6.5 Opgaven
6.1.
Maak een programma dat onderstaande doolhof maakt.
6.2.
Maak een programma dat onderstaande figuur tekent.
6.3.
Maak een programma dat onderstaande figuur tekent. Gebruik hierbij een lus in een
lus.
6.4.
De Nederlandse kroonprinses heet Amalia. Maak een programma met een while-lus
dat de gebruiker om de naam van de kroonprinses vraagt. De gebruiker mag net zo
lang raden tot hij/zij het goed heeft. Als het goed geraden is moet de mededeling
komen “Dat is goed.”
Maak een variant van het programma uit de vorige vraag. Deze keer wordt “amalia”
met kleine letters ook goed gerekend. Tip: gebruik een andere
vergelijkingsoperator.
6.5.
Inhoudsopgave Cursus
32
Inhoudsopgave naslagwerk
Les 7 7.1 Algoritme 7.2 PSD 7.3 Structorizer 7.4 Teller, break,
continue, exit 7.5 Enumerate zorgt voor teller in for lus
7.6 Opgaven
Nu de programmeeropdrachten wat lastiger worden is het zaak om de problemen
systematisch aan te pakken.
7.1 Algoritme
Een algoritme is een stappenplan om een probleem op te lossen. Het algoritme om van
een computerprogramma te maken ziet er als volgt uit:
1.
2.
3.
4.
5.
6.
Probleemstelling
Analyse
Schematische oplossing
Het maken van de broncode (sourcecode)
Compileren
Testen
In fase 1, de probleemstelling schrijf je precies op wat je wil dat het programma kan. Bij de
opgaven tot nu toe was dit al gedaan maar het kan in de toekomst voorkomen dat jij dit
samen met je opdrachtgever moet vaststellen.
In fase 2, de analysefase probeer je door denkwerk het probleem op te splitsen in
deelproblemen.
In fase 3 teken je een stroomschema (flowchart) van het softwareprogramma Hierbij wordt
veel gebruik gemaakt van programmastructuur-diagrammen, afkorting PSD, ook wel
Nassi-Shneiderman Diagram (NSD) genoemd. Hierdoor visualiseer je het probleem
waardoor het makkelijker is op te lossen. Hieronder staat een voorbeeld.
Schrijf: Wat is je LEEFTIJD?
Lees: LEEFTIJD
LEEFTIJD < 15
Ja
Nee
Schrijf: Zolang
LEEFTIJD >0
Schrijf: Je bent oud.
Schrijf: LEEFTIJD
LEEFTIJD = LEEFTIJD -1
Inhoudsopgave Cursus
33
Inhoudsopgave naslagwerk
Schrijf: Zoveel jaar kun je nog aftellen.
In fase 4 typ je de code.
Fase 5, het compileren, is het omzetten van de broncode naar machinetaal. Machinetaal
bestaat alleen maar uit enen nullen. Dit gebeurt wanneer je in de editor van Python op
“Run” klikt. Wanneer de code niet goed is, krijg je een foutmelding en moet je terug naar
fase 4.
In fase 6, de testfase geef je allerlei invoer en kijkt of het programma doet wat het moet
doen. Als dat niet het geval is moet je vaak terug naar fase 3, de schematische oplossing.
Er zit dan een fout in het ontwerp.
7.2 PSD
Programmastructuur-diagrammen PSD's zijn programmeertaal onafhankelijk. Er zijn geen
strenge taalregels. Het doel is het oplossen van het probleem. De lay-out is erg simpel.
PSD's bestaan uit:
 Rechthoeken
 Driehoeken
 Tekst
Je kunt een PSD maken met de tekstopties in je tekst verwerker maar er zijn ook speciale
programma’s voor.
Een PSD kent slechts drie basisstructuren:
 Sequentie = opeenvolging van handelingen. In het vorige plaatje zie je dat bij de
eerste twee regels.
 Selectie = keuze. Hier moet het programma kiezen tussen handelingen. In het
plaatje kun je deze structuur herkennen aan de driehoek. Wanneer er meer dan
twee keuze mogelijkheden zijn mag de driehoek ook als hieronder getekend
worden:
 Iteratie = herhaling van handelingen. Dit is in het plaatje het gedeelte met de Lvorm. In het grote vak staat de voorwaarde. Als deze vooraf is begint de
voorwaarde met “Zolang”, als deze achteraf is, is de L-vorm gespiegeld en begint
de voorwaarde met “Totdat”. Deze structuur komt vanaf les 6 aan bod.
Informatica
Ga achter de
computer zitten
Wat is je favoriete vak?
Wiskunde
Pak een
rekenmachine
Inhoudsopgave Cursus
Anders
Biologie
Ga het bos in
34
Ga een boek
lezen
Inhoudsopgave naslagwerk
7.3 Structorizer
Structorizer is een portable programma waarmee je PSD’s vrij snel kunt maken en die
bovendien je PSD kan omzetten naar code voor verschillende programmeertalen. Op deze
site staat een uitgebreidere uitleg: https://sites.google.com/site/structorizer/home Er
bestaat ook een onlineversie van dit programma. Nog meer informatie vind je in de
userguide die je bij dit programma hebt gekregen.
Hieronder ga je aan de hand van drie voorbeelden kennismaken met dit programma.
Voorbeeld 1 Drievoud:
Bedenk een programma dat vraagt om een getal. Vervolgens moet de computer het getal
met 3 vermenigvuldigen en daarna de uitkomst printen. Dit is een sequentie; een
opeenvolging van opdrachten.
1. Open het portable programma Structorizer.
2. Klik op het gele vlakje.
3. Typ in het venster dat dan verschijnt met hoofdletters de naam van het programma
dat we gaan maken. Noem het programma “DRIEVOUD”.
4. Klik daarna op OK.
Inhoudsopgave Cursus
35
Inhoudsopgave naslagwerk
5. Klik op het gele vakje linksboven totdat de icoontjes erboven zichtbaar worden.
6. Klik op het meest linkse icoontje van “Add new instruction”.
7. In het venster wat dan verschijnt typ je INPUT "Noem een getal" a. Je moet altijd
INPUT schrijven doen als het programma de gebruiker om gegevens vraagt.
8. Klik daarna op OK.
9. Klik weer op “Add new instruction”.
10. Typ hierin b <- a*3 en klik op OK. Het < – teken wordt omgezet in een pijltje.
11. Klik weer op “Add new instruction”.
12. Typ OUTPUT b Je moet altijd OUTPUT typen voor een print opdracht. Klik daarna
op OK. Het programma ziet er nu uit zoals hierboven.
13. Kies nu in het menu “Debug, Executer” en klik op het pijltje om het programma te
runnen.
14. Kies in het menu “file, save” en sla het bestand op in de map van “python, les_7”.
Het wordt opgeslagen als met de extensie .nsd. Als je later wat wilt veranderen of je
wilt dit diagram gebruiken als basis voor een nieuw diagram dan heb je dit bestand
nodig.
15. Kies in het menu “file, export, picture, pdf” en sla het bestand op in de map van
“python, les_7”.
16. Kies in het menu “file, export, code, python” en sla het bestand op in de map van
“python, les_7”. Je ziet hier dat je het programma ook naar andere
programmeertalen kunt vertalen.
17. Open het bestand in je python editor en run het. Je merkt dat het programma nog
niet precies doet wat het moet doen.
18. Verbeter het programma totdat het juist werkt.
Voorbeeld 2 Getallen vergelijken
Bedenk een programma dat vraagt om twee getallen. Wanneer het eerste getal groter is
moet de computer “De eerste was groter” printen. Wanneer het tweede getal groter is
moet de computer “De tweede was groter.” printen en als ze gelijk zijn moet de computer
printen: “Ze waren even groot.” Dit is een selectie; een keuze.
19. Maak in Structorizer een nieuw bestand aan en noem dit “GETALLEN
Inhoudsopgave Cursus
36
Inhoudsopgave naslagwerk
VERGELIJKEN”.
20. Maak een INPUT opdracht voor het eerste getal.
21. Maak een INPUT opdracht voor het tweede getal.
22. Kies nu inbovenin voor het tweede icoontje van links: de IF opdracht.
23. Noteer (a>b) zoals hierboven in het venster wat dan verschijnt en klik op OK. Het
volgende plaatje verschijnt:
24. De T is van True (waar) en de F van False ( niet waar). Omdat structorizer geen
“elif” kent klikken we op het vakje onder False en kiezen weer voor de IF opdracht.
Noteer in deze opdracht (a<b) en klik op OK. Je krijgt dan het volgende te zien.
25. Voer nu in de drie vakjes eronder de drie OUTPUT opdrachten in zoals ze in de
opdracht omschreven staan. Uiteindelijk krijg je het volgende Programma Structuur
Diagram (PSD).
Inhoudsopgave Cursus
37
Inhoudsopgave naslagwerk
26. Test nu het programma via “Debug, Executer” voor de drie verschillende situaties.
27. Sla het programma op als .nsd Nassi-Shneiderman Diagram zodat je het eventueel
later kunt gebruiken voor andere opdrachten.
28. Exporteer het als pdf.
29. Exporteer het als code naar Python.
30. Test het programma voor de drie verschillende situaties in de Python editor. Je bruik
met name de getallen 21 en 9. Je zult zien dat het dan mis gaat. Verbeter het
programma en test net zo lang tot het programma goed werkt.
Voorbeeld 3 Getal raden
In dit voorbeeld gaan we een iteratie zien oftewel een herhaling oftewel een lus. Laat de
computer een een willekeurig geheel positief getal onder de tien genereren. Voor
testdoeleinden moet dit getal op het scherm komen. Laat de gebruiker het getal raden net
zo lang tot het goed is. Als dat het geval is moet er op het scherm komen “Goed geraden”.
31. Maak in Structorizer een nieuw bestand aan en noem dit “GETAL RADEN”.
32. Je moet nu de random functie van structorizer weten. Open de user guide met F1.
Zoek in de pdf (CTRL F) op “random”.
33. Maak de opdracht waarmee de computer een willekeurig getal onder de tien kiest.
34. Test via “Debug, Executor” of je notatie goed is. Kijk anders nog eens naar
voorbeeld 1.
35. Maak de opdracht waarmee dit getal naar het scherm wordt geschreven.
36. Maak de opdracht voor de WHILE lus. Dit is het vijfde icoontje. Het symbool voor
“niet gelijk aan” kun je vinden op dezelfde pagina van de help als waar je zojuist
was. je kunt ook gewoon proberen want Structorizor ondersteunt de meest
gebruikte symbolen uit de diverse programmeertalen. Klik daarna op OK.
37. Maak vervolgens in de WHILE lus de opdracht om de gebruiker het getal te laten
raden en klik op OK.
38. Als het getal geraden wordt springt het programma uit de WHILE lus naar de eerst
volgende regel. Maak hier de opdracht om “Goed geraden” naar het scherm te
schrijven. Pas op dat deze opdracht niet in de WHILE lus staat. Klik op OK.
Uiteindelijk moet het er als volgt uitzien:
Inhoudsopgave Cursus
38
Inhoudsopgave naslagwerk
39. Test nu het programma via “Debug, Executer”..
40. Sla het programma op als Nassi-Shneiderman Diagram zodat je het eventueel later
kunt gebruiken voor andere opdrachten.
41. Exporteer het als pdf.
42. Exporteer het als code naar Python.
43. Test het programma in je Python editor. Daarbij zul je o.a. op zoek moeten naar de
juiste notatie voor de random functie. Klik daarvoor onder aan de pagina op
“Inhoudsopgave naslagwerk”, kies voor “Documenten” en gebruik de link voor de
officiële documentatie van Python3. Bij Global Module Index moet je opzoek naar
de random module. Hoe je module moet importeren heb je eerder gehad. daarna
moet je nog twee problemen oplossen.
7.4 Teller, break, continue, exit
In deze paragraaf leer je wat opdrachten die je kunt gebruiken bij lussen.
Teller Hiermee kun je bijhouden hoever je in een lus zit.
Break Hiermee spring je uit een lus of if opdracht en ga je verder met de eerst volgende
opdracht na de lus of if opdracht.
Continue Hiermee maak je de huidige lusdoorgang niet af maar spring je gelijk door naar
het begin van de lus om te beginnen met de volgende lusdoorgang.
Exit Hiermee stop je het programma.
Voorbeeld 4 Minilandjes
In het volgende programma is het de bedoeling de vijf kleinste landen van Europa te
raden. Het raden gaat net zolang door tot ze alle vijf geraden zijn. Iedere keer als er een
land geraden wordt, dan wordt dit naar het scherm geschreven behalve de derde keer. de
PSD in structorizer ziet er als volgt uit:
➢ land is een lijst met daarin de goede antwoorden. Let op: in structorizer is dit met
accolades.
➢ t is een teller die bijhoudt hoeveel goede antwoorden er zijn gegeven. Hij wordt in
het begin op nul gezet. Bij een while lus is dit nodig.
➢ al_gehad is een lijst waarin de reeds gegeven goede antwoorden worden
opgeslagen. In het begin worden er nep antwoorden in gestopt.
Inhoudsopgave Cursus
39
Inhoudsopgave naslagwerk
➢ while t < 5: De teller t houdt bij hoeveel goede antwoorden er gegeven zijn.
Verderop zie je t←t+1. Dan is er net een goed antwoord gegeven en gaat de teller
eentje omhoog. De while lus wordt dus vaker dan vijf keer doorlopen want bij een
fout antwoord gaat de teller niet omhoog. Als t = 5 springt het programma uit de lus
naar de laatste regel.
➢ for i ← 0 to 4 Deze for lus bevindt zich binnen de while lus. In deze lus wordt
gecontroleerd of een goed antwoord niet al eerder is gegeven en wordt de
al_gehad() lijst gevuld met goed gegeven antwoorden. Na ieder goed antwoord
gaat er OUTPUT naar het scherm behalve de derde keer. In Structorizer wordt de 4
meegerekend als lusdoorgang.
➢ leave zorgt ervoor dat uit de for-lus wordt gesprongen. In de meeste talen heet dit
“break”. Het programma blijft echter wel in de while-lus. De buitenlus gaat door
totdat de teller t = 5 is geworden. Dan zijn alle goede antwoorden gegeven.
Inhoudsopgave Cursus
40
Inhoudsopgave naslagwerk
Wanneer je dit omzet naar code blijkt dat “leave” automatisch is omgezet naar “break”. Er
staat wel een foutmelding achter maar die is vals. Verder moeten er twee puntjes
verbeterd worden. Bij de laatste if in de PSD stond geen actie. Dat mag in Python niet en
dan gebruik je dus continue. Verder wordt in de random-functie van python de rechter
grens niet meegenomen dus de 4 in de for-lus wordt een 5. Hier kom je alleen maar achter
als je alles goed test. TESTEN IS BELANGRIJK!!
7.5 Enumerate zorgt voor teller in for lus
In een for lus mis je soms een teller. Met de enumerate() functie kun je die maken. Hij
voegt een teller toe aan iedere element uit de lijst waarop je de for lus laat werken.
Wanneer je de for lus laat printen kun je op die manier regelnummer creëren. Probeer de
volgende voorbeelden uit en sla het bestand op als “les_7” in de map “les_7”.
Voorbeeld 5 enumerate
meubel = {'kast', 'tafel', 'stoel'}
for teller, item in enumerate(meubel):
print(teller, item)
Voorbeeld 6 Teller bij een ander getal laten beginnen
meubel = {'kast', 'tafel', 'stoel'}
for teller, item in enumerate(meubel,30):
print(teller, item)
7.6 Opgaven
7.1
Maak een PSD voor een programma “SELECTIE” dat eerst vraagt naar je
Inhoudsopgave Cursus
41
Inhoudsopgave naslagwerk
7.2
7.3
7.4
7.5
leeftijd. Als je ouder dan 18 jaar bent antwoord het programma met
“Afgewezen”. Als je jonger dan 18 jaar bent vraagt het programma op welk
geheel uur ga je meestal naar bed. Als dit groter dan 10 is, antwoord het
programma met “Te laat”. In het andere geval zegt het programma “Je bent
aangenomen”. Sla het bestand op in de map van “Python, les 7”.
Zet de PSD om naar code en zorg dat het werkt. Sla het bestand op in de map
van “Python, les 7”.
Maak een PSD voor een programma “EINSTEIN” dat vraagt naar de voornaam
van de beroemde wetenschapper Einstein. Als het antwoord “Albert” of “albert”
is moet het programma antwoorden met “Prima”. Als het antwoord anders is
moet het programma de vraag opnieuw stellen.
Zet de PSD om naar code en zorg dat het werkt. Sla het bestand op in de map
van “Python, les 7”.
Maak een programma “GEEN_APPEL” dat begint met een lijst van zeven
vruchten. Zorg dat “appel” twee keer in de lijst staat. Daarna moet de lijst
ingelezen worden en alle vruchten onder elkaar printen behalve “appel”
ongeacht waar deze in de lijst staat. Tip: Gebruik een for-lus. Zie les 5. Kies je
voorwaarde verplicht zo dat je de opdracht “continue” nodig hebt. Je hoeft
geen PSD te maken. Appel mag niet uit de lijst gewist worden. Een voorbeeld
van de output staat hieronder:
Inhoudsopgave Cursus
42
Inhoudsopgave naslagwerk
Les 8 8.1 Tuples 8.2 Dictionaries 8.3 Lezen van en
schrijven in bestanden met de with opdracht
8.4
Lezen van en schrijven in dictionairies
8.5 Opgaven
Maak een leeg bestand “les_8” en sla het op in de map “python, les_8”.
8.1 Tuples
Tuples lijken heel veel op lijsten. Ze hebben bijvoorbeeld ook een index. Het grote verschil
is dat als ze eenmaal gemaakt zijn, ze niet meer veranderd kunnen worden. je kunt ze
alleen nog maar verwijderen. Tuples maak je met gewone haakjes ( ).
 Typ en run:
# Voorbeeld 1 Tuple maken
eenTuple = (2,4,6,8)
print(eenTuple[1])
eenTuple[2] = 7
Het element “4” wordt nog wel afgedrukt maar je krijgt een foutmelding op de derde regel
omdat je een tuple niet kunt veranderen. Je kunt uit een tuple wel een andere tuple
maken. Dit gaat als volgt:
 Typ en run:
# Voorbeeld 2 Een nieuwe tuple maken uit een andere tuple
tup1 = (1,2,3)
tup2 = tup1 + (4,) # de komma maakt er een tuple van anders is het een
integer
print (tup2)
Je kunt geen tuples en integers optellen, wel tuples en tuples.
8.2 Dictionaries
Dictionaries (woordenboeken) worden ook wel hashes genoemd. Ze hebben veel gemeen
met lijsten. Het grote verschil is dat de indices niet 0,1,2 enzovoort heten maar dat je de
indices zelf een naam mag geven. De index wordt daarom een key (sleutel) genoemd.
Woordenboeken maak je met accolades { }.
 Typ en run:
# Voorbeeld 3 woordenboek met daarin lijsten als elementen
adresBoek = {
'Henk' : ['Paling', '4200UU','Lutjebroek', '0123456789'],
'Hans' : ['Worst', '1122TT', 'Dommeldam', '0687654321']
}
# 'Henk' en 'Hans' zijn hier de sleutelwoorden (keys) van de verschillende
rijen.
Inhoudsopgave Cursus
43
Inhoudsopgave naslagwerk
print (adresBoek['Henk'])
print (adresBoek['Hans'][3])
# Je kunt de indices van de lijsten een naam geven
achterNaam = 0
postCode = 1
stad = 2
tel = 3
print (adresBoek['Hans'][stad])
# Sleutelwoorden ophalen met de functie keys()
print (adresBoek.keys())
8.3 Lezen van en schrijven in bestanden met de with opdracht
In games en op websites moet vaak informatie bewaard worden die later weer gelezen
moet kunnen worden. Je game kun je bijvoorbeeld opslaan (saven). Via een website
kunnen de adresgegevens van iemand worden opgeslagen.
Opmerking: Lezen van en schrijven naar files gaat in python 3 anders dan in python 2.
With opdracht
In python 3 gebruik je hiervoor de with opdracht. Deze opdracht werkt met objecten. In de
lessen over object georiënteerd programmeren zullen we dit dieper uitleggen. Probeer de
voorbeeldcode hieronder stukje voor stukje uit. Door de code te typen in plaats van te
kopiëren laat de python editor meer mogelijkheden zien.
Voorbeeld 4: openen, (over)schrijven en afsluiten
 Typ en run:
with open('schrijfbestand_1.log', mode = "w", encoding='utf-8') as var_1:
var_1.write("test geslaagd")
# Het with statement is de manier om in python 3 naar bestanden te schrijven of ze te
lezen. Let op de dubbele punt en het woordje "as".
# Eerst wordt het bestand geopend. De mode "w" geeft aan dat als er al iets stond dit
overschreven wordt.
# Aan het object "schrijfbestand_1.log" wordt de variabele "var_1" gekoppeld.
# "var_1.write" zorgt ervoor dat er iets in "schrijfbestand_1.log" wordt geschreven.
# Wanneer de "with" opdracht klaar is wordt het bestand automatisch gesloten.
Hierdoor wordt het systeem niet onnodig belast door geopende bestanden, die op
dat moment niet gebruikt worden.
 Kijk in de map waar je het bestand "schrijfbestand_1.log" hebt opgeslagen.
 Lees dit bestand met kladblok. Als het goed is staat er “test geslaagd” in.
Voorbeeld 5: lezen
 Typ en run:
with open('schrijfbestand_1.log', encoding='utf-8') as var_1:
print(var_1.read())
Inhoudsopgave Cursus
44
Inhoudsopgave naslagwerk
# "test geslaagd" komt op het scherm. Zo lees je in python 3 dus bestanden.
Voorbeeld 6: toevoegen
 Typ en run:
with open('schrijfbestand_1.log', mode = "a", encoding='utf-8') as var_1:
var_1.write("\n" + "een nieuwe regel")
# met "a" van append voeg je regels toe.
# "\n" van newline zorgt ervoor dat wat daarna komt op een nieuwe regel komt.
Voorbeeld 7: opnieuw lezen
 Typ en run:
with open('schrijfbestand_1.log', encoding='utf-8') as var_1:
print(var_1.read())
Voorbeeld 8: Naar een bestand in een mapje schrijven
 Maak eerst een mapje "schrijfbestanden" in de map waarin dit bestand staat.
 Typ en run:
with open('schrijfbestanden/schrijfbestand_2.txt', mode = "w", encoding='utf-8') as var_2:
var_2.write("test2 geslaagd")
8.4 Lezen van en schrijven in dictionairies
Dictionary
Een dictionary (woordenboek) bestaat uit elementen die je kunt aanpassen. Ieder element
bestaat uit twee delen: een key (sleutel) en een value (waarde). Het verschil met een lijst
is dat de key de plaats van de index inneemt.
Voorbeeld:
key
voornaam
achternaam
value
Johan
Maaswolf
Op de plaats van de waarde (value) wordt steeds wat anders ingevoerd.
Voorbeeld 9: Een dictionary maken
 Typ en run:
woordenboek = {'voornaam': 'Johan', 'achternaam': 'Maaswolf'}
# voornaam en achternaam zijn sleutels (keys), Johan en Maaswolf zijn waarden
(values)
Voorbeeld 10: Een dictionary lezen en printen; roep de sleutel aan en je krijgt de
waarde:
 Typ en run:
print (woordenboek['voornaam'])
# Let op de aanhalingstekens
Voorbeeld 11: Iets uit een dictionary verwijderen
Inhoudsopgave Cursus
45
Inhoudsopgave naslagwerk
 Typ en run:
woordenboek = {'voornaam': 'Johan', 'achternaam': 'Maaswolf'}
del(woordenboek['voornaam'])
print(woordenboek)
Voorbeeld 12: Variabelen gebruiken met een dictionary
 Typ en run:
woordenboek = {} # Hier wordt de dictionary gedefineerd.
var_1 = 'voornaam'
var_2 = 'Trudy'
woordenboek[var_1] = var_2
print(woordenboek)
Voorbeeld 13: Een dictionary in een bestand schrijven met de functie items()
 Typ en run:
woordenboek = {'voornaam': 'Johan', 'achternaam': 'Maaswolf'}
with open('schrijfbestand_3.txt', mode = "a", encoding='utf-8') as bewaar:
for voornaam, achternaam in woordenboek.items():
bewaar.write(voornaam + '\n')
bewaar.write(achternaam + '\n')
Voorbeeld 14: Van een bestand een dictionary maken
 Maak een kladblok bestand genaamd "schrijfbestand_4.txt" en typ daarin het
volgende:
voornaam;Piet
achternaam;Klop
 Eindig iedere regel met een <enter> voor "nieuwe regel".
 Typ en run:
woordenboek = {}
with open('schrijfbestand_4.txt', mode = "r", encoding='utf-8') as bewaar:
for regel in bewaar:
regel = regel[:-1] # verwijdert het laatste teken; "\n"
sleutel, waarde = regel.split(";") # splitst de regel bij de puntkomma in twee variabelen
woordenboek[sleutel] = waarde
print(woordenboek)
8.5 Opgaven
8.1
8.2
8.3
8.4
Maak een tuple van zes dieren. Zorg dat het eerste dier geprint wordt.
Print met behulp van een key en een index het woordje “Worst” uit het
onderstaande adresboek.
adressBoek = {
'Henk' : ['Paling', '4200UU','Lutjebroek', '0123456789'],
'Hans' : ['Worst', '1122TT', 'Dommeldam', '0687654321']
}
Maak een programma dat de volgende tekst in het bestand “ikkanschrijven.txt”
in de map “opslagmap1” opslaat: “Het is me gelukt om tekst in een bestand te
schrijven.” Vergeet niet om die map van tevoren aan te maken in de map van
“les_8”. Controleer zelf of het gelukt is.
Maak een programma dat deze tekst kan uit het bestand kan lezen en printen.
Inhoudsopgave Cursus
46
Inhoudsopgave naslagwerk
8.5
8.6
Maak een programma dat de volgende tekst aan het bestand “ikkanschrijven.txt”
kan toevoegen op een nieuwe regel: “Het toevoegen is nu ook gelukt.”
Vervolgens moet de hele tekst gelezen worden en geprint.
Maak een programma dat vraagt om de naam van een voetbalclub in te vullen
en dat deze naam toevoegt op een nieuwe regel aan het bestand
“ikkanschrijven.txt”. Vervolgens moet de hele tekst gelezen worden en geprint.
Opdracht 8.7
 Maak een programma dat een dictionary maakt waarbij de voetbalclubs de keys zijn
en de steden waarvoor ze spelen de values. Kies zelf drie clubs met steden.
 Breid het programma uit met een regel die de hele dictionary print.
 Breid het programma uit met een regel die alleen de stad noemt die bij de eerste
club hoort.
 Breid het programma uit met een regel die de steden noemt bij de eerste twee
clubs.
 Breid het programma uit zodat het programma vraagt om een club en daarna een
stad in te vullen. Hiermee moet de dictionary worden aangevuld. Print daarna de
hele dictionary.
 Breid het programma uit zodat het vraagt welke club je wilt verwijderen. De club
wordt verwijderd en de hele dictionary wordt geprint.
Opdracht 8.8
Maak een programma dat een dictionary maakt waarbij de voetbalclubs de keys zijn en de
steden waarvoor ze spelen de values. Kies zelf drie clubs met steden.
Zorg dat het programma de dictionary wegschrijft naar een bestand “clubs.txt” in de map
“opslagmap1”. Op iedere regel moet een club en zijn stad staan gescheiden door een
komma. Controleer zelf of het goed is weggeschreven.
Opdracht 8.9 Maak een programma dat het bestand “clubs.txt” in de map “opslagmap1”
uit de vorige opgave leest, in een dictionary zet en de hele dictionary print.
Opdracht 8.10 combineert oude en nieuwe kennis
Maak een programma dat alleen de tweede regel van het bestand “clubs.txt” uit opgave
8.2 leest en de stad print die bij de tweede club hoort. Tip: het programma lijkt veel op dat
van de vorige opgave.
Opdracht 8.11 vereist wat zoekwerk op internet
Maak een programma dat het bestand “clubs.txt” in de map “opslagmap1” leest, de clubs
sorteert op alfabet, print en gesorteerd in het bestand “clubs_2.txt” in de map
“opslagmap1” wegschrijft. Tip: je hebt een sorteerfunctie nodig. Aangezien dictionairies
geen sorteerfuncties kennen moet je van de dingen die je wilt sorteren eerst een lijst
maken.
Inhoudsopgave Cursus
47
Inhoudsopgave naslagwerk
Les 9 9.1 Modulair werken met zelfgemaakte functies
9.2 Telefoonlijst 9.3 Een database maken 9.4
Scope 9.5 Opgaven
9.1 Modulair werken met zelfgemaakte functies
Wanneer een programma wat groter wordt en verschillende functies worden vaker
aangeroepen, dan is het verstandig om modulair te werken. De verschillende functies
worden gedefinieerd met “def” en worden aangeroepen vanuit het hoofdprogramma. Je
kunt zelfs het hoofdprogramma definiëren en vervolgens aanroepen met het volgende
zinnetje:
if __name__ == "__main__":
main()
Het volgende voorbeeld demonstreert de werking van een telefoonlijst. Hierbij wordt
gebruik gemaakt van een dictionary (woordenboek).
9.2 Telefoonlijst
Opdracht Om kopieer en plakfouten te voorkomen kun je onderstaand programma
“modulair.py” downloaden uit de map “startbestanden”. Sla het op in de map “les_9”.
Probeer onderstaand programma uit en zorg dat je snapt hoe het werkt. Kies eerst een
paar keer 2. Kies vervolgens 1. Kies daarna 6 en sla het bestand op als “telefoonlijst.txt” in
de map “les_9”. Probeer daarna de andere opties uit.
# Een telefoonlijst
# Eerst worden alle zelfgemaakte functies gedefinieerd. Deze worden later in het
# hoofdprogramma "main" aangeroepen.
# Pas daarna wordt het hoofdprogramma "main" gedefinieerd. Anders zouden de
# zelfgemaakte functies niet herkend worden.
# Met de opdracht if __name__ == '__main__': main() laat men het hoofdprogramma
# werken. Op deze manier is het programma ook vanuit andere programma's aan te
roepen.
def print_nummers(nummers):
print("Telefoonnummers:")
for k, v in nummers.items():
print("naam:", k, "\tnummer:", v)
print()
def toevoegen_nummer(nummers, naam, nummer):
nummers[naam] = nummer
print("Het telefoonnummer van " + naam + " is toegevoegd.")
def zoeken_nummer(nummers, naam):
if naam in nummers:
print("Het nummer van " + naam + " is " + nummers[naam])
Inhoudsopgave Cursus
48
Inhoudsopgave naslagwerk
else:
print(naam + " is niet gevonden.")
def verwijderen_nummer(nummers, naam):
if naam in nummers:
del nummers[naam]
print("Het telefoonnummer van " + naam + " is verwijderd.")
else:
print(naam," is niet gevonden.")
def ophalen_nummers(nummers, bestandsnaam):
with open(bestandsnaam, encoding='utf-8') as var_3:
for regel in var_3:
regel = regel[:-1] # verwijdert het laatste teken; "\n"
naam, nummer = regel.split(",") # splitst de regel bij de komma in twee variabelen
nummers[naam] = nummer
# dictionary "nummers" heeft als key "naam" en als value "nummer"
def bewaren_nummers(nummers, bestandsnaam):
with open(bestandsnaam, "w",encoding='utf-8') as var_4:
for k, v in nummers.items():
var_4.write(k + "," + v + "\n")
def print_menu():
print('1. Print telefoonnummers')
print('2. Voeg een telefoonnummer toe')
print('3. Verwijder een telefoonnummer')
print('4. Zoek een telefoonnummer op')
print('5. Haal telefoonnummers op')
print('6. Bewaar telefoonnummers')
print('7. Stop')
print()
def main():
telefoon_lijst = {}
keuzemenu = 0
print_menu()
while True:
keuzemenu = int(input("Typ een nummer (1-7): "))
if keuzemenu == 1:
print_nummers(telefoon_lijst)
elif keuzemenu == 2:
print("Voeg toe naam en nummer")
naam = input("naam: ")
telefoon = input("nummer: ")
toevoegen_nummer(telefoon_lijst, naam, telefoon)
elif keuzemenu == 3:
print("Verwijder naam en nummer")
naam = input("naam: ")
Inhoudsopgave Cursus
49
Inhoudsopgave naslagwerk
verwijderen_nummer(telefoon_lijst, naam)
elif keuzemenu == 4:
print("Zoek nummer")
naam = input("naam: ")
zoeken_nummer(telefoon_lijst, naam)
elif keuzemenu == 5:
bestandsnaam = input("naam van het te laden bestand met extensie: ")
ophalen_nummers(telefoon_lijst, bestandsnaam)
elif keuzemenu == 6:
bestandsnaam = input("naam van bestand met extensie dat je gaat bewaren: ")
bewaren_nummers(telefoon_lijst, bestandsnaam)
elif keuzemenu == 7:
break
else:
print_menu()
print("Tot ziens")
if __name__ == '__main__':
main()
9.3 Een database maken
Het nadeel van een dictionary is dat het maar twee velden heeft. Je kunt ook maar op één
eigenschap zoeken. Door een heleboel dictionaries in een lijst te stoppen kun je een
database maken waarbij je op alle velden kunt zoeken. Samengevat ziet dat er als volgt
uit:
lijst = [dict1,dict2, dict3,....] of lijst = [{ }, { }, { }......]
Opdracht: Sla de volgende voorbeelden op in een bestand dat je “les_9.py” noemt en
probeer alles uit.
Voorbeeld 1: Database adresboek aanmaken
adresboek = [
{"id":1,"voornaam":"Piet","tussenvoegsel":"de","achternaam":"Kok",
"woonplaats":"Rijsbergen","telefoonnr":"0644445555"
},
{"id":2,"voornaam":"Saskia","tussenvoegsel":"","achternaam":"Kok",
"woonplaats":"Hoeven","telefoonnr":"0644335555"
},
{"id":3,"voornaam":"Jan","tussenvoegsel":"de","achternaam":"Schaffelaar",
"woonplaats":"Etten-Leur","telefoonnr":"0644222555"
}
]
Voorbeeld 2: Een database printen
print(adresboek)
Inhoudsopgave Cursus
50
Inhoudsopgave naslagwerk
Voorbeeld 3 Printen van een deel van de database
for x in adresboek:
print(x["id"], x["achternaam"], x["telefoonnr"])
Voorbeeld 4 Een eigenschap verwijderen uit de database
for x in adresboek:
del x["id"]
print(adresboek)
Voorbeeld 5 Een eigenschap toevoegen aan een database
for x in adresboek:
x["postcode"]="0000AA" # Hier wordt de eigenschap postcode toegevoegd
print(adresboek)
Voorbeeld 6 Een waarde veranderen in een database
adresboek[2]["postcode"]="4900BB" # verandert de postcode van de derde persoon
print(adresboek[2])
Voorbeeld 7 Een rij verwijderen uit de database
# Dit programma kan slechts één naam tegelijk verwijderen. Als er dus twee mensen
# met dezelfde achternaam zijn verwijdert hij er maar eentje.
anaam = input("Noem de achternaam van wie je alle gegevens wilt wissen. ")
index = 0 # Dit is de index van de lijst
for x in adresboek:
if x["achternaam"] == anaam:
del adresboek[index]
break
index = index + 1
print(adresboek)
9.4 Scope
Met de scope van een variabele bedoelen we het bereik van de variabele. Dit is het gebied
waar de variabele herkent wordt. Er zijn meerdere niveaus van scope. De belangrijkste
twee zijn “Local” (plaatselijk) en “Global” (overal).
Plak onderstaande voorbeelden in “les_9” en probeer ze uit
Voorbeeld 8 Scope 1
globalVar = "Ik ben een global variabele"
def myFunction():
localVar = "Ik ben een local variabele"
print("Regel_1 " + localVar)
print("Regel_2 " + globalVar)
myFunction()
print("Regel_3 " + globalVar)
print("Regel_4 " + localVar)
Inhoudsopgave Cursus
51
Inhoudsopgave naslagwerk
Wanneer je bovenstaand voorbeeld runt krijg je de foutmelding in de onderste regel dat
“localVar” niet gedefinieerd is. Dat klopt want “localVar” is alleen bekend binnen
“myFunction()”.
In het volgende voorbeeld voegen we één regel toe aan myFunction()
Voorbeeld 9 Scope 2
globalVar = "Ik ben een global variabele"
def myFunction():
localVar = "Ik ben een local variabele"
globalVar = "Ik ben ook een local variabele"
print("Regel_1 " + localVar)
print("Regel_2 " + globalVar)
myFunction()
print("Regel_3 " + globalVar)
print("Regel_4 " + localVar)
Wanneer je dit programma runt zul je zien dat globalVar in regel 2 en 3 verschillende
waarden geeft. De globalVar uit het hoofdprogramma wordt in myFunction() niet herkent.
Binnen myFunction wordt dus een nieuwe globalVar aangemaakt. Er zijn nu dus twee
variabelen met dezelfde naam. Om variabelenamen ook buiten een functie te laten werken
moet je er het woordje global voor zetten. Zie het volgende voorbeeld.
Voorbeeld 10 Variabelen globaal maken
globalVar = "Ik ben een global variabele"
def myFunction():
global globalVar
localVar = "Ik ben een local variabele"
globalVar = "Ik ben ook een local variabele"
print("Regel_1 " + localVar)
print("Regel_2 " + globalVar)
myFunction()
print("Regel_3 " + globalVar)
print("Regel_4 " + localVar)
Nu geven regel 2 en 3 dezelfde waarden. Dit komt omdat globalVar nu binnen myFunction
wordt herkend.
9.5 Opgaven
Opdracht 9.1
Maak een programma dat het adresboek uit voorbeeld 1 bevat en dat vraagt “Noem de
achternaam van wie je het telefoonnummer wilt weten.” Vervolgens wordt er dan een lijstje
Inhoudsopgave Cursus
52
Inhoudsopgave naslagwerk
geprint van mensen met dezelfde achternaam. Sla dit programma op als
“telefoonNummerZoeken.py” in de map “les_9”
Opdracht 9.2 (Alleen voor de betere programmeurs)
Maak een programma zoals de de telefoonlijst hierboven maar dan voor het adresboek uit
voorbeeld 1 met de eigenschappen voornaam, achternaam en telefoonnummer. Sla dit
bestand op als “adresBoek.py” in de map “les_9”. De bedoeling is dat het adresboek net
als de telefoonlijst naar een .txt bestand wordt geschreven en ook uit dit .txt betand kan
worden gelezen.
Het programma moet de volgende menu keuzes hebben:
1 Print iedere achternaam met telefoonnummer.
2 Voeg de gegevens van een nieuwe persoon toe.
3 Wis gegevens van iemand wiens achternaam je kunt invoeren.
4 Zoek het telefoonnummer van iemand op.
5 Haal het adresboek uit een .txt bestand.
6 Bewaar de database in een .txt bestand.
7 Stop.
Tip: Kopieer de telefoonlijst en vermaak deze. Werk functie voor functie af en maak regels
die je nog niet gebruikt commentaarregels.
Inhoudsopgave Cursus
53
Inhoudsopgave naslagwerk
Les 10 10.1 Error Handling 10.2 Opgaven blok 1 10.3
Debugging 10.4 Stepping 10.5 Breakpoints 10.6
Opgaven blok 2
10.1 Error Handling
Error handling betekent verwerking van fouten.
Exceptions
Letterlijk vertaald: uitzonderingen. Wat is een “exception”? Meestal is het een fout.
Wanneer er een fout optreed in Python bij de uitvoering van de code wordt er een
foutmelding gegeven en niet meer dan dat. Dit heet een “unhandled exception”. Toen de
fout optrad was er geen speciale code in het programma om de fout op te merken en om
er iets mee te doen. Zolang je het programma aan het testen bent is dat niet erg maar als
het programma eenmaal in gebruik is wil je niet dat een fout hele programma laat crashen.
Oorzaken
Soms heb je te maken met fouten in de code (bugs) bijvoorbeeld een variabele die niet
gedefinieerd is. Soms echter heb je te maken met fouten waar je wel wat mee kunt,
bijvoorbeeld het openen van een bestand dat niet bestaat of het importeren van een
module die niet geïnstalleerd, of de database waarmee je contact wil leggen is niet
beschikbaar of je hebt geen recht op toegang tot de database. Verder kan de gebruiker
iets hebben ingevoerd waar het programma niets mee kan bijvoorbeeld letters in plaats
van cijfers om mee te rekenen. Dit zijn fouten waarvan je kunt verwachten dat ze wel
eens optreden. Je kunt code maken om te zorgen dat als zoiets optreedt, er op
gereageerd wordt zonder dat het hele programma meteen crashed.
Try … except en raise
Om te voorkomen dat je hele programma vervuild raakt met regels die moeten reageren
op allerlei mogelijke fouten kun je in Python gebruik maken van een try .. except blok. Dit
werkt hetzelfde als if …. then.
Voorbeeld 1
Maak een leeg bestand aan dat je “les_10” noemt. Sla het op in de map “les_10”. Probeer
het voorbeeld hieronder uit en controleer of er inderdaad een bestand “foutmelding.txt”
wordt aangemaakt als er door nul wordt gedeeld. Maak de fout nogmaals en je zult zien
dat er in het tekstbestand een regel wordt toegevoegd. Lees ook de toelichting onder het
voorbeeld.
# Voorbeeld 1 Error Handling
def f(dag):
try:
return 365/(30-int(dag))
except ZeroDivisionError:
with open('foutmelding.txt', mode ='a', encoding = 'utf-8') as logfile:
logfile.write("Het ingevoerde getal was 30 en dat mag niet want dan deel je door
nul. \n")
Inhoudsopgave Cursus
54
Inhoudsopgave naslagwerk
raise
try:
dag = input("Noem de dag van de maand: ")
print(f(dag))
except ZeroDivisionError:
print ("Je kunt niet door 0 delen. Probeer een ander getal.")
# In het programma hierboven wordt eerst de functie f gedefinieerd. De functie zelf
# staat in het gedeelte van "try".
# "return" zorgt ervoor dat de uitkomst van deze functie wordt teruggestuurd naar het
# hoofdprogramma.
# Wanneer er 30 wordt ingevoerd krijg je een deling door nul en zal Python automatisch
# een ZeroDivisionError geven. Deze wordt onderschept met "except". In plaats van dat
# de gebruiker de ZeroDivisionError te zien krijgt en het programma vastloopt wordt
# er een foutmelding naar 'foutmelding.txt' wordt geschreven.
# Het sleutelwoord "raise" zorgt ervoor dat de gebruiker het zinnetje
# "Je kunt niet door 0 delen. Probeer een ander getal." te zien krijgt.
# "raise" zorgt ervoor dat er vanuit de functie f een signaal terug wordt gezonden
# en dat de actie die bij ZerodivisionError in het hoofdprogramma staat, moet
# worden uitgevoerd.
#
# Het hoofdprogramma onderaan begint met een "try" blok waarin het eigenlijke
# programma staat. Alleen wanneer er met het "raise" sleutelwoord een ZeroDivisionError
# wordt gemeld wordt het gedeelte onder "except:" uitgevoerd.
10.2 Opgaven blok 1
Sla de volgende opgaven op in het bestand “les_10.py”
Opgave 10.1
Vermaak het programma hierboven zo dat de gebruiker na een foutmelding opnieuw een
waarde kan invoeren en het programma dus opnieuw wordt gedraaid.
Opgave 10.2
Open het programma “modulair.py” uit de map “startbestanden” en sla het op in de map
“les_10” . Wanneer je bij dit programma bij het keuzemenu iets anders dan een getal
invoert krijg je een bepaalde foutmelding.
 Gebruik “try..... except” om ervoor te zorgen dat in het bestand “foutmelding_2.txt”
de volgende tekst wordt opgeslagen: "Er is geen getal ingevoerd.”
 Gebruik “raise” om ervoor te zorgen dat de gebruiker de volgende foutmelding te
zien krijgt: "Je moet een getal invoeren."
Opgave 10.3
Soms veroorzaakt een bepaalde invoer geen standaard foutmelding maar wordt er iets
ingevoerd wat je niet wilt. In de telefoonlijst uit de vorige les wil je bijvoorbeeld dat er
alleen maar tiencijferige telefoonnummers worden ingevoerd. Vermaak het programma zo
dat er een foutmelding “Onjuiste invoer.” komt als de gebruiker wat anders invoert dan een
tiencijferig nummer, waarna de gebruiker opnieuw de gelegenheid krijgt om het nummer in
te voeren. Je mag hiervoor if else gebruiken.
Inhoudsopgave Cursus
55
Inhoudsopgave naslagwerk
10.3 Debugging
Debugging is het proces van verwijderen van fouten uit een programma. Er zijn drie
soorten fouten:
Syntax Errors
Dit zijn grammatica fouten. Je hebt dan de code niet volgens de regels opgeschreven. Als
er ook maar één syntax error in je programma zit zal het niet willen draaien.
Runtime Errors
Dit zijn fouten die ontstaan als het programma draait. Het programma draait tot de regel
met de fout en stopt dan met een foutmelding.
Semantic Errors
Dit zijn de moeilijkst oplosbare fouten. Het programma crashed niet maar het doet niet wat
het moet doen.
In Pyscripter heb je mogelijk al gemerkt dat je als je het programma runt en je komt in een
oneindige lus, dan is er geen knop om het programma te stoppen. Dat lukt dan alleen via
taakbeheer <CTRL><ALT><DEL> maar dat is op school geblokkeerd.
Het is daarom verstandig om als je programma’s aan het testen bent het programma niet
te runnen maar te debuggen. Dit gaat via het menu “Run, Debug” met sneltoets
Inhoudsopgave Cursus
56
Inhoudsopgave naslagwerk
<SHIFT><F9>. Als het programma dan in een oneindige lus komt kun je het stoppen met
“Abort Debugging”. <CTRL><ALT><F9>
Kopieer de voorbeelden die hierna komen naar het bestand “les_10” en probeer ze uit.
Denk eraan dat je Debug <SHIFT><F9> doet in plaats van “Run”. Debug het volgende
voorbeeld en stop het met “Abort Debugging”.
Voorbeeld 2
while True:
print('Klik in het run menu op Abort Debugging om deze eeuwige lus te stoppen.')
10.4 Stepping
Met “stepping” kun je stap voor stap volgen wat het programma doet. Dit kun je gebruiken
om fouten op te sporen.
Opdracht
➢ Open het programma “dragon.py” uit de map “startbestanden”.
➢ Controleer of onderin een balk met Call Stack, Variables, Watches en Breakpoints
zichtbaar is. Zo nee, maak deze zichtbaar via het menu “View, Debug Windows”.
➢ Kies in het Run menu voor “Step into”. <F7>
➢ Druk meerdere malen op <F7> en je ziet stap voor stap wat het programma doet.
➢ Zet in de onderbalk het tabblad “Variables” open. Klik nu nog een paar keer op
<F7> . Je zult zien dat dit tabblad verandert. De globale en locale variabelen
worden zichtbaar die vanuit het punt waar je nu bent, bereikbaar zijn.
➢ Na enige tijd op <F7> klikken kom je bij regel 40 bij de randint() functie. Omdat dit
Inhoudsopgave Cursus
57
Inhoudsopgave naslagwerk
een functie is van Python zelf is, is het onwaarschijnlijk dat hier een fout in zit. Dit
stuk wil je dus overslaan. Dit gaat via het menu “Run, Step over” sneltoets
<SHIFT><F8>.
➢ Als je al in de randint() functie of een def zit die wilt overslaan kies via het menu
“Run, Step out” dan gaat hij door tot de eerstvolgende regel na de functie.
➢ Met “Abort Debugging” kun je het debuggen afbreken. <CTRL><ALT><F9>
10.5 Breakpoints
Stap voor stap door het programma gaan kost veel tijd. Vaak wil je slechts een gedeelte
van het programma stap voor stap onderzoeken. Dan is het handig als je het stap voor
stap proces kunt beginnen vanaf een bepaalde regel. Hiervoor gebruik je breakpoints.
Opdracht
➢ Open het programma “dragon.py” uit de map “startbestanden”.
➢ Maak een breakpoint op regel 42 door naast het regelnummer te klikken. Er
verschijnt een rood vinkje.
➢ Debug het programma met <SHIFT><F9>. Het programma draait nu op normale
snelheid en je wordt gevraagd om een cave nummer in te voeren. Doe dit en je zult
zien dat het debug proces nu stopt op regel 42. Met <F7> kun je nu stap voor stap
verder gaan. Je kunt meerdere breakpoints maken en je kunt ze ook allemaal in
één keer wissen. Als je meerdere breakpoints hebt kun je met “Resume”
<SHIFT><F9> doorspoelen naar het volgende breakpoint.
➢ Al deze commando’s zijn ook zichtbaar als pictogrammen zoals hierboven als je de
Debug Toolbar zichtbaar maakt.
10.6 Opgaven blok 2
Opgave 10.4
➢
Schrijf een programma “GEEN VIJFVOUD” dat alle kwadraten van de getallen 1 tot
en met 25 print behalve de kwadraten van de getallen die deelbaar zijn door vijf.
Gebruik hiervoor de modulo operator.
➢
Pas op dat je geen oneindige lus maakt zodat het programma nooit stopt. Gebruik
daarom “debug” in plaats van “run”.
➢
Sla het bestand op in de map van “Python, les_10”.
➢
Tip1: Werk in kleine stappen; probeer eerst een deel van het probleem op te lossen.
➢
Tip2: Maak eerst een PSD met structorizer..
De volgende functie heb je nodig in de laatste opgave.
Inhoudsopgave Cursus
58
Inhoudsopgave naslagwerk
Random sample functie
import random
lijst = random.sample(range(1,10),4)
print(lijst)
Probeer bovenstaande code een paar keer uit. Steeds worden er vier willekeurige getallen
onder de 10 gekozen.
Opgave 10.5
➢
Schrijf een programma dat de gebruiker vraagt om een getal onder de tien te raden.
➢
Er zijn echter drie “goede” getallen.
➢
Na maximaal zes pogingen moet de volgende melding op het scherm komen: “In …
pogingen heb je … getallen goed geraden.” Op de plaats van de puntjes moeten de
juiste getallen verschijnen.
➢
Heb je in bijvoorbeeld vijf beurten al alle drie de goede getallen gevonden dan moet
het programma niet een zesde keer vragen om te raden.
➢
Gebruik de random.sample functie om de goede getallen te bepalen.
➢
Voorkomen moet worden dat als de gebruiker twee keer hetzelfde goede antwoord
invoert dit twee keer meetelt.
➢
Sla je bestand op als “ZES_POGINGEN.py” in de map “les_10”.
➢
Tip1: Om je programma te testen is het verstandig om de random gekozen getallen
te laten printen. Dan kun je beter zien in welke gevallen je programma wel of niet
werkt.
➢
Tip2: Het programma lijkt veel op voorbeeld 4 uit paragraaf 7.4 over minilandjes.
➢
Tip3: Maak eerst een PSD.
➢
Tip4: Test je programma voor allerlei mogelijkheden.
Inhoudsopgave Cursus
59
Inhoudsopgave naslagwerk
Les 11 11.1 Object georiënteerd programmeren
Encapsulation 11.2 Class Instance Object Attribute
Value 11.3 Methoden Constructor self 11.4
Documentatie van de class 11.5 Opgaven
11.1 Object georiënteerd programmeren Encapsulation
Naarmate de programma’s groter werden ontstond de behoefte om code te kunnen
hergebruiken. Een eerste stap daartoe was het modulair programmeren. Denk aan de
functies die je kunt hergebruiken. Object georiënteerd programmeren gaat nog een stap
verder. Objecten zijn verzamelingen van gegevens en functies. Deze zijn gebundeld zodat
je een object kunt doorgeven van het ene gedeelte van je programma naar het andere.
Hierdoor krijg je niet alleen toegang tot de eigenschappen van die gegevens maar ook tot
de bewerkingen die je er mee kunt doen. Dit heet encapsulation (inkapseling). Dit is de
essentie van object georiënteerd programmeren.
Als voorbeeld van inkapseling: een string object bevat niet alleen een tekenreeks maar
bevat ook de bewerkingen (methods) die op die string kunt loslaten zoals “zoeken”, “lengte
berekenen” enzovoort.
11.2 Class Instance Object Attribute Value
Maak een nieuw bestand aan en sla dat op als “les_11.py”. Kopieer daar onderstaand
voorbeeld in en run het.
#Voorbeeld 1 Class
class User:
pass
user1=User()
user1.voor_naam = "Henk"
user1.achter_naam = "Meer"
print(user1.voor_naam)
print(user1.achter_naam)
In de eerste regel class User: wordt de class gedefinieerd. De naam van de class moet
met een hoofdletter worden geschreven. De class moet minimaal één regel bevatten.
Omdat we nu niets doen met de class schrijven we in de tweede regel pass . Dit doet
verder niets. Nu is de class gedefinieerd.
Instance en Object
In de derde regel user1=User() wordt de class aangeroepen. user1 is een exemplaar
(instance) van class User. Dit heet ook wel een object.
Attribute en Value
➢ In de vierde regel user1.voor_naam = "Henk" worden gegevens toegevoegd aan
Inhoudsopgave Cursus
60
Inhoudsopgave naslagwerk
het object user1. Met behulp van een punt wordt een eigenschap (attribute)
voor_naam aan het object user1 toegevoegd. De namen van de eigenschappen
mogen niet met een hoofdletter beginnen en als ze uit twee woorden bestaan zet je
er een underscore tussen.
➢ Een class kun je dus zien als een soort sjabloon. Een ander voorbeeld is de klasse
“Auto”. Ieder exemplaar van “Auto” dat er op deze wereld is, noemen een object.
Mijn auto is dus een object van de klasse “auto”.
➢ Een object heeft eigenschappen (attributes). Mijn auto heeft bijvoorbeeld een kleur,
een bouwjaar enzovoort.
➢ Die eigenschappen hebben weer waarden (values). Mijn auto is bijvoorbeeld groen
en is gebouwd in 2017. “groen” en “2017” zijn values.
Breid de code van voorbeeld 1 uit met de volgende vier regels en voer het programma uit.
voor_naam = "Ria"
achter_naam = "Stoel"
print(voor_naam, achter_naam)
print(user1.voor_naam,user1.achter_naam)
In de eerste regel wordt een variabele voor_naam = "Ria" aangemaakt die niet
gekoppeld is aan een class. De naam van deze variabele voor_naam is echter gelijk aan
één van de eigenschappen van object user1. Toch zijn het niet dezelfde dingen zoals uitde
print opdrachten uit regel 3 en 4 blijkt. Je roept ze op verschillende manieren aan. De
naam van het object zit altijd met een punt aan de naam van de eigenschap geplakt.
Breid de code van voorbeeld 1 uit met de volgende vier regels en voer het programma uit.
user2 =User()
user2.voor_naam = "Frits"
user2.achter_naam = "Boom"
print(user2.voor_naam,user2.achter_naam)
In de eerste regel user2 =User() wordt een nieuw object aangemaakt.
Breid de code van voorbeeld 1 uit met de volgende vier regels en voer het programma uit:
user1.leeftijd = 16
user2.lengte = 180
print(user1.leeftijd)
print(user2.leeftijd)
Als je het goed gedaan hebt krijg je een foutmelding op de laatste regel omdat user 2 geen
eigenschap leeftijd heeft. Verschillende objecten van dezelfde class kunnen dus
verschillende eigenschappen hebben.
11.3 Methoden Constructor self
Maak de code van voorbeeld 1 inactief, kopieer de code van voorbeeld 2 eronder en run
deze.
Inhoudsopgave Cursus
61
Inhoudsopgave naslagwerk
# Voorbeeld 2 Methoden
class User:
def __init__(self, volledige_naam, geboortedatum):
self.naam = volledige_naam
self.geboortedatum = geboortedatum
user1 = User("Henk Meer", "20030422")
print(user1.naam)
print(user1.geboortedatum)
Constructor
In regel 2 def __init__(self, volledige_naam, leeftijd): wordt een methode aangemaakt
voor de class User. Een methode kun je zien als een bewerking die een object van die
class kan uitvoeren.
De methode __init__ is een bijzondere methode. init komt van initialize (beginnen). Hij
wordt aangeroepen iedere keer als je een nieuw object van deze class aanmaakt. Deze
methode wordt ook wel de Constructor genoemd.
self, volledige_naam, leeftijd worden de parameters (arguments) van de methode
genoemd. Dit zijn de variabelen die in de methode gebruikt worden.
self is een verwijzing naar het huidige object. In andere talen wordt hier ook wel het
woordje this voor gebruikt. Als je een object aanroept dan roept deze de methode in de
class aan met een verwijzing naar zichzelf (self). De methode gebruikt deze verwijzing om
de gegevens van het huidige object op te halen.
In regel 3 self.naam = volledige_naam wordt de waarde die de parameter
volledige_naam krijgt opgeslagen in de eigenschap naam.
In regel 4 self.leeftijd = leeftijd wordt de waarde van de parameter leeftijd opgeslagen in
de eigenschap leeftijd. Let op dat het eerste woordje leeftijd een eigenschap is maar het
tweede woordje leeftijd is een waarde.
In regel 4 user1 = User("Henk Meer", "20030422") wordt een object user1 aangemaakt.
Merk op dat er nu twee waarden moeten worden meegegeven omdat de Constructor (de
__init__ methode) dit verwacht.
Maak de code van voorbeeld 2 inactief, kopieer de code van voorbeeld 3 eronder en run
deze.
# Voorbeeld 3 Gegevens bewerking
class User:
def __init__(self, volledige_naam, geboortedatum):
self.naam = volledige_naam
self.geboortedatum = geboortedatum
naam_lijst = volledige_naam.split(" ")
self.voornaam = naam_lijst[0]
self.achternaam =naam_lijst[-1]
Inhoudsopgave Cursus
62
Inhoudsopgave naslagwerk
user1 = User("Henk Meer", "20030422")
print(user1.naam)
print(user1.voornaam)
print(user1.achternaam)
print(user1.geboortedatum)
➢ Je merkt dat ondanks dat we maar twee gegevens hebben ingevoerd we er vier
kunnen uit halen.
➢ In regel 5 naam_lijst = volledige_naam.split(" ") zorgt de split functie ervoor dat
de volledige naam wordt gesplitst in twee stukken. De splitfunctie herkent deze
stukken aan de spatie (" ") er tussen. De stukken worden opgeslagen in een lijst.
➢ In regel 6 self.voornaam = naam_lijst[0] wordt de waarde die op index 0 van de
lijst staat gekoppeld aan de eigenschap voornaam van het huidige object. (self).
➢ In regel 7 wordt met de index -1 het laatste element van de lijst bedoeld. Omdat de
lijst slechts twee elementen heeft had hier ook 1 mogen staan.
11.4 Documentatie van de class
Het is een goede gewoonte in programmeerland om je zelf gemaakte classes goed te
documenteren. Dat bespaart een hoop tijd als jij of iemand anders een jaar later de code
wil begrijpen.
Maak de code van voorbeeld 3 inactief, kopieer de code van voorbeeld 4 eronder en run
deze.
# Voorbeeld 4 Documentatie
class User:
"""Hiermee worden de gegevens opgeslagen van alle werknemers die
ooit actief zijn geweest op het netwerk."""
def __init__(self, volledige_naam, geboortedatum):
self.naam = volledige_naam
self.geboortedatum = geboortedatum
naam_lijst = volledige_naam.split(" ")
self.voornaam = naam_lijst[0]
self.achternaam =naam_lijst[-1]
help(User)
Als je een foutmelding krijgt verbeter je het. Als het goed is haalt de helpfunctie onderaan,
de informatie op, die je bovenin de class tussen driedubbele aanhalingstekens hebt gezet.
Verder kun je in de helptekst de parameters zien die de class nodig heeft.
In het volgende voorbeeld zullen we de class uitbreiden met een extra functie.
Maak de code van voorbeeld 4 inactief, kopieer de code van voorbeeld 5 eronder en run
Inhoudsopgave Cursus
63
Inhoudsopgave naslagwerk
deze.
import datetime
class User:
"""Hiermee worden de gegevens opgeslagen van alle werknemers die
ooit actief zijn geweest op het netwerk."""
def __init__(self, volledige_naam, geboortedatum):
self.naam = volledige_naam
self.geboortedatum = geboortedatum
naam_lijst = volledige_naam.split(" ")
self.voornaam = naam_lijst[0]
self.achternaam =naam_lijst[-1]
def age(self):
"""Geeft de leeftijd van de gebruiker in jaren."""
vandaag = datetime.date(2017,8,23)
yyyy = int(self.geboortedatum[0:4])
mm = int(self.geboortedatum[4:6])
dd = int(self.geboortedatum[6:8])
gd = datetime.date(yyyy,mm,dd) # geboortedatum
leeftijd_in_dagen = (vandaag-gd).days
leeftijd_in_jaren = leeftijd_in_dagen/365
return int(leeftijd_in_jaren)
def email(self):
return '{}.{}@bedrijf.com'.format(self.voornaam, self.achternaam)
def main():
user1 = User("Henk Meer", "20030422")
print(user1.age())
print(user1.email())
if __name__ == '__main__':
main()
➢ In de code hierboven is een methode “age” toegevoegd om de leeftijd van de
gebruiker te berekenen.
➢ Omdat hiervoor alleen de geboortedatum nodig is, hebben we behalve self geen
andere parameters nodig. De huidige datum is namelijk al in de code gegeven.
Daardoor krijgt iedereen dezelfde uitkomst: 14.
➢ In regel 1 import datetime wordt de datetime module geïmporteerd.
➢ Regel 3 van de age methode vandaag = datetime.date(2017,8,23) zegt dat het
vandaag 23 augustus 2017 is.
➢ Regel 4 van de age methode yyyy = int(self.geboortedatum[0:4]) haalt het jaartal
uit de geboortedatum; dit zijn de cijfers op de indices 0 tm 3.
➢ Regel 8 van de age methode leeftijd_in_dagen = (vandaag-gd).days berekent
met behulp van de methode days uit de module datetime het aantal dagen tussen
de geboortedatum en 23 augustus 2017.
➢ In de methode email(self) zien we een krachtige manier om iets netjes op het
Inhoudsopgave Cursus
64
Inhoudsopgave naslagwerk
scherm te krijgen. De acculaden {} stellen de parameters voor uit de
string.format() functie. Vergeet de punt tussen de string en de functie niet.
➢ Let op dat het hoofdprogramma main() tegen de kantlijn staat want het behoort niet
tot de class User().
➢ Merk op dat in de op één na laatste regel print(user1.age()) dat hoewel er geen
parameter tussen de haakjes staat, er wel degelijk eentje is namelijk “self”. In de
methode def age(self) moet hij wel opgeschreven worden.
➢ Voeg de volgende code aan voorbeeld 5 toe help(User) en run het programma. Als
het goed is krijg je nu ook de omschrijving van de age methode te zien. Als je een
foutmelding krijgt moet je de engine aanpassen naar “Remote(Tk)” vie het menu
“Run, Python engine”.
11.5 Opgaven
Opgave 11.1
In deze opgave gaan we een veel gemaakte fout expres maken. Verander in voorbeeld 5
age(self) in age() en bekijk wat voor een foutmelding je krijgt. Uit de regel
print(user1.age()) zou je misschien kunnen denken dat age() geen parameters
(arguments) heeft maar de methode heeft wel degelijk een parameter “self”.
Opgave 11.2
a) Zet deze opgave onder de voorbeelden in het bestand “les_11”.
b) Maak een class Werknemer met de eigenschappen voornaam, achternaam en
salaris.
c) Maak een methode volledige_naam die de voornaam en achternaam achter elkaar
plakt.
d) Maak twee werknemers aan.
e) Zorg dat de volledige naam van de tweede werknemer netjes op het scherm komt,
dus zonder aanhalingstekens, kommas of haakjes.
Opgave 11.3
a) Als opgave 11.2 gelukt is, kopieer deze dan naar opgave 11.3.
b) Zorg dat je de voornaam, achternaam en salaris van één werknemer via het scherm
kunt invoeren. Dit mag gewoon in het hoofdprogramma main()
c) Zorg dat de volledige naam van de werknemer netjes op het scherm komt, dus
zonder aanhalingstekens, kommas of haakjes.
Opgave 11.4
a) Als opgave 11.3 gelukt is, kopieer deze dan naar opgave 11.4.
b) Zorg dat je de voornaam, achternaam en salaris van meerdere werknemers via het
scherm kunt invoeren. Tip: Gebruik een lijst in een lijst.
c) Zorg dat een lijst met de volledige naam van iedere ingevoerde werknemer netjes
onder elkaar op het scherm komt, dus zonder aanhalingstekens, kommas of
haakjes.
Inhoudsopgave Cursus
65
Inhoudsopgave naslagwerk
Les 12 12.1 Overerving (Inheritance) 12.2
Maintainable software
12.3 Opgaven
12.1 Overerving (Inheritance)
Klassen kunnen subklassen hebben die de eigenschappen van hun ouders erven.
Open uit de map startbestanden het bestand les_12_start en sla dit op als “les_12.py” bij
je andere bestanden van deze cursus. Run de de code van voorbeeld 1 (zie hieronder).
# Voorbeeld 1
class Werknemer:
opslag = 1.04
def __init__(self, voornaam, achternaam, salaris):
self.voornaam = voornaam
self.achternaam = achternaam
self.salaris = salaris
def volledige_naam(self):
return '{} {}'.format(self.voornaam, self.achternaam)
def opslag_toepassen(self):
self.salaris = int(self.salaris * self.opslag)
class Programmeur(Werknemer):
opslag = 1.10
def main():
werknemer1 = Werknemer('Karel','Kleuter', 4000)
werknemer2 = Programmeur('Frida','Frats', 5000)
werknemer1.opslag_toepassen()
werknemer2.opslag_toepassen()
print(werknemer1.salaris)
print(werknemer2.salaris)
if __name__ == '__main__':
Inhoudsopgave Cursus
66
Inhoudsopgave naslagwerk
main()
In bovenstaand programma krijgt een gewone werknemer een opslag van 4% (1.04) en
een programmeur krijgt 10% (1.10).
In het hoofdprogramma wordt de methode opslag_toepassen() toegepast. Werknemer2
is een programmeur.
De klasse Programmeur(Werknemer) heeft zelf geen methode opslag_toepassen() maar
erft deze van de klasse Werknemer.
Maak de code van voorbeeld 1 inactief en run de code van voorbeeld 2 (zie
hieronder).
# Voorbeeld 2
class Werknemer:
opslag = 1.04
def __init__(self, voornaam, achternaam, salaris):
self.voornaam = voornaam
self.achternaam = achternaam
self.salaris = salaris
def volledige_naam(self):
return '{} {}'.format(self.voornaam, self.achternaam)
def opslag_toepassen(self):
self.salaris = int(self.salaris * self.opslag)
class Programmeur(Werknemer):
opslag = 1.10
def __init__(self, voornaam, achternaam, salaris, prog_taal):
super().__init__(voornaam,achternaam,salaris)
self.prog_taal = prog_taal
In de eerste gele regel is een __init__ functie gegeven waardoor bij een programmeur ook
de eigenschap programmeertaal kan worden opgegeven.
De tweede gele regel gebruikt de methode super() waarmee hij de superclass Werknemer
de eigenschappen voornaam, achternaam en salaris laat afhandelen. Op deze manier
staat er geen dubbele code in het script.
Inhoudsopgave Cursus
67
Inhoudsopgave naslagwerk
class Manager(Werknemer):
def __init__(self, voornaam, achternaam, salaris, werknemers=None):
super().__init__(voornaam,achternaam,salaris)
if werknemers is None:
self.werknemers = []
else:
self.werknemers = werknemers
In de eerste gele regel van subclass Manager staat werknemers=None. Dit is een manier
om op te schrijven dat een lijst of dictonary leeg is.
In de vierde gele regel wordt een lege lijst aangemaakt als een manager geen
werknemers managed. Als hij dat wel doet komen alleen de werknemers die door hem
gemanaged worden in de lijjst.
def voeg_toe_werkn(self,werkn):
if werkn not in self.werknemers:
self.werknemers.append(werkn)
Met de methode hierboven kunnen werknemers aan een manager worden toegevoegd.
def verwijder_werkn(self,werkn):
if werkn in self.werknemers:
self.werknemers.remove(werkn)
Met de methode hierboven kunnen werknemers van een manager worden verwijderd.
def verwijder_werkn(self,werkn):
def print_werkn(self):
for werkn in self.werknemers:
print('-->',werkn.volledige_naam())
def main():
werknemer1 = Programmeur('Karel','Kleuter', 4000, 'Python')
werknemer2 = Programmeur('Frida','Frats', 5000, 'Java')
manager1 = Manager('Menno','Mak',9000,[werknemer1])
print(werknemer2.prog_taal)
print(manager1.volledige_naam())
Inhoudsopgave Cursus
68
Inhoudsopgave naslagwerk
print(manager1.print_werkn())
manager1.voeg_toe_werkn(werknemer2)
print(manager1.print_werkn())
manager1.verwijder_werkn(werknemer1)
print(manager1.print_werkn())
if __name__ == '__main__':
main()
12.2 Maintainable software
Onder maintainable software verstaan we software die makkelijk te onderhouden en
makkelijk aanpasbaar is. Hieronder staan vuistregels om beter leesbare code te krijgen.
Vuistregels
1. Maak je eenheden in je code niet langer dan 15 regels. Zijn ze langer, splits ze dan
op.
2. Kies je namen van je variabelen en functies zo dat commentaarregels overbodig
zijn.
3. Gebruik niet meer dan 4 splitsingen per eenheid. Bij splitsingen kan het programma
meerdere richtingen op. Ze treden bijvoorbeeld of bij if, while, for, and, or.
4. Zorg dat een stukje code slechts één keer voorkomt in je programma. Gebruik
methodes of classes die je kunt aanroepen. Als er een fout in de code zit, dan staat
hij slechts op één plaats.
5. Gebruik niet meer dan 4 parameters per constructor of methode. Maak hiervoor
zonodig extra classes aan. Met meer parameters maak je makkelijk vergissingen.
6. Maak de totale hoeveelheid code zo kort mogelijk.
7. Stop geen functies in je programma die toch niet of nauwelijks gebruikt gaan
worden.
8. Gebruik waar mogelijk klassen en modules uit bestaande bibliotheken.
9. Splits zo nodig je systeem op in kleinere onafhankelijke systemen.
12.3 Opgaven
Opgave 12.1
Voeg onderaan voorbeeld 2 help(Manager) toe en run het programma. Je kunt nu zien
welke methoden en variabelen deze class erft van de superclass Werknemer.
Opgave 12.2
a) Maak een klasse “Huisdier”.
b) Geef deze klasse als documentatie:”Dit zijn de eigenschappen van de huisdieren bij
Inhoudsopgave Cursus
69
Inhoudsopgave naslagwerk
mij thuis.”
c) Definieer voor deze klasse de variabele voedselfactor en geef deze de waarde 20.
d) Ieder huisdier heeft een naam, gewicht en kleur.
e) Maak een functie die de hoeveelheid eten uitrekent dat het dier per dag krijgt in kg.
Dit gaat met de formule eten = gewicht/voedselfactor.
f) Maak een subklasse “Hond”.
g) Voor honden is de voedselfactor 10.
h) Maak twee dieren aan waarvan er eentje een hond is.
i) Print van beide dieren de kleur en de hoeveelheid eten die ze per dag moeten
hebben.
Inhoudsopgave Cursus
70
Inhoudsopgave naslagwerk
Naslagwerk Python
Inhoudsopgave naslagwerk
1 Documentatie
2 Programmeertechnieken
3 Commentaar
4 Escapeteken \
5 Variabelen
6 Gegevenssoorten
7 Operatoren
8 Vertakkingen
9 Lussen
10 Functies
11 Modules
Inhoudsopgave Cursus
71
Inhoudsopgave naslagwerk
1 Documentatie
Naslagwerken
 De officiële documentatie voor Python 3 staat op: https://docs.python.org/3.2/
➔ Wanneer je hier op "Library Reference" klikt en kun je bij alle built in
functies komen.
➔ Via Global Module Index kun je bij een heleboel modules komen.
➔ Dezelfde documentatie is te bereiken via het menu “Help”, “Python
manuals”.
 Een overzichtelijk naslagwerk staat op:
http://openbookproject.net/thinkcs/python/english3e/
 Voor wie verder wil: een uitgebreide en makkelijk leesbare cursus python staat op:
http://www.alan-g.me.uk/l2p/index.htm geschreven voor python 3.
Python 2 en Python 3
Doordat Python een vrij jonge taal is; ze is pas begin jaren 90 ontstaan, verandert ze nog
voortdurend. De laatste belangrijke overstap was van Python 2 naar Python 3. Omdat er
nog veel code op het internet te vinden is die in Python 2 geschreven is, doe je er goed
aan de verschillen te bestuderen. Een samenvatting hiervan vind je op:
http://www.cmi.ac.in/~madhavan/courses/prog2-2012/docs/diveintopython3/porting-codeto-python-3-with-2to3.html
De code die in python 2 is gemaakt is niet op eens waardeloos geworden maar kan vrij
gemakkelijk omgezet worden.
2 Programmeertechnieken
Syntax errors oplossen (grammatica fouten)
1. In de foutmelding staat altijd het regelnummer. Meestal bevindt de fout zich in de
regel zelf of de regel erboven.
2. Wanneer in de foutmelding Engelse woorden voorkomen die je niet kent haal je die
door de vertaalmachine.
3. Wanneer in de foutmelding iets van string of integer voorkomt is het meestal een
notatiefout.
4. Wanneer in de foutmelding “indent” voorkomt dan heeft het met inspringende code
te maken. Python dwingt je alles netjes te noteren.
5. Bij kopiëren en plakken kunnen de aanhalingstekens soms niet goed doorkomen.
6. Zorg dat de eerste regel van een if, while, for of def opdracht eindigt met een
dubbele punt :
7. Tel je haakjes, er moeten er evenveel naar links als naar rechts staan.
8. Heb je == gebruikt in plaats van = bij een voorwaarde.
9. Gebruik voor je variabelenamen geen woorden zoals “true” en “int” die al in de
pythontaal voorkomen.
Inhoudsopgave Cursus
72
Inhoudsopgave naslagwerk
10. Als bovenstaande niet werkt, breng dan in het begin van de code een nieuwe fout
in en kijk of die een foutmelding geeft. Is dat niet het geval dan is er iets mis met je
programmeer omgeving. Maak dan een nieuw bestand aan en stop er simpele code
in zoals een print opdracht of kopieer code van een simpel programma dat eerder
gewerkt heeft en kijk of het werkt. Als dat het geval is breng stukje bij beetje code
over van je oude bestand naar je nieuw bestand run het.
Testen van code die geen foutmeldingen meer geeft
1. Als de code lijkt te werken moet je allerlei invoergegevens uitproberen om te kijken
of iedere vertakking van het programma werkt Goed testen is net zo belangrijk als
goed coderen. Als het programma wat anders doet dan wat het moet doen, doe dan
onderstaande.
2. Print testvariabelen uit om te zien wat de code doet.
3. Debug het programma in plaats van Run. Zo kun je stap voor stap door het
programma lopen. Zie hoofdstuk 10 Stepping.
4. Als het programma helemaal niets doet controleer dan of er wel een print opdracht
in zit en of je misschien een functie op de verkeerde manier aanroept.
5. Als het programma hangt kan het zijn dat je per ongeluk een oneindige lus hebt
gemaakt. Om dit te testen plaats je een print opdracht voor de lus en een tweede in
de lus. Als de eerste print opdracht wel uitgevoerd wordt en de twee niet of heel
veel keer dan heb je een oneindige lus. Controleer dan of er een voorwaarde in de
lus zit die hem moet stoppen. Als je de ontwerpfout niet ziet laat je variabelen dan
uitprinten in het begin van de lus. Zo kun je op een idee komen waar de fout zit.
Testen van code die andere soorten foutmeldingen geeft
1. NameError Je roept een variabele aan die niet bestaat. Dit kan een typefout zijn
maar het kan ook zijn dat je lokale variabele aanroept die globaal had moeten zijn.
Zie 9.4 Scope.
2. TypeError Dit kan verschillende oorzaken hebben. Bijvoorbeeld je gebruikt een
string waar het een integer had moeten zijn. Het aantal items bij iets wat je doet
klopt niet.
3. AttributeError Je roept een eigenschap of methode op die niet bestaat.
4. IndexError De index in een lus wordt groter dan de lengte van een lijst minus 1.
Wat je nog meer kunt doen
1. Maak je code overzichtelijk door code die niets doet, te verwijderen.
2. Maak het probleem kleiner en probeer dat eerst op te lossen.
3. Kopieer het deel van het programma wat niet werkt naar een ander bestand, geef
het wat input en probeer het te laten werken.
4. Maak een PSD. Is je ontwerp wel goed?
5. Slaap er een nachtje over.
6. Laat iemand anders eens naar de code kijken.
7. Als je de fout gevonden hebt, bedenk dan wat je had moeten doen om de fout
sneller te vinden. Zo wordt je een steeds betere programmeur.
Inhoudsopgave Cursus
73
Inhoudsopgave naslagwerk
3 Commentaar
Commentaarregels beginnen met # bijvoorbeeld:
# De volgende code bevat het hoofdprogramma.
Commentaar regels worden niet uitgevoerd. Ze worden gebruikt om de code te
verduidelijken of om code tijdelijk uit te schakelen voor het testen.
Meerdere regels
Wanneer je een tekst van meerdere regels op het scherm wil krijgen waarbij je de opmaak
wil behouden gebruik je in python driedubbele aanhalingstekens.
 Typ en run:
# Voorbeelden les 4
# Meerdere regels
print('''Met driedubbele
aanhalingstekens
kun je een zin
over meer regels spreiden''')
4 Escapeteken \
Soms staan er tekens in een zin die je niet zonder meer letterlijk kunt typen. Dit zijn
bijvoorbeeld de dubbele aanhalingstekens zelf.
print("Hij zei: \"Wat een onzin\".")
Merk op dat door de schuine strepen (backslash) de dubbele aanhalingstekens geprint
worden. De backslash zorgt ervoor dat ze letterlijk geprint worden en ziet ze niet meer als
onderdeel van de code maar als een stukje tekst.
De backslash wordt ook wel het escape teken genoemd. Hij wordt onder andere gebruikt
om code van hackers onschadelijk te maken. In andere programmeertalen kan het ook
een ander teken zijn dan de backslash.
5 Variabelen
Variabelen
Een variabele kun je zien als een leeg doosje waar je iedere keer wat anders in kunt
stoppen.
Variabelenamen
Het is een goede gewoonte om variabelenamen te laten beginnen met een kleine letter
en ieder heel woord in de variabele naam met een hoofdletter te laten beginnen.
Bijvoorbeeld: eenZeerLangeVariabeleNaam
Inhoudsopgave Cursus
74
Inhoudsopgave naslagwerk
6 Gegevenssoorten
Datatype is het Engelse woord voor gegevenssoort.
6.1 Integers
6.2 Strings
6.3 Floats 6.4 Lijsten
6.1 Integers
Integers zijn gehele getallen waarmee je kunt rekenen.
Zo sla je een integer in een variabele op:
a=4
6.2 Strings
Strings zijn tekenreeksen. Hiermee kun je niet rekenen.
Zo sla je een string in een variabele op:
a = “rt@#123P”
Je kunt delen van strings uit een sstring halen op de volgende manier
mijnString = 'Versleten'
print(mijnString[1:6])
print('nietbest'[3:4])
Geeft:
ersle
t
Let hierbij op dat de getallen de indexen voorstellen net als bij lijsten. De index van het
eerste teken is 0. Merk verder op dat 1:6 betekent 1 tot 6. Index 6 wordt niet
meegerekend. Vandaar dat de “t” van “Versleten” niet wordt geprint. De lengte van de
substring is daardoor 6-1=5.
6.3 Floats
Floats zijn getallen met een zwevende punt erin. Ze worden ook wel reals of doubles
genoemd.
Zo sla je een float in een variabele op:
a = 5.2
6.4 Lijsten
6.4.1 Lijsten 6.4.2 Index 6.4.3 Toevoegen, verwijderen en samenvoegen 6.4.4 Lijst in
een lijst 6.4.5 Snel vullen, index uitlezen en lengte van de lijst bepalen 6.4.6 Lijst
functies
6.4.1 Lijsten
Een variabele is een leeg doosje waar je precies één ding in kunt doen. Een lijst kun je
vergelijken met een leeg doosje met meer vakjes. Je definieert ze door rechte haken te
gebruiken.
Inhoudsopgave Cursus
75
Inhoudsopgave naslagwerk
 Typ en run:
# Voorbeeld 1 lijsten
eenLegeLijst = []
eenAndereLijst = [1,2,3]
print (eenAndereLijst)
6.4.2 Index
De inhoud van de lijst kunnen we bereiken met behulp van een zogenaamde index. Deze
geeft de positie in de lijst aan. Het eerste element van de lijst heeft index 0, het tweede 1
enzovoort.
 Typ en run:
# Voorbeeld 2 index
eenLijst = [5,66,"zon",'maan','ster']
print(eenLijst)
# print de hele lijst
print(eenLijst[0])
# print index 0, dat is 5
print(eenLijst[2])
# print index 2, dat is zon
print(eenLijst[-1]) # bij een negatieve index wordt vanaf achteren geteld
Wanneer je de inhoud van de lijst wilt veranderen gebruik je de index.
 Typ en run:
# Voorbeeld 3 lijst aanpassen
getalLijst = [14,16,18]
print(getalLijst)
getalLijst[2] = 32
print(getalLijst)
Als het goed is print hij als laatste regel: [14, 16, 32]
6.4.3 Toevoegen, verwijderen en samenvoegen
Met de functie append() kun je iets aan een lijst toevoegen.
 Typ en run:
# Voorbeeld 4 Iets aan een lijst toevoegen
lijst = [7,8,9]
lijst.append(13)
print(lijst)
Als het goed is print hij als laatste regel: [7, 8, 9, 13]
Met het commando del kun je iets uit een lijst verwijderen.
 Typ en run:
# Voorbeeld 5 Iets uit een lijst verwijderen
lijst3 = [5,6,7,8]
del lijst3[2]
print(lijst3)
Inhoudsopgave Cursus
76
Inhoudsopgave naslagwerk
Als het goed is print hij als laatste regel: [5, 6, 8]
Met het + teken kun je twee lijsten samenvoegen.
 Typ en run:
# voorbeeld 6 Twee lijsten samenvoegen
lijst4 = [11,12,13]
lijst5 = [28,33,45,67]
nieuweLijst = lijst4 + lijst5
print(nieuweLijst)
Als het goed is print hij als laatste regel: [11, 12, 13, 28, 33, 45, 67]
6.4.4 Lijst in een lijst
 Typ en run:
# Voorbeeld 7 Lijst in een lijst
lijst1 = [38,40,42]
lijst2 = [3]
lijst2.append(lijst1)
print(lijst2)
Als het goed is print hij als laatste regel: [3, [38, 40, 42]]
Het eerste element van de lijst is 3 maar het tweede element is zelf ook weer een lijst.
Door een dubbele index te gebruiken kunnen we elementen uit zo'n lijst in een lijst
ophalen.
 Voeg de volgende regel toe aan de vorige code en run:
print(lijst2 [1][2])
Als het goed is print hij als laatste regel: 42
De eerste index 1 geeft aan dat het om het tweede element gaat immers de telling begint
bij nul. De tweede index 2 geeft aan dat het om het derde element van dit tweede element
gaat.
Het nesten van lijsten in lijsten is bijzonder nuttig. Je kunt er bijvoorbeeld een adresboek
mee maken. Voorbeeld:
adresboek = [ [ “Karel”,”Jansen”, “4302KK”, “Lutjebroek”], [“Hans”, “Worst”, “2211QQ”,
“Bommerdam”, ….........]
6.4.5 Snel vullen, index uitlezen en lengte van de lijst bepalen
Een lijst snel vullen met dezelfde elementen gaat met behulp van het
vermenigvuldigingsteken *. Dit heb je bijvoorbeeld nodig als alle elementen in een lijst een
bepaalde beginwaarde moeten hebben.
 Typ en run:
# Voorbeeld 8 Een lijst snel vullen
nulLijst = [6]*10
Inhoudsopgave Cursus
77
Inhoudsopgave naslagwerk
print(nulLijst)
Als het goed is print hij als laatste regel: [6, 6, 6, 6, 6, 6, 6, 6, 6, 6]
De index van een bepaald element in een lijst vinden gaat met de index() functie.
 Typ en run:
# Voorbeeld 9 De index van een element vinden
print([3,5,7,9].index(5))
Als het goed is komt hier 1 uit want het element 5 bevindt zich op positie 1.
Om de lengte van een lijst te bepalen gebruiken we de functie len().
 Typ en run:
# Voorbeeld 10 De lengte van een lijst bepalen
langLijst = [1,2,5,6,6,8,9]
print(len(langLijst))
Als het goed is komt hier 7 uit.
6.4.6 Lijst functies
Hieronder staan een aantal veelgebruikte functies bij lijsten.
 lijst.append(A) voegt A toe aan het einde van “lijst”.
 lijst.insert(i, A) voegt A toe bij index i van “lijst”.
 lijst.extend(L) voegt een lijst L toe aan “lijst”.
 lijst.remove(A) verwijderd het eerste object “A” uit “lijst”.
 lijst.pop(i) verwijdert lijst(i) en geeft lijst(i) als waarde.
 lijst.pop() verwijdert en geeft het laatste item van”lijst” als waarde.
 lijst.reverse() draait de lijst om.
 lijst.sort() sorteert de lijst.
 lijst.index(A) geeft de index terug van de positie waar object “A” gevonden is. Als
object “A” meerdere malen voorkomt geeft hij de kleinste index terug. Als “A” niet
voorkomt krijg je een “ValueError”; zie Errorhandling.
 lijst.count(A) geeft het aantal keren dat object “A” in een lijst voorkomt.
 lijst = list(‘python’) maakt van een string een lijst ['p', 'y', 't', 'h', 'o', 'n']
7 Operatoren
Rekenkundige operatoren Volgorde van bewerkingen
Vergelijkings operatoren Logische operatoren
Rekenkundige operatoren
Hier volgt een overzicht:
+ voor optellen
– voor aftrekken
* voor vermenigvuldigen
Inhoudsopgave Cursus
78
Inhoudsopgave naslagwerk
/ voor delen
** voor machtsverheffen bijvoorbeeld 2**3 = 2*2*2 = 8
% voor modulus of modulo; dit is de rest van een deling.
Bijvoorbeeld 7%3 geeft 1 want 7 gedeeld door 3 is 2 met rest 1.
Volgorde van bewerkingen
De rekenvolgorde zoals je die bij het vak rekenen hebt gehad geldt hier ook:
1. Haakjes gaan voor alles.
2. **
3. *, /, %
4. +, –
Vergelijkings operatoren
Operator voorbeeld
A == B
A != B
A>B
A<B
A >= B
A <= B
A IN B
A NOT IN B
Omschrijving
Waar als A gelijk is aan B
Waar als A niet gelijk is aan B.
Waar als A groter is dan B
Waar als A kleiner is dan B.
Waar als A groter of gelijk aan B is.
Waar als A kleiner of gelijk aan B is.
Waar als A behoort tot de verzameling B
Waar als A niet behoort tot de verzameling B
Verschil python 2 en 3: in python 2 mocht je in plaats van != ook <> gebruiken. In python 3
mag dit niet meer.
In if elif else opdrachten worden vaak logische operatoren gebruikt. Deze kijken of een
bewering waar of niet waar is.
Let op dat als twee dingen aan elkaar gelijk moeten zijn het dubbele == teken wordt
gebruikt.
Logische operatoren
Deze worden ook wel booleaanse operatoren genoemd.
Operator
Omschrijving
Effect
Voorbeeld
A and B
en
Waar als A en B beiden waar zijn. Niet waar in alle andere
gevallen.
A or B
of
Waar als of A of B of beiden waar zijn. Niet waar als A en B
beiden niet waar zijn.
not B
Ontkenning
Waar als B niet waar is.
Het volgende programma controleert of twee wachtwoorden aan elkaar gelijk zijn:
 Typ, run en probeer alle mogelijkheden uit:
# wachtwoorden
wachtwoord1 = input("Voer een wachtwoord in:")
Inhoudsopgave Cursus
79
Inhoudsopgave naslagwerk
wachtwoord2 = input("Voer het wachtwoord nogmaals in:")
if wachtwoord1 == wachtwoord2:
print("De wachtwoorden zijn aan elkaar gelijk.")
else:
print("De wachtwoorden zijn niet aan elkaar gelijk")
Het volgende programma print een boodschap uit als beide ingevoerde getallen groter dan
5 zijn. Als dat niet het geval is, gebeurt er niets.
 Typ, run en probeer alle mogelijkheden uit:
# aan beide voorwaarden is voldaan
a = int(input("Noem een getal onder de 10:"))
b = int(input("Noem een ander getal onder de 10:"))
if a > 5 and b > 5:
print("Beide getallen zijn groter dan 5.")
Het volgende programma print een boodschap uit als één of meer ingevoerde getallen
groter dan 5 zijn. Verder wordt de optelsom van beide getallen geprint. Als dat niet het
geval is, gebeurt er niets.
 Typ, run en probeer alle mogelijkheden uit. De tabs zul je opnieuw in moet stellen.
# aan één van de voorwaarden is voldaan
a = int(input("Noem een getal onder de 10:"))
b = int(input("Noem een ander getal onder de 10:"))
if a > 5 or b > 5:
c = a+b
print("Eén of meer getallen zijn groter dan 5.")
print(c)
#not operator
voornaam = input("Noem je voornaam: ")
if not voornaam:
print("Je bent vergeten om iets in te vullen.")
else:
print("Dank je wel.")
8 Vertakkingen
If else If elif else if in if opdracht
If else
Het volgende programma vraagt de gebruiker om zijn voornaam.
#waar of niet waar
voornaam = input("Noem je voornaam: ")
if voornaam:
Inhoudsopgave Cursus
80
Inhoudsopgave naslagwerk
print("Dank je wel.")
else:
print("Je bent vergeten om iets in te vullen.")
De regel “if voornaam” betekent: “Bestaat de variabele voornaam.”
Als er iets ingevuld is dan is het antwoord op deze vraag “Ja”. De bewering is dan waar
(engels: true).
Is er niets ingevuld dan is het antwoord op deze vraag “Nee” en is de bewering niet waar
(engels: false).
Het “else” gedeelte mag je weglaten als er niets hoeft te gebeuren als niet aan de
voorwaarde is voldaan.
Let op de dubbele punt achter if en else.
If elif else
Het komt vaak voor dat er meer dan twee mogelijkheden zijn. Dan breid je de if else
opdracht uit tot if elif else. Er mogen zoveel elif regels tussen staan als je maar wilt. In het
volgende programma zijn er vier categorieën van getallen. Merk verder op dat in de ifopdracht er meer dan één logische operator wordt gebruikt. elif en else mogen ook
weggelaten worden als er geen opdracht hoeft te worden uitgevoerd.
 Typ en run:
# Prijzen
prijs = int(input("Kies een geheel getal onder de tien voor je prijs:"))
if prijs == 1 or prijs == 4 or prijs == 9:
print("Je hebt een cadeaubon gewonnen.")
elif prijs == 2:
print("Je hebt een reis naar Ameland gewonnen.")
elif prijs == 7:
print("Je hebt een auto gewonnen.")
else:
print("Je hebt helaas geen prijs.")
if in if opdracht
Het is ook mogelijk om binnen een if opdracht een andere if opdracht te nesten. Op dat
moment worden de inspringen erg belangrijk zodat je weet wat bij wat hoort. In
onderstaand voorbeeld wordt aan mensen die “Piet” heten en ouder dan twaalf jaar zijn
een extra vraag gesteld.
 Typ, run en probeer alle mogelijkheden uit. Wanneer je kopieert en plakt moet je de
aanhalingstekens en de inspringingen opnieuw doen.
# If in een if opdracht
voornaam = input("Wat is je voornaam:")
if voornaam == "Piet":
leeftijd = int(input("Wat is je leeftijd:"))
if leeftijd > 12:
achternaam = input("Wat is je achternaam:")
Inhoudsopgave Cursus
81
Inhoudsopgave naslagwerk
print("Jij heet " + voornaam + " " + achternaam + " en je bent " + str(leeftijd) + " jaar.")
else:
print("Je hebt niet de leeftijd die we zoeken.")
else:
print("Je bent niet degene die we zoeken.")
9 Lussen
9.1 For-lus
9.2 While lus
9.3 Eeuwige lus
9.5 range(start,stop,stapgrootte)
9.4 Lus in een lus
9.6 Gebruik van de index in een lus
Lussen in een programma worden ook wel iteraties of herhalingen genoemd. De twee
belangrijkste zijn de while-lus en de for-lus. De for lus wordt veel gebruikt om een
bepaalde reeks af te lopen. De while lus gebruik je als er een voorwaarde gesteld moet
worden om de lus te laten stoppen.
9.1 For-lus
Met het volgende opdrachten kun je een reeks uitprinten die in een variabele of lijst zit.
Probeer het maar uit.
Typ en run:
# Voorbeeld 12 For-lus
for x in 'Python':
print ('Dit is de letter: ' + x)
De for lus loopt hier alle tekens van het woord 'Python' af en print ze regel voor regel uit.

Typ en run:
# Voorbeeld 13 For-lus en lijst
fruitlijst = ['banaan', 'appel', 'mango']
for fruit in fruitlijst:
print ('We hebben een : ' + fruit)
De for lus loopt hier een hele lijst af en print de inhoud van die lijst regel voor regel uit.

9.2 While lus
Een while lus is een ander type lus. Je kunt er meer mee maar hij is iets lastiger in
gebruik.
Het volgende programma laat de gebruiker een getal onder de tien raden net zolang tot de
gebruiker het raadt.

Typ, run en test dit programma:
# Voorbeeld 4 While lus
import random
getal = random.randint(1,9)
print(getal)
raad = 0
while raad != getal:
raad = int(input("Noem een getal onder de 10"))
print("Goed geraden")
Inhoudsopgave Cursus
82
Inhoudsopgave naslagwerk
➔ De derde regel gebruikt de functie randint waarbij je een geheel getal kiest dat
minimaal 1 en maximaal 9 is.
➔ De regel print(getal) is voor testdoeleinden zodat je niet eindeloos hoeft te raden.
➔ De regel raad = 0 is nodig omdat anders het programma de variabele “raad” niet
kent bij het begin van de while lus. Dit heet een variabele declareren.
➔ De regel while raad != getal: betekent: Zolang de variabele “raad” niet gelijk is aan
de variable “getal”.
➔ In de regel daaronder staat de opdracht die uitgevoerd wordt zolang het getal niet
geraden is.
➔ Zo gauw het getal geraden is springt het programma uit de lus en voert de laatste
regel van het programma uit.
9.3 Eeuwige lus
Bij lussen bestaat altijd het gevaar dat je in een zogenaamde eeuwige lus terecht komt.
Het programma blijft dan maar doorgaan en stopt niet uit zichzelf. De oorzaak is dat aan
de voorwaarde waardoor de lus stopt nooit wordt voldaan.
De oplossing is om de applicatie waarin het programma draait af te sluiten. In windows
doe je dit door op <CTR><ALT><DEL> te drukken. Hierdoor kun je taakbeheer openen en
bij tabblad “toepassingen” het programma afsluiten.
Typ, run en gebruik taakbeheer of klik op het kruisje van het programma om het af
te sluiten:
# Voorbeeld 5 Eeuwige lus
a = 10
while a != 6:
a=a+1
print(a)
In het programma hierboven blijft a altijd ongelijk aan 6 en zal de lus dus door blijven
gaan.

9.4 Lus in een lus
Wanneer de opdrachten wat ingewikkelder worden moet een programmeur al gauw zijn
toevlucht nemen tot een lus in een lus.
Het volgende programma berekent alle veelvouden van 12 die tevens veelvoud van 15 zijn
tussen 0 en 500. Je ziet dat in de binnenste lus ook nog een if opdracht zit. Let op de
inspringingen.

Typ en run:
# Voorbeeld 6 Een lus in een lus
for a in range(0,500,12):
for b in range(0,500,15):
if a == b and a != 0:
print(a)
Als je foutmeldingen krijgt met “indentation” staan de inspringingen niet goed. Dit gebeurt
vooral als je kopieert en plakt.
Inhoudsopgave Cursus
83
Inhoudsopgave naslagwerk
9.5 range(start,stop,stapgrootte)
In combinatie met een for-lus wordt de functie range veel gebruikt. Het volgende
programma print het getal 26, dan drie minder dus 23, dan 20 enzovoort totdat de teller
gelijk aan 14 wordt. Dan springt hij uit de lus en stopt het programma.

Typ en run:
# Voorbeeld 14 range
for teller in range(26,14,-3):
print(teller)
9.6 Gebruik van de index in een lus
In het volgende programma wordt gebruik gemaakt van de index. Let op dat de eerste
index altijd 0 is. Dus index = 0 hoort bij 'banaan'. De len() functie is hier gebruikt om de
lengte van de lijst te bepalen. Voor onderstaand voorbeeld is de lengte van de lijst dus 3.
Zo gauw de index 3 wordt stopt de for lus.

Typ en run:
# Voorbeeld 15 Gebruik van de index
fruitlijst = ['banaan', 'appel', 'mango']
for index in range(len(fruitlijst)):
print ('Dit soort fruit heet: ' + fruitlijst[index])
10 Functies
Functies vinden Functies in deze cursus float(string) input([prompt]) int() len(s)
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) round(object, decimalen)
str(object)
Functies vinden
Python 3 kent een groot aantal ingebouwde functies. Dat aantal kun je nog uitbreiden door
bepaalde bibliotheken te importeren. Dat laatste is in python niet moeilijk. je kunt de
ingebouwde functies vinden door in een zoekmachine “python 3 functions built in” te typen
of door naar het volgende internetadres te gaan:
docs.python.org/3/library/functions.html
Wanneer je veel functies kent in een taal kun je kortere programma's schrijven.
Functies in deze cursus
float(string)
Maakt van een string een float dus een kommagetal waarmee je kunt rekenen.
input([prompt])
Met deze functie kun je gegevens invoeren. De prompt geeft aan dat de functie op invoer
wacht. De gegevens worden opgeslagen in bijvoorbeeld een variabele.
Inhoudsopgave Cursus
84
Inhoudsopgave naslagwerk
Voorbeeld:
a = input("Voer je naam in:")
print(a)
int()
Met deze functie kun je van een string of float een integer maken dus een geheel getal.
Voorbeeld:
a=3.6
b=int(a)
print("De uitkomst is",b)
Geeft b = 3.
len(s)
Met de functie len() kun je het aantal tekens in een string bepalen.
voorbeeld:
a="krokodil"
b=len(a)
print(b)
Op het scherm komt: 8
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
Deze functie kan dingen wegschrijven.
Binnen de haakjes vind je een aantal parameters: objects, sep, end, file en flush.
 *objects Door haakjes gescheiden kunnen dit meerdere variabelen, strings,
integers, en andere gegevenstypen zijn. Voorbeeld:
a=3
print(a,"voet",24)
geeft: 3 voet 24
 sep komt van separator = scheidingsteken; dit is standdaard de spatie.
Voorbeeld: print(2,3,4,sep='|') geeft 2|3|4
 end is wat er na de opdracht moet gebeuren. Standaard staat deze op \n wat
nieuwe regel betekent.
 file is het bestand waar hij naar schrijft. Dit is standdaard “sys.stdout”; alles wat
hierin komt gaat naar het scherm. Je kan echter ook naar bijvoorbeeld voorbeeld.txt
schrijven.
 flush Wanneer je byte voor byte iets naar een bestand wegschrijft kost dat veel tijd.
Dit gebeurd bij Flush=true. Om de performance te verbeteren worden de gegevens
vaak in een tijdelijke buffer weggeschreven. Pas als er voldoende gegevens zijn
wordt het in één keer als één groot blok weggeschreven naar het bestand. Dit
verbetert de performance. Standaard wordt bij de print functie pas iets echt
weggeschreven bij een nieuwe regel. Dit gebeurt bij Flush=false. Flush=true
gebruik je eigenlijk alleen in situaties waarbij je zeker wilt zijn dat het wegeschreven
is voordat je verder gaat. Normaal gesproken is dit niet nodig.
Inhoudsopgave Cursus
85
Inhoudsopgave naslagwerk
round(object, decimalen)
Bijvoorbeeld:
getal = 2,345238
afgerond = round(getal, 1)
geeft 2,3 want het wordt afgerond op 1 decimaal
str(object)
Met deze functie kun je van een integer of real een string maken.
Voorbeeld:
a=3.4+2
b=str(a)
print("De uitkomst is " + b)
11 Modules
Modules importeren Module random Module Turtle
Naast de built in functies kent Python een heleboel modules van functies die je kunt
importeren. Dit doe je met de opdracht import. Voorbeelden van modules zijn:
 NumPy en SciPy die vol zitten met wiskundige functies
 Pygame voor het maken van 2d-games in Python
 Pyglet voor 3d animatie en games
 random voor willekeurige getallen
 turtle voor tekenen
De bovenste drie zijn niet meegeleverd met pyscripter portable maar zijn wel gratis van het
internet te halen. De onderste twee wel.
Modules importeren
Importeren van modules doe je met:
import modulenaam
Module random
Random getallen
Random getallen zijn willekeurig gegenereerde getallen. Python kent hier verschillende
functies voor. De functies bevinden zich in de module “random”. Wil je een random functie
kunnen gebruiken dan moet je eerst de module aanroepen. Dit doe je met “import”. Het
volgende programma genereert gehele getallen van 20 tot en met 30.
 Typ en run het programma minimaal 5 keer. Je zult zien dat er steeds een
willekeurig getal tussen 20 en 30 op het scherm komt.
# Voorbeeld 2 Random getallen
import random
a = random.randint(20,30)
Inhoudsopgave Cursus
86
Inhoudsopgave naslagwerk
print(a)
Merk op dat je de naam van de module voor de naam van de functie moet plakken.
Module Turtle
Om in Pyscripter Portable te kunnen tekenen moeten we eerst een instelling aanpassen.
6. Ga in het menu naar "Run, Python Engine" en kies dan Remote(Tk). De standaard
instellling is “Remote”. De module Turtle die we gaan gebruiken heeft echter
“Remote(Tk)” nodig.
Alle turtle opdrachten zijn te vinden op: https://docs.python.org/3.2/ Kies daarna voor
Global Module Index en dan turtle. Je kunt ook in het menu klikken op Help, Python
manuals, modules, turtle.
Turtle betekent schildpad. We gaan nu een vierkantje tekenen. In het programma is de
schildpad een soort pijltje.
7. Typ en run:
import turtle #We mogen gebruik maken van de functies uit de turtle module
venster = turtle.Screen() # maakt een grafisch venster
jorah = turtle.Turtle() # maakt een schildpad genaamd jorah
jorah.forward(100) # Er onstaat een lijntje van 100 pixels lang
jorah.left(90) # jorah draait 90 graden naar links
jorah.forward(50)
jorah.left(90)
jorah.forward(100)
jorah.left(90)
jorah.forward(50)
jorah.left(90)
venster.exitonclick() # Sluit het venster af als je er op klikt
Inhoudsopgave Cursus
87
Inhoudsopgave naslagwerk
Download