ID.nl logo
Zo kun je programmeren in Python - Deel 2
© Reshift Digital
Zekerheid & gemak

Zo kun je programmeren in Python - Deel 2

Na onze eerste kennismaking met Python is het tijd om wat complexere datastructuren te bekijken: lijsten en dictionary’s. We duiken ook in de structuur van strings, zodat je afzonderlijke letters kunt manipuleren. Start je Python-interpreter maar alvast op!

In de vorige les leerde je met drie datatypes in Python werken: int, float en str. Vooral int en float zijn vrij eenvoudige datatypes. Maar in veel programma’s heb je types met meer structuur nodig, we noemen dit ook wel datastructuren. In dit deel leer je met twee belangrijke datastructuren van Python werken.

Lijsten

In veel programma’s werk je niet met één specifiek gegeven, maar met een hele reeks. Een lijst (in Python list) is daarvoor ideaal. Zo maak je bijvoorbeeld een lijst met namen aan:

>>> namen = ['kees', 'jan', 'pieter', 'jan', 'joris', 'rob']>>> len(namen)

6

>>> lege_lijst = []

>>> len(lege_lijst)

0

De functie len, die we uit de vorige les kennen om de lengte van een string terug te geven, werkt ook op een lijst: dan krijg je het aantal elementen in die lijst.

Overigens kan een lijst elementen van verschillende types bevatten, zoals een float, twee strings en een int. Maar vaak heeft een lijst alleen elementen van hetzelfde type.

Functies, parameters en argumenten

Python deelt heel wat functionaliteit op in functies: stukjes code die een specifieke taak uitvoeren, zoals len om de lengte van een lijst of string op te vragen. Een functie kan een parameter hebben: een variabele waarmee de functie werkt en die als waarde het object krijgt dat je aan die functie doorgeeft. Dat object noemen we het argument van de functie. Een functie kan ook meerdere parameters (en dus argumenten) hebben. In deel 6 leer je je eigen functies definiëren en wordt dit allemaal nog veel duidelijker.

Elementen in een lijst

Python kent ook heel wat mogelijkheden om met de elementen in een lijst te werken. Zo vraag je eenvoudig een element uit de lijst op een specifieke positie (ook ‘index’ genoemd) op:

>>> namen[2]'pieter'

Merk op dat de positie in een lijst vanaf 0 begint te tellen: het eerste element is namen[0], het tweede namen[1], het derde namen[2] enzovoort. Je zou dan denken dat je het laatste element moet opvragen met:

>>> namen[len(namen)-1]'rob'

Dat werkt inderdaad, maar Python laat ook een negatieve positie toe, waarmee je vanachter in de lijst begint te tellen. Het laatste element heeft dan positie -1:

>>> namen[-1]'rob'>>> namen[-2]'joris'

Als je goed hebt opgelet, zie je dat de string ‘jan’ twee keer in bovenstaande lijst zit. Dat aantal keren kun je opvragen met de functie count:

>>> namen.count('jan')2>>> namen.count('pieter')1>>> namen.count('koen')0

Je kunt ook de positie van een element in een lijst opvragen:

>>> namen.index('jan')1>>> namen.index('pieter')2>>> namen.index('koen')Traceback (most recent call last):File "<stdin>", line 1, in <module>ValueError: 'koen' is not in list

Zoals je ziet krijg je een foutmelding (ValueError) als het gevraagde element zich niet in de lijst bevindt. Voor een element dat zich meerdere keren in de lijst bevindt, geeft de functie index alleen de eerste positie terug. Maar je kunt ook vragen om vanaf een specifieke positie te zoeken:

>>> namen.index('jan', 2)3

Een lijst veranderen

Als je een lijst hebt aangemaakt, kun je die nog altijd veranderen. In het eenvoudigste geval verander je bijvoorbeeld één element:

>>> namen['kees', 'jan', 'pieter', 'jan', 'joris', 'rob']>>> namen[1] = 'koen'>>> namen['kees', 'koen', 'pieter', 'jan', 'joris', 'rob']

Je kunt een lijst ook omdraaien of sorteren:

>>> namen.reverse()>>> namen['rob', 'joris', 'jan', 'pieter', 'koen', 'kees']>>> namen.sort()>>> namen['jan', 'joris', 'kees', 'koen', 'pieter', 'rob']

Verder kun je ook een element aan het einde van een lijst toevoegen, of op een specifieke positie tussen de andere elementen voegen:

>>> namen['jan', 'joris', 'kees', 'koen', 'pieter', 'rob']>>> namen.append('aniek')>>> namen['jan', 'joris', 'kees', 'koen', 'pieter', 'rob', 'aniek']>>> namen.insert(0, 'lies')>>> namen['lies', 'jan', 'joris', 'kees', 'koen', 'pieter', 'rob', 'aniek']>>> namen.insert(4, 'mireille')>>> namen['lies', 'jan', 'joris', 'kees', 'mireille', 'koen', 'pieter', 'rob', 'aniek']

Je kunt ook bestaande elementen verwijderen. Zo verwijder je met de functie remove(x) het eerste element waarvan de waarde gelijk is aan x:

>>> namen['lies', 'jan', 'joris', 'kees', 'mireille', 'koen', 'pieter', 'rob', 'aniek']>>> namen.remove('pieter')>>> namen['lies', 'jan', 'joris', 'kees', 'mireille', 'koen', 'rob', 'aniek']>>> namen.remove('pieter')Traceback (most recent call last):File "<stdin>", line 1, in <module>ValueError: list.remove(x): x not in list

Zoals je ziet, krijg je een foutmelding als je vraagt om een element te verwijderen dat niet in de lijst zit.

Je kunt ook een element op een gegeven positie verwijderen. Dat doe je met de functie pop:

>>> namen['lies', 'jan', 'joris', 'kees', 'mireille', 'koen', 'rob', 'aniek']>>> namen.pop(2)'joris'>>> namen['lies', 'jan', 'kees', 'mireille', 'koen', 'rob', 'aniek']

Als je goed hebt opgelet, zie je dat de functie pop niet alleen een element verwijdert, maar op de opdrachtregel ook als waarde het verwijderde element teruggeeft ('joris').

Snijden in een lijst

Python heeft een krachtige manier om een lijst in stukken te snijden: ‘slicing’. Herinner je de notatie [n] voor het n-de element? Met [n:] krijg je de elementen terug vanaf index n, met [:n] de elementen tot index n (niet inbegrepen) en met [m:n] de elementen van index m tot n (die laatste niet inbegrepen). Enkele voorbeelden maken dit duidelijk:

>>> namen = ['lies', 'jan', 'kees', 'mireille', 'koen', 'rob']>>> namen[1:]['jan', 'kees', 'mireille', 'koen', 'rob']>>> namen[:4]['lies', 'jan', 'kees', 'mireille']>>> namen[1:4]['jan', 'kees', 'mireille']

Omdat Python begint te tellen vanaf 0 en in de beginpositie van een slice het element zelf meerekent maar in de eindpositie niet, is de notatie van slicing nogal verwarrend. Het helpt daarom om deze posities te beschouwen als de posities van de komma’s in de lijst, te tellen vanaf 1. Alles tussen de komma’s op die posities is dan de gevraagde slice. Neem bijvoorbeeld namen[1:4]. Omdat namen gelijk is aan ['lies', 'jan', 'kees', 'mireille', 'koen', 'rob'], nemen we alles tussen de eerste en de vierde komma, dus van vóór 'jan' tot ná 'mireille', oftewel ['jan', 'kees', 'mireille'].

Slicing is ook een krachtige manier om een deel van een lijst te veranderen. Zo vervang je eenvoudig voorgaande slice in de lijst door een andere naam:

>>> namen['lies', 'jan', 'kees', 'mireille', 'koen', 'rob']>>> namen[1:4] = ['bas']>>> namen['lies', 'bas', 'koen', 'rob']

Nog eens strings

In een string krijg je net zoals in een lijst toegang tot het n-de element met de notatie [n]. Zo krijg je met 'aniek'[1] het tweede teken van de string 'aniek', of de letter n. Ook slicing werkt bij een string: 'aniek'[1:4] is gelijk aan nie. Maar let op: in tegenstelling tot een lijst kun je een string niet veranderen. De poging 'aniek'[1:4] = 'r' geeft een foutmelding.

Dictionary’s

In een lijst heeft elk element als index zijn positie, zodat je eenvoudig het element op een specifieke positie kunt opvragen. Een andere datastructuur is de ‘dictionary’, die als index voor zijn elementen een sleutel gebruikt, vaak een string of een getal. Elke sleutel van de dictionary moet uniek zijn, zodat je eenvoudig de waarde die bij een specifieke sleutel hoort kunt opvragen.

Een voorbeeld maakt duidelijk hoe je met een dictionary werkt:

>>> scores = {'lies': 5, 'bas': 2, 'kees': 1, 'aniek': 3}>>> scores['aniek']3>>> scores['bert']Traceback (most recent call last):File "<stdin>", line 1, in <module>KeyError: 'bert'>>> len(scores)4

Op deze manier kun je eenvoudig de score van een persoon opvragen op basis van zijn of haar naam. Je ziet hier ook dat je een foutmelding krijgt als je een element opvraagt met een index die niet in de dictionary bestaat.

Een dictionary kun je net zoals een lijst veranderen. Je kunt de waarde bij een specifieke sleutel veranderen, maar je kunt even eenvoudig een nieuw element toevoegen: ken gewoon een waarde toe aan een nieuwe sleutel. Bijvoorbeeld:

>>> scores{'lies': 5, 'bas': 2, 'kees': 1, 'aniek': 3}>>> scores['lies'] += 1>>> scores{'lies': 6, 'bas': 2, 'kees': 1, 'aniek': 3}>>> scores['bert'] = 1>>> scores{'lies': 6, 'bas': 2, 'kees': 1, 'aniek': 3, 'bert': 1}

Een sleutel en de bijbehorende waarde uit de dictionary verwijderen, doe je met het speciale keyword del:

>>> scores{'lies': 6, 'bas': 2, 'kees': 1, 'aniek': 3, 'bert': 1}>>> del scores['kees']>>> scores{'lies': 6, 'bas': 2, 'aniek': 3, 'bert': 1}

Samenvatting

In dit deel zijn we lang stil blijven staan bij een van de meest gebruikte datastructuren in Python: de lijst. De kennis die je hebt opgedaan over lijsten, kun je voor heel wat andere datatypes in Python hergebruiken. Zo toonden we hoe de notatie voor een index en voor ‘slicing’ hetzelfde is bij een string. Een ander belangrijk datatype dat je in dit deel zag, is de dictionary, waarin je geen positie maar een sleutel als index gebruikt. In het volgende deel verlaten we de interactieve Python-sessies en schrijven we onze eerste programma’s.

Opdracht 1

Je hebt de volgende lijst met namen: >>> namen = ['lies', 'jan', 'kees', 'mireille', 'koen', 'rob', 'aniek'] Splits deze lijst in zijn laatste element en de rest van de lijst.

Uitwerking opdracht 1

*>>> namen ['lies', 'jan', 'kees', 'mireille', 'koen', 'rob', 'aniek']

laatste_persoon = namen.pop() namen ['lies', 'jan', 'kees', 'mireille', 'koen', 'rob'] laatste_persoon 'aniek'* Dit is een veel gebruikte toepassing van de functie pop(), die niet alleen het element op een specifieke index verwijdert, maar ook het verwijderde element teruggeeft. Waarschijnlijk heb je deze opdracht opgelost met: laatste_persoon = namen.pop(-1) Maar de -1 is niet nodig: zonder index geeft de functie pop het laatste element terug.

Opdracht 2

Haal uit een string alle tekens behalve het eerste en het laatste.

Uitwerking opdracht 2

*>>> naam = 'aniek'

naam[1:-1] 'nie'* Slicing werkt bij een string exact zoals bij een lijst. Bovendien kunnen we ook gebruikmaken van een negatieve index in slicing: -1 verwijst dan naar het laatste element. Omdat Python begint te tellen vanaf 0 en in de beginpositie van een slice het teken zelf meerekent maar in de eindpositie niet, verwijst de slice [1:-1] dus naar alle tekens in de string behalve het eerste en het laatste.

Cheatsheet

datastructuur: een datatype dat uit elementen bestaat die met elkaar samenhangen. dictionary: een datastructuur waarin je elementen opvraagt aan de hand van een unieke sleutel. index (in een lijst): positie van een element in een lijst, te beginnen vanaf 0. index (in een dictionary): sleutel van een element waarmee het uit een dictionary op te vragen is. lijst: een datastructuur waarin je elementen opvraagt aan de hand van hun positie. slicing: het in stukken snijden van een lijst of string.

▼ Volgende artikel
Kerststress? In één uur je huis klaar voor de visite
© deagreez - stock.adobe.com
Huis

Kerststress? In één uur je huis klaar voor de visite

Het is bijna kerst en tussen het regelen van de laatste boodschappen door kijk je om je heen. De post ligt nog op tafel, er slingert speelgoed rond en een grote schoonmaak gaat niet meer lukken. Toch wil je dat je gasten in een net huis binnenkomen. Met een strak plan kun je in precies zestig minuten de perfecte illusie van een schoon huis creëren. Zet de timer, doe je favoriete muziek aan en ga aan de slag.

Dit gaan we doen

We focussen op wat je bezoek ziet en gebruikt. De hal en woonkamer ruimen we snel op, zonder alles schoon te boenen. Het toilet maken we fris in een paar minuten en in de keuken werken we rommel uit het zicht. Met licht, geur en frisse lucht zorgen we tot slot voor sfeer. Om het je extra makkelijk te maken, vind je onderaan een handig tijdschema.

Lees ook: 🎄 De kerstboom versieren: zo doe je dat snel én slim

Je begint waar je gasten binnenkomen. De hal is vaak een rommelige plek, zeker in de winter. Pak een grote mand of krat en gooi daar alles in wat er niet hoort: sjaals die niemand draagt, post, sleutels en rondslingerende tassen. Zet die mand tijdelijk weg in de berging, schuur of desnoods in je eigen kledingkast. Zorg dat er ruimte is aan de kapstok voor de jassen van je bezoek. Klop de deurmat even krachtig buiten uit en haal de stofzuiger snel door de gang. Als je hierna nog dertig seconden over hebt, veeg je met een doekje over de spiegel. Een schone spiegel en een lege vloer geven direct bij binnenkomst al het gevoel van een opgeruimd huis.

De woonkamer: sfeer boven perfectie

Door naar de plek waar jullie de meeste tijd zullen doorbrengen. In de woonkamer geldt nu de regel: opruimen is belangrijker dan boenen. Loop een rondje met een vuilniszak voor alles wat weg kan en een wasmand voor spullen die naar een andere kamer moeten. Maak de salontafel en bijzettafels helemaal leeg. Een leeg oppervlak oogt namelijk direct schoon, zelfs als je niet nat afneemt. Schud daarna de kussens op de bank flink op en vouw plaids netjes op. Haal de stofzuiger alleen door het midden van de kamer en langs de bank; vergeet de hoekjes en plinten, want daar kijkt vanavond niemand naar.

©Евгения Рубцова

Het toilet: kort maar krachtig

Dit is de enige plek waar je gasten echt even alleen zijn en stilzitten, dus hier moet het wel fris zijn. Gelukkig is de ruimte klein. Spuit wc-reiniger in de pot en laat dit even inwerken terwijl je de rest doet. Gebruik een wegwerpdoekje of een sopje voor de bril, de spoelknop, de deurklink en de kraan. Hang een schone handdoek op en controleer of er voldoende toiletpapier ligt. Heb je nog een geurkaarsje of geurstokjes? Zet die dan hier neer. Als het lekker ruikt, voelt je toilet al snel schoner aan.

Puntjes op de i in de keuken

Je hebt nu nog een kwartier over. Snel door naar de keuken. Zorg allereerst dat het aanrecht helemaal leeg is. Als het niet meer lukt om alles af te wassen, zet je de vuile vaat snel in de vaatwasser, ook als deze eigenlijk al vol is. Een andere slimme noodoplossing is om de vaat tijdelijk in een keukenkastje te verstoppen. Het gaat erom dat alles uit het zicht is. Haal tot slot nog even een doekje over het aanrecht en de kookplaat zodat alles weer fris oogt.

©APALKOV | MestoSveta - stock.adobe.com

Sfeer maken

Nu is het tijd voor de belangrijkste truc: het aanpassen van de verlichting. Dim de grote lampen en steek overal kaarsen en sfeerverlichting aan. Dat ziet er niet alleen heel gezellig uit, maar dat zachte licht zorgt er ook voor dat achtergebleven stof of verdwaalde kruimels niet meer opvallen. Tot slot doe je nog één ding voor de sfeer. Zet een raam op een kier voor frisse lucht of zet een pannetje op het vuur met wat water, kaneel en sinaasappelschil voor een heerlijke kerstgeur.

Klaar voor de bel

Kijk nu eens om je heen. Je huis is opgeruimd, het ruikt lekker en het is gezellig verlicht. Niemand die ziet dat je de bovenkant van de kasten hebt overgeslagen. Schenk wat te drinken voor jezelf in en adem uit. Laat die bel maar gaan!

TijdRuimteActieDe truc
00:00 - 00:10HalJassen weg, mat uitkloppen.Ruimte maken op de kapstok voor gasten
00:10 - 00:30WoonkamerRommel in mand, kussens opkloppen.Alleen het 'looppad' stofzuigen
00:30 - 00:45ToiletBril, klink en kraan poetsen.Schone handdoek en geurstokjes
00:45 - 00:55KeukenAanrecht leegmaken.Vaat verstoppen (tijdelijk!)
00:55 - 01:00SfeerLichten dimmen, kaarsen aan.Sinaasappelschillen koken voor de geur
▼ Volgende artikel
Verras je gasten: 5 keer de lekkerste koffie voor de feestdagen
© ID.nl
Huis

Verras je gasten: 5 keer de lekkerste koffie voor de feestdagen

Na een uitgebreid diner is de koffie vaak de afsluiter van de avond. In plaats van een standaard zwarte bak zet je met een paar simpele ingrediënten iets bijzonders op tafel. Je hoeft geen volleerd barista te zijn om indruk te maken; met wat kruiden of een restje chocolade geef je de koffie direct een feestelijke twist. Speciaal voor jou: vijf heerlijke koffierecepten.

Bij deze recepten draait het vooral om het contrast tussen de warme drank en de extra toevoegingen. Je kunt de smaken vaak al voorbereiden voordat de gasten aan tafel gaan, zodat je op het moment zelf niet te lang in de keuken staat. In de tabel onderin zie je telkens wat de basiskoffie voor een recept is en wat je extra toevoegingen zijn.

Lees ook: 5 veelgemaakte espressofouten (en zo voorkom je ze!)

Espresso met witte chocolade en kardemom

Witte chocolade is een goede match voor de sterke smaak van een espresso. Leg een paar blokjes witte chocolade onderin het glas en laat deze langzaam smelten door de hete koffie eroverheen te gieten. Als je een snufje kardemom door de melk mengt voordat je deze opschuimt, krijg je een heerlijke warme en kruidige geur. De kardemom zorgt ervoor dat de zoete chocolade niet de overhand krijgt, waardoor de koffiesmaak goed overeind blijft.

Tiramisu uit een glas

Je kunt de smaken van het bekende Italiaanse dessert ook gewoon drinken. Meng een sterke kop koffie met een drupje amandelsiroop voor de herkenbare smaak van amaretto, maar dan zonder de alcohol. In plaats van gewone melk kun je een mengsel van halfstijve slagroom en een beetje mascarpone bovenop de koffie leggen. Een flinke laag cacaopoeder over de room maakt het plaatje compleet. Dit koffierecept kan eigenlijk ook direct als vervanger van een dessert kan dienen, vooral het serveert met bijpassend koekje, zoals cantuccini of amaretti.

Mokka met sinaasappel en pure chocolade

De combinatie van pure chocolade en sinaasappel doet het altijd goed tijdens de feestdagen. Rasp de schil van een sinaasappel en roer dit samen met een blokje pure chocolade door je warme koffie totdat alles is opgelost. De olie uit de sinaasappelschil geeft een fris aroma dat heel goed samengaat met donker gebrande koffiebonen. Als je dit serveert met een klein stukje sinaasappelschil op de rand van het glas, ziet het er meteen feestelijk uit. De pure chocolade maakt de koffie wat dikker en voller, wat goed past bij een koude winteravond.

Karamel met een snufje zeezout

Gezouten karamel is al jaren populair en dat is niet zonder reden. Het zout versterkt namelijk de zoete tonen van de karamel en haalt tegelijkertijd de bittere randjes van de koffie af. Doe een scheutje karamelsiroop in je glas en voeg daar echt maar een heel klein beetje zeezout aan toe. Gebruik havermelk voor het schuim, omdat dit van zichzelf al een beetje romig en nootachtig smaakt. Het resultaat is een zachte koffie die het door de combinatie van zout en zoet bij bijna iedereen goed doet.

Koffie met honing en kaneel

Voor wie geen chocolade of room lust, is een combinatie van honing en kaneel een goed alternatief. Roer een goede lepel honing door de zwarte koffie en bestrooi de melkschuimlaag met wat kaneelpoeder. De honing geeft een andere soort zoetheid dan suiker en maakt de koffie zachter voor de keel. Het is een eenvoudige manier om een normale latte een feestelijke upgrade te geven met spullen die je waarschijnlijk al in je keukenkastje hebt staan. De geur van kaneel die van de warme melk afkomt, maakt meteen duidelijk dat het kerst is! 

©ID.nl

Zo maak je je koffie helemaal af

Je kunt de feestkoffie nog net wat mooier presenteren door aandacht te besteden aan de garnering. Een klein beetje kaneel, nootmuskaat of cacaopoeder op de melkschuimlaag doet bijvoorbeeld al wonderen. Gebruik een klein zeefje zodat de poeder gelijkmatig verdeeld wordt en er geen klontjes ontstaan. Voor een luxe effect kun je met een fijne rasp wat krullen van een blok pure of witte chocolade schaven. Dit smelt langzaam weg in het schuim en geeft bij elke slok een beetje extra textuur.

Ook met koekjes of fruit kun je creatief uit de hoek komen. Serveer de koffie met een typisch winters koekje op de schotel, zoals een speculaasje of een Italiaanse cantuccini. Een dunne reep sinaasappelschil die je even rond je vinger draait tot een krul staat erg chique aan de rand van het glas. Wil je echt uitpakken, dip de rand van het glas dan in wat water en daarna in suiker voor een bevroren effect. In plaats van een gewone lepel kun je tot slot een kaneelstokje in de koffie zetten, wat tijdens het drinken subtiel steeds meer smaak afgeeft.

ReceptBasisSmaakmakerTopping
Witte chocoladeEspressoWitte chocoladeKardemom
TiramisuSterke koffieAmandelsiroopMascarpone-room
Sinaasappel mokkaEspressoPure chocoladeSinaasappelrasp
Zoute karamelEspressoKaramelsiroopZeezout
Honing & kaneelLatteBloemenhoningKaneelpoeder

Drie espressomachines voor je feestkoffie

De'Longhi PrimaDonna Soul

Dit apparaat van De'Longhi is een zeer uitgebreide volautomaat. Dankzij de 18 voorgeprogrammeerde recepten zet je met één druk op de knop een krachtige espresso of een zachte latte. Voor wie van variatie houdt, biedt dit toestel ook de mogelijkheid om de sterkte van de koffie nauwkeurig aan te passen, zodat je altijd die gewenste sterke kop koffie krijgt. De machine is bovendien via een smartphone-app te bedienen.

Siemens EQ.500

De Siemens EQ.500-serie staat bekend om het gebruiksvriendelijke display waarbij je de koffiespecialiteiten direct via sensorvelden selecteert. Naast de standaard espresso en latte beschikt dit apparaat over de zogenaamde 'aromaDouble Shot'-functie. Hiermee zet je een extra sterke koffie door middel van een dubbel maal- en zetproces, zonder dat de koffie een bittere nasmaak krijgt.

Melitta Barista Smart T

De Melitta Barista Smart TS blinkt uit in veelzijdigheid met maar liefst 21 voorgeprogrammeerde recepten. Een groot voordeel is de fluisterstille molen, waardoor je zonder veel lawaai geniet van versgemalen bonen. Dankzij het dubbele bonenreservoir kun je bovendien eenvoudig wisselen tussen een milde boon voor je latte en een krachtige variant voor de espresso. De machine is via een handige app op je smartphone te bedienen. Met de 'My Coffee Memory'-functie sla je de persoonlijke voorkeuren van acht verschillende personen op.

Watch on YouTube