ID.nl logo
Zo kun je programmeren in Python - Deel 6
© Reshift Digital
Huis

Zo kun je programmeren in Python - Deel 6

In de href="https://computertotaal.nl/artikelen/pc/zo-kun-je-programmeren-in-python-deel-5/" rel="noopener noreferrer" target="_blank">vorige les</a> leerde je met bestanden werken en zag je hoe je je programma kunt laten reageren op exceptions. Zo beginnen je programma’s ondertussen al vrij complex te worden. Tijd dus om wat structuur in je programma’s te brengen, en dat doen we in deze les met functies en modules. We bekijken ook enkele standaardmodules van Python.

Wil je meer leren over programmeren? Bekijk dan onze Cursus: programmeren in Phyton (boek & online cursus).

Tot nu toe waren onze Python-programma’s vrij kort, maar je hebt ondertussen al genoeg Python-bagage om zelf al eens aan de slag te gaan en je eigen ideeën uit te werken in programma’s. En dan merk je al snel dat je programma lang en ondoorzichtig wordt. Gelukkig kent Python verschillende manieren om wat meer structuur in je programma’s te brengen.

De eerste manier ben je al tegengekomen: functies. We hebben immers in de vorige lessen al diverse standaardfuncties van Python gebruikt, zoals len, print, input, format, split, open, read en write. Een functie is een afzonderlijk stukje code dat een afgebakende taak uitvoert die je meerdere keren zou willen uitvoeren op verschillende gegevens. Zodra je in je programma dus merkt dat je een stukje code telkens aan het herhalen bent, zou je eerste gedachte moeten zijn: ik maak er een functie van!

Een functie definiëren

We tonen je als voorbeeld hoe je een functie maakt om te berekenen of een woord een palindroom is. Een palindroom of spiegelwoord is een woord dat van achteren naar voren gelezen hetzelfde is als van voor naar achter. Een eenvoudige functie om te bepalen of een woord een palindroom is, ziet er als volgt uit:

def is_palindroom(woord):letters = list(woord)palindroom = Truewhile len(letters) > 0 and palindroom:if letters[0] != letters[-1]:palindroom = Falseelse:letters.pop(0)if len(letters) > 0:letters.pop()return palindroom

Dit is niet de efficiëntste manier om te bepalen of een woord een palindroom is, maar wel een die goed te begrijpen is. Je ziet dat er in de definitie van deze functie eigenlijk maar twee zaken nieuw zijn: de eerste en de laatste regel. In de eerste regel geven we met def is_palindroom(woord): aan dat we een functie definiëren met de naam is_palindroom en dat die één parameter meekrijgt, die we woord noemen. Dan komt onze hele berekening, die je met al je kennis uit de vorige lessen na een kleine studie zou moeten begrijpen, en op het einde geven we met return palindroom aan dat we de waarde die na onze berekening in de variabele palindroom zit teruggeven.

Een functie aanroepen

Breek je hoofd nog even niet over de inhoud van de functie. Typ de code in Thonny in en sla het bestand op onder de naam palindroom.py. Voer het dan uit met een druk op F5. Er gebeurt niets, maar de functie is nu gedefinieerd. In de terminal onderaan Thonny kun je nu de functie aanroepen. Enkele voorbeelden:

>>> is_palindroom('nepalapen')True>>> is_palindroom('napalm')False>>> is_palindroom('koortsmeetsysteemstrook')True

Denk nu eens even na over wat er gebeurt als je is_palindroom('nepalapen') aanroept. De functie is_palindroom wordt dan uitgevoerd en aan de variabele woord van de functie wordt de string 'nepalapen' toegekend. Dan gebeurt die hele berekening, en geeft de functie als resultaat True of False. En voor elke andere string die je aan de functie doorgeeft, gebeurt de berekening op dezelfde manier. Op deze manier heb je de berekening ingekapseld in een afzonderlijk stukje code, de functie, die herbruikbaar is.

Overigens zijn door die inkapseling de parameter woord net zoals de variabelen letters en palindroom alleen binnen het blok van de functie gedefinieerd: het zijn wat we noemen lokale variabelen.

Recursieve functies

In onze functie is_palindroom gaan we met een while-lus alle letters in het woord af. Een andere manier om de functie te definiëren is met recursie: in de functie roepen we de functie opnieuw aan, maar op een deel van het woord. Dat ziet er als volgt uit:

def is_palindroom2(woord):if len(woord) < 2:return Trueif woord[0] != woord[-1]:return Falsereturn is_palindroom2(woord[1:-1])

Voeg deze functie in Thonny gewoon aan hetzelfde bestand toe als is_palindroom, sla het bestand op en druk op F5 om het uit te voeren. Je kunt nu deze functie is_palindroom2 uitproberen op enkele woorden. Het resultaat moet telkens hetzelfde zijn als is_palindroom op hetzelfde woord.

De functie is_palindroom2 is een mooi voorbeeld van een recursieve functie. We bekijken eerst of het woord minder dan twee letters bevat. In dat geval (het woord is leeg of heeft één letter) is het altijd een palindroom en daarom geven we in dat geval True terug. Daarna controleren we of de eerste letter verschilt van de laatste letter van het woord. Verschillen die, dan is het woord al zeker geen palindroom en geven we dus False terug.

Dan blijft er nog één geval over: de eerste en laatste letter van het woord zijn gelijk, maar van de andere letters weten we nog niets. Wat doen we dan? We roepen de functie is_palindroom2 opnieuw op, maar op die andere letters. Die verkrijgen we door de slice (zie les 2) [1:-1] op het woord toe te passen, die het woord zonder de eerste en laatste letter teruggeeft.

Belangrijk bij recursieve functies

Als je een recursieve functie schrijft, is het belangrijk dat je de functie telkens oproept op een kleinere invoer dan waarmee je begon, zodat je uiteindelijk bij een basistest uitkomt, zoals in ons geval if len(woord) < 2: en if woord[0] != woord[-1]:. In beide gevallen roepen we de functie is_palindroom2 niet meer aan, maar geven we een waarde True of False terug. Doordat we in het derde geval altijd de eerste en de laatste letter van het woord verwijderen voor we de functie opnieuw oproepen, verzekeren we dat de functie uiteindelijk altijd bij een van de basistests uitkomt.

Met modules werken

Zonder dat je het weet, heb je nu al je eerste module geschreven. Elk Python-bestand waarin je code schrijft, is immers een module voor Python. Maak nu een nieuw Python-bestand aan in Thonny en noem het bijvoorbeeld test_palindroom.py. Als je in dit bestand de code uit palindroom.py wilt gebruiken, moet je de module palindroom importeren. Dat gaat als volgt:

import palindroom

print(palindroom.is_palindroom("nepalapen"))

Met import palindroom zeggen we aan de Python-interpreter dat we toegang willen tot alle code in de module palindroom. Python zoekt dan naar bestanden met de naam palindroom.py in zijn zoekpad. Omdat de code test_palindroom.py in dezelfde directory staat als palindroom.py, vindt Python de module en zijn de functies is_palindroom en is_palindroom2 daarin beschikbaar onder de namen palindroom.is_palindroom en palindroom.is_palindroom2.

In dit geval is het niet zo handig dat je voor elke functie uit de module palindroom de aanduiding palindroom. dient te zetten, omdat dit nogal lang is. We kunnen de naam van een module die we gebruiken gelukkig ook afkorten:

import palindroom as pal

print(pal.is_palindroom("nepalapen"))

Het is ook mogelijk om het voorvoegsel voor de module volledig weg te laten door de specifieke functies die we willen gebruiken te importeren:

from palindroom import is_palindroom

print(is_palindroom("nepalapen"))

Dat kan ook met meerdere functies:

from palindroom import is_palindroom, is_palindroom2

print(is_palindroom("nepalapen"))

print(is_palindroom2("parterretrap"))

Zodra je Python-code wat langer wordt, is het aan te raden om ze in modules op te splitsen. Een goede vuistregel is dat elke module code voor één specifiek doel moet bevatten. In ons geval bevat de module bijvoorbeeld alle mogelijke code die met palindromen te maken heeft. Als we daarnaast ook code voor anagrammen zouden willen toevoegen, doe je dat het best in een afzonderlijke module, anagram.py.

Systeeminformatie

Python zelf bestaat ook uit een heleboel standaardmodules waarin allerlei handige functies zitten. Zo is er de module platform om informatie over het platform waarop je Python-programma draait op te vragen:

>>> import platform>>> platform.architecture()('64bit', 'ELF')>>> platform.platform()'Linux-4.15.0-33-generic-x86_64-with-Ubuntu-18.04-bionic'>>> platform.processor()'x86_64'>>> platform.python_version()'3.6.7'>>> platform.system()'Linux'

Verder bevat de standaardmodule os allerlei functies die met het besturingssysteem te maken hebben. Zo kun je een lijst opvragen van de bestanden in de huidige directory:

>>> import os>>> os.listdir()['palindroom.py', 'test_palindroom.py']

Werken met getallen

Als je met getallen wilt werken, komt de module math goed van pas. Die bevat allerlei functies voor berekeningen, zoals je in het volgende voorbeeld ziet:

>>> import math>>> math.floor(4.3)4>>> math.ceil(4.3)5>>> math.gcd(28, 12)4>>> math.sqrt(2)1.4142135623730951>>> math.e2.718281828459045>>> math.pi3.141592653589793>>> math.sin(2*math.pi)-2.4492935982947064e-16

In de laatste regel zie je al een nadeel van berekeningen met floats: door afrondingsfouten geeft de berekening van de sinus van 2 keer pi een heel klein getal (-2 en nog iets maal 10 tot de -16de macht) in plaats van het juiste resultaat 0.

Een andere nuttige module is random, waarmee je willekeurige getallen kunt genereren:

>>> import random>>> random.randint(1, 10)7>>> random.choice(['lies', 'jan', 'kees', 'mireille', 'koen', 'rob'])'rob'>>> namen = ['lies', 'jan', 'kees', 'mireille', 'koen', 'rob']>>> random.shuffle(namen)>>> namen['jan', 'rob', 'koen', 'mireille', 'lies', 'kees']

Zo geeft de functie randint(a, b) een willekeurig geheel getal tussen a en b terug (a en b inbegrepen). Met choice kies je een willekeurig element uit een lijst. En met shuffle schud je een lijst willekeurig door elkaar.

Samenvatting

In deze les heb je geleerd om je Python-code wat meer te structureren. Enerzijds heb je berekeningen die je vaak herhaalt in functies leren opnemen. Anderzijds heb je geleerd hoe je functies die bij elkaar horen kunt afscheiden in een afzonderlijke module. We hebben tot slot ook met enkele standaardmodules van Python kennisgemaakt. In de volgende les gaan we op de structuur van datatypes in: we tonen je hoe je zelf eigen datatypes kunt definiëren in de vorm van klassen.

Opdracht

Open de module palindroom.py in Thonny en voer ze uit met een druk op F5. Voer in de terminal onderaan de volgende opdrachten in: *>>> is_palindroom('parterretrap')True>>> woord**Traceback (most recent call last):**File "

Uitwerking

De parameter woord in de functie is een lokale variabele: die is alleen binnen het blok van de functie gedefinieerd. Als je de functie met het argument 'parterretrap' oproept, wordt die string in de functie aan de lokale variabele woord toegekend, maar na het uitvoeren van de functie is die variabele niet meer beschikbaar en geeft Python dus met een NameError aan dat het de naam woord niet kent.

Cheatsheet

Functie: een afzonderlijk stukje code dat je meerdere keren uitvoert. Importeren: aangeven dat je een module wilt gebruiken. Lokale variabele: een variabele die alleen binnen een specifiek blok (bijvoorbeeld van een functie) gedefinieerd is. Module: een afzonderlijk bestand met Python-code. Recursieve functie: een functie die zichzelf aanroept.

▼ Volgende artikel
Review Tefal Snack Collection - klein formaat, veel mogelijkheden
© Tefal
Huis

Review Tefal Snack Collection - klein formaat, veel mogelijkheden

Tefal lanceert een compact model tosti-ijzer dat met allerlei extra platensets te gebruiken is voor allerlei gerechten: van panini's en wafels in allerlei vormen en maten tot aan donuts en madeleines. Is de Snack Collection echt zo veelzijdig? ID.nl ging ermee aan de slag.

Uitstekend
Conclusie

De Tefal Snack Collection is een compact tosti-apparaat met verwisselbare platen, bedoeld voor wie met één toestel meerdere snacks wil bereiden. In de test leverde het apparaat goede resultaten met tosti’s en panini’s; de platen klikken stevig vast, zijn uitneembaar en vaatwasserbestendig. Met zijn kleine formaat, snoeropbergsysteem, 700 watt vermogen, maximale temperatuur van 230 graden en voorverwarm-indicator is het toestel praktisch, al is het grillvlak aan de krappe kant en is de temperatuur niet instelbaar. Per saldo is dit een ruimtebesparende keuze voor tostiliefhebbers die graag variëren.

Plus- en minpunten
  • Compact formaat en makkelijk opbergen
  • Goede grill-prestaties
  • Veel uitbreidingsmogelijkheden
  • Opwarmen duurt zo'n 4 minuten
  • Temperatuur niet instelbaar

Tafelgrills en tosti-apparaten zijn in bijna elk huishouden te vinden. Vaak gaat het om apparaten met een geribbelde grillplaat boven en onder, waar je je tosti tussen legt om die een paar minuten erna bruin en krokant uit te halen, met een lekker warme vulling. Het zijn eenvoudige apparaten die goed zijn in waarvoor ze ontwikkeld zijn. Meer dan je tosti erin maken kan vaak niet. Tefal komt nu met de compacte Snack Collection, een apparaat dat je koopt met twee bijgeleverde typen grillplaten en nog eens kunt uitbreiden door losse sets erbij te kopen.

©Saskia van Weert

Testexemplaar en meegeleverde platen

Ter review ontving de redactie een blauw testmodel, voorzien van twee grill/panini-platen (één boven, één onder in het apparaat) en twee platen om Brusselse wafels mee te maken. De Snack Collection is met zijn 28,5 centimeter breedte, 20,6 centimeter lengte en 34,5 centimeter hoogte een betrekkelijk klein apparaat dat makkelijk op te bergen is. Het snoer is aan de onderkant op te bergen, er zit een aan-uitknop aan de voorzijde, net als een vergrendeling om het ijzer op slot te zetten. Ook zit er een lampje aan de voorzijde dat groen oplicht als het apparaat is voorverwarmd. Hij heeft een vermogen van 700 watt en een maximale temperatuur van 230 graden. De temperatuur is niet handmatig in te stellen.

©Saskia van Weert

Inhoud van de doos en wisselen van platen

In de machine zit al een set grillplaten. Verder vind je in de doos twee verpakkingen die nog het meest doen denken aan videobandhoezen van vroeger. Ze zijn van harde kunststof en gaan wat lastig open. De ene doos is uiteraard leeg, want daar zaten de panini-platen in, maar we vinden er wel een receptenboekje in. In de andere doos zit de uitbreiding; in ons testexemplaar zijn dat de wafelplaten. De platen zijn los te halen uit de machine via een knopje boven en onder, en de platen kunnen er op maar één manier in vastklikken. Je kunt ze dus niet verkeerd bevestigen. Ze mogen in de vaatwasser; de machine zelf uiteraard niet.

©Saskia van Weert

Gebruik en bediening

Zoals wel vaker bij dit type apparaten is de werking enorm simpel. Je bevestigt de gewenste platen in de machine, doet de stekker in het stopcontact en zet hem aan. Dan wacht je tot het groene lampje aangaat, open je de machine, doe je je gerecht erin, sluit je alles weer netjes en wacht je tot je eten klaar is. Eet smakelijk!

©Saskia van Weert

Test: tosti's

De bijgeleverde grill/panini-plaat is net wat te klein voor een reguliere tosti van boterhammen uit de supermarkt; het korstje steekt net wat boven de plaat uit. Maar dat bleek voor het resultaat niet uit te maken: alle geteste tosti’s kwamen prima uit de Tefal. Opwarmen duurde wel wat lang, ongeveer 4 minuten.

Lees ook: Gezonde tosti’s om de hele middag op door te gaan

Brand je handen niet!

Gebruik een tang om je tosti's te serveren

Test: panini

De test met een panini had wat voeten in de aarde. De supermarkten in onze woonplaats verkochten geen panini-broodjes, maar een XL-shop in een andere plaats wel. Panini-broodjes zijn hoger dan normale afbakbroodjes en standaard voorzien van grillstrepen. Het deksel van de Snack Collection moest wel wat worden aangedrukt om de machine te kunnen sluiten met de vergrendeling, maar ook dat verliep verder prima.

Schoonmaken en opbergen 

De platen komen weer brandschoon uit de vaatwasser en klikken makkelijk vast in het apparaat. Door de betrekkelijk kleine afmetingen van dit keukenapparaat is het makkelijk op te bergen.

©Tefal

Uitbreidingssets (assortiment)

Dan de uitbreidingssets. Deze hebben we niet kunnen testen, maar zijn uiteraard te bekijken via de site van Tefal. Er is een aantal platen voor tosti’s in bijzondere vormen, zoals een schelpvorm of juist meteen als driehoek. Verder zijn er onder meer vormen voor bagels te verkrijgen. Tefal mikt duidelijk op een internationaal publiek, want er is ook een vorm voor madeleines (Franse zoete cakejes) verkrijgbaar.

Conclusie

De Tefal Snack Collection is een compact tosti-apparaat met verwisselbare platen, bedoeld voor wie met één toestel meerdere snacks wil maken. In de test leverde het apparaat nette resultaten op: tosti's kwamen goed uit de grill en panini's lukten eveneens prima na het sluiten met de vergrendeling. De platen klikken stevig vast, zijn uitneembaar en kunnen in de vaatwasser. Dankzij het kleine formaat en het opbergsysteem voor het snoer is het toestel eenvoudig weg te zetten. Het apparaat heeft een vermogen van 700 watt, een maximale temperatuur van 230 graden en een indicatielampje dat aangeeft wanneer voorverwarmen is voltooid.

Aandachtspunten: het grillvlak is aan de krappe kant voor standaardboterhammen, de opwarmtijd ligt rond de 4 minuten en de temperatuur is niet handmatig regelbaar. De uitbreidingsmogelijkheden zijn groot (onder meer wafels, donuts, madeleines en bagels), maar deze extra platen zijn in deze test niet inhoudelijk beoordeeld.

Per saldo is de Snack Collection een praktisch en ruimtebesparend apparaat voor de liefhebbers van tosti's die ook graag eens experimenteren met andere bereidingen.

▼ Volgende artikel
Slimmer overstappen zorgverzekering 2026: pak dubbel voordeel met CashbackXL
© ID.nl
Zekerheid & gemak

Slimmer overstappen zorgverzekering 2026: pak dubbel voordeel met CashbackXL

Naar verwachting stappen dit jaar weer ruim 1,2 miljoen mensen over van zorgverzekering. Verstandig, maar het kan nóg slimmer. Wie overstapt via CashbackXL profiteert namelijk dubbel: je bespaart op de premie én ontvangt cashback-punten die je kunt inwisselen voor keiharde euro's.

We zitten midden in het overstapseizoen. Tot en met 31 december heb je de tijd om je huidige zorgverzekering op te zeggen en een nieuwe te kiezen. De ontevredenheid over de hoge premies is voor velen de belangrijkste reden om te wisselen. Daarnaast kiezen steeds meer mensen voor een minder uitgebreide aanvullende verzekering om de kosten te drukken. Er valt vaak honderden euro's per jaar te besparen door simpelweg te vergelijken. Maar waarom zou je genoegen nemen met alléén een lagere premie?

Punten scoren (en cashen!)

Als je via CashbackXL overstapt, ontvang je voor elke nieuw afgesloten zorgverzekering bij de grote vergelijkers Poliswijzer.nl, Zorgkiezer en Overstappen.nl 2.750 punten. Deze punten zijn geld waard: 1 punt staat gelijk aan € 0,01. Dit betekent dat je per overstap € 27,50 extra voordeel pakt.
Of je nu kiest voor a.s.r., VGZ Bewuzt, OHRA, Zilveren Kruis Ziezo of een van de vele andere verzekeraars uit de lijst: als je via de juiste vergelijker overstapt, pak je die bonus mee. In onderstaand overzicht zie je bij welke vergelijker je moet zijn voor een specifieke verzekeraar.

💡Slimme tip: zo krijg je meerdere cashbacks op één adres

Stappen jij en je partner allebei over? Let dan even goed op. Normaal gesproken geldt de regel: één cashback per vergelijker, per adres/gezin. Maar daar is een slimme oplossing voor. Wil je voor meerdere gezinsleden een cashback ontvangen? Sluit de verzekeringen dan af bij verschillende vergelijkers.

Voorbeeld: Jij sluit je nieuwe verzekering af via Poliswijzer.nl (2.750 punten) en je partner sluit af via Overstappen.nl (ook 2.750 punten). Zo ontvang je op hetzelfde adres twee keer de cashback!

Belangrijk om te weten: geduld wordt beloond

Overstappen doe je vóór 1 januari, maar de controle duurt even. Zorgverzekeraars keuren de aanvragen namelijk pas definitief in april 2026. Het duurt dus even voordat de punten in je account op 'goedgekeurd' staan, maar dat is het wachten waard.

Voorwaarden puntenactie zorgverzekering 2026

Wil je in aanmerking komen voor deze actie, lees dan onderstaande voorwaarden even aandachtig door:

• Je moet 18 jaar of ouder zijn.
• Het moet gaan om een nieuwe verzekering (als je verlengt bij je huidige verzekeraar (ook al sluit je een andersoortige verzekering af) dan geldt dat hier niet als overstappen.
• Alle genoemde cashbacks gelden altijd voor elk eigen risico.

Zo werkt de zorgverzekerings-cashback

Wil jij 2026 financieel goed beginnen? Volg dan deze stappen voor de perfecte tracking:

1. Maak een account aan op CashbackXL.
2. Klik bovenaan in de blauwe balk op Zorgverzekering 2026.
3. Bekijk in het overzicht welke verzekeraar via welke vergelijker (Poliswijzer, Zorgkiezer of Overstappen) beschikbaar is.
4. Klik op de link en start de vergelijking. Let op: accepteer alle cookies op de site van de vergelijker en zet je adblocker uit. Dit is noodzakelijk om de punten te kunnen registreren.
5. Sluit de verzekering af.
6. Je aankoop wordt geregistreerd en na goedkeuring in april 2026 kun je jouw punten verzilveren in euro's.

Waarom je CashbackXL kunt vertrouwen

CashbackXL is de grootste cashback-site van Nederland. De site registreert 97 procent van alle aankopen succesvol en scoort op Kiyoh een klantwaardering van een 9,0. Je ontvangt je uitbetaling maandelijks (of wanneer jij wilt, zonder minimumbedrag), krijgt de hoogste cashback-percentages en kunt terecht bij een toegankelijke klantenservice.