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
Review Dreame V30 – Doet niet onder voor een Dyson
© Wesley Akkerman
Huis

Review Dreame V30 – Doet niet onder voor een Dyson

De meeste mensen zullen het merk Dreame inmiddels kennen als een fabrikant van robotstofzuigers en nat-droogstofzuigers. Maar het Chinese bedrijf maakt ook steelstofzuigers die onder meer de concurrentie aangaan met Dyson en Samsung, met als laatste wapenfeit de Dreame V30 die we in deze recensie behandelen.

Uitstekend
Conclusie

Hoewel de Dreame V30 echt geen perfecte steelstofzuiger is, is dit wel een prettig apparaat waarmee je flink wat gedaan krijgt. De zuigkracht is hoog genoeg, de bediening is eenvoudig en het onderhoud is minimaal. De wendbaarheid, het plaatsen op de oplaadbasis en de laser op de kop laten nog wat te wensen over, maar je haalt dan ook geen Dyson of AI Jet van Samsung in huis. In het kader van gemak en prijs-kwaliteit is de Dreame V30 dan ook een dikke aanrader.

Plus- en minpunten
  • Knikbare stang
  • Genoeg zuigkracht
  • Verschillende opzetstukken
  • 90 minuten gebruikstijd
  • Betaalbaar t.o.v. concurrentie
  • Kop wat minder wendbaar
  • V30 op basis plaatsen onwennig
  • Laser laat te wensen over

In vergelijking met de concurrentie is de Dreame V30 in elk geval een stuk betaalbaarder. De steelstofzuiger heeft een adviesprijs van 599 euro. Nog steeds een hele hoop geld, maar hij is online her en der gelukkig al voor minder te vinden. Je krijgt er bovendien niet alleen allerlei accessoires bij (zoals verschillende opzetstukken), ook zit er een oplaadstation in de verpakking. Als je de V30 daar op parkeert, inclusief zijn batterij, dan laadt hij het apparaat netjes voor je op. Ook is er ruimte voor het opbergen van de andere stofzuigermonden.

Het plaatsen van de Dreame V30 vergt even wat oefening en voelt wat onhandig aan. Zeker wanneer je nog een tweede zuigmond op de basis klikt. Je moet daar dan omheen manoeuvreren, terwijl je een vrij smalle opening zoekt waar de contactpunten voor het opladen samenkomen. Het gaat een stuk makkelijker zonder accessoires die in de weg zitten, maar we vinden het juist zo handig dat we die ook op de basis kwijt kunnen. Dat levert een klein dilemma op.

©Wesley Akkerman

Premium ontwerp

Qua ontwerp doet de Dreame V30 niet onder voor de concurrentie. De handgreep ligt comfortabel in de hand en het geheel heeft een premium uitstraling. Net als bij andere steelstofzuigers maakt Dreame gebruik van kunststof, maar daardoor is het gewicht ook prima. Met iets meer dan 2 kilo aan de pols houd je het best een hele stofzuigronde uit. Hoewel de steel uitschuift, kun je hem niet verhogen, maar hij komt met 1,1 meter gelukkig hoog genoeg.

Dankzij de batterijcapaciteit van 3200 mAh houdt de Dreame V30 het tot 90 minuten uit op een volle accu, mits je de gewone stand gebruikt. Zet je hem in de turbomodus, waardoor je volledig toegang krijgt tot de 330 watt aan zuigkracht, dan slinkt het aantal gebruikersminuten al snel. Dat is niet vreemd voor een steelstofzuiger, maar wel iets om rekening mee te houden. Opladen duurt met 4 uurtjes niet uitzonderlijk lang en is vergelijkbaar met concurrerende stofzuigers.

©Wesley Akkerman

Dreame V30 in de praktijk

De stofzuigprestaties zijn gelukkig van hoog niveau. De Dreame V30 wordt geleverd met een kop voor harde vloeren en een kop voor zachte oppervlakken, en in beide gevallen zijn we tevreden over de prestaties. Haren, zand, wat grover vuil en zelfs kiezelsteentjes zijn niet veilig voor het stofzuigmonster. De stand heeft bovendien een handige functie waarmee je de buis 90 graden kunt knikken, waardoor je makkelijker onder stoelen, tafels en banken komt.

In de kop zit verder een kleine laser waarmee je haren en stof op de grond ziet liggen. Daar waar die bij Dyson vaak de grond over de hele breedte van de zuigkop belicht, zien we hier dat de laser aan de zijkant zit. Daardoor zie je in feite maar de helft van het vloeroppervlak. Maar wát je ziet, valt gelukkig nog steeds op. Je zult alleen wat vaker heen en weer lopen om zeker te weten dat er niets meer op de grond ligt. Zal vast iets met patenten te maken hebben, maar is toch een beetje onhandig.

©Wesley Akkerman

Volle (zuig)kracht vooruit

Bij sommige steelstofzuigers gebeurt het nog weleens dat de zuigkracht automatisch omlaag wordt geschroefd zodra je de kierenzuiger pakt, bijvoorbeeld voor in de auto of tussen bankkussens. Irritant. Maar dat doet de Dreame V30 dus níet. Die houdt altijd toegang tot drie standen: auto, laag en max. Ook met opzetstukken. Daardoor is dit model net zo bruikbaar voor snelle schoonmaakklusjes in huis als voor het uitzuigen van kruimels en zand in de auto.

De bediening werkt simpel via twee knoppen onder het kleurrijke lcd-scherm. Daarmee wissel je tussen zuigstanden en zie je welk vuil hij precies naar binnen trekt. Wel merk je dat de stofzuiger niet altijd even soepel stuurt en dat de vloerborstel wat stroef kan aanvoelen. Het onderhoud daarentegen is eenvoudig: alle onderdelen klik je los en maak je zelf schoon wanneer het apparaat daar aan toe is.

Dreame V30 kopen?

Hoewel de Dreame V30 echt geen perfecte steelstofzuiger is, is dit wel een prettig apparaat waarmee je flink wat gedaan krijgt. De zuigkracht is hoog genoeg, de bediening is eenvoudig en het onderhoud is minimaal. De wendbaarheid, het plaatsen op de oplaadbasis en de laser op de kop laten nog wat te wensen over, maar je haalt dan ook geen Dyson of AI Jet van Samsung in huis. In het kader van gemak en prijs-kwaliteit is de Dreame V30 dan ook een dikke aanrader.

▼ Volgende artikel
ZinVolt helpt je kiezen: thuisbatterij kopen of wachten?
© ZinVolt
Energie

ZinVolt helpt je kiezen: thuisbatterij kopen of wachten?

De salderingsregeling loopt op z’n eind, terugleverkosten stijgen en de winter staat voor de deur. Is het slim om nu al een thuisbatterij te kopen of kun je beter nog even wachten? We zetten de belangrijkste feiten, voordelen en overwegingen op een rij, met de ZinVolt Base als voorbeeld van hoe toegankelijk energieopslag inmiddels is geworden.

Partnerbijdrage - in samenwerking met ZinVolt

De energiemarkt is volop in beweging. Steeds meer mensen met zonnepanelen merken dat hun terugleververgoeding daalt, terwijl vaste kosten juist stijgen. Energieopslag – je eigen zonnestroom bewaren voor later – klinkt dan steeds logischer. Toch twijfelen veel mensen: is het nú het moment om een thuisbatterij te kopen, of kun je beter nog even afwachten?

Waarom dit hét moment is om te oriënteren

De salderingsregeling stopt in 2027 in één keer. Tot die tijd mag je nog verrekenen wat je opwekt met wat je verbruikt, maar de vergoeding voor teruggeleverde stroom wordt steeds kleiner. Tegelijkertijd rekenen energiebedrijven hogere terugleverboetes voor stroom die je terug het net in stuurt. Kortom: zelf je zonnestroom gebruiken wordt steeds waardevoller, en juist dáár komt een thuisbatterij van pas. Daarmee laad je overdag op met zonne-energie en gebruik je die 's avonds, zonder het net te belasten.

©ZinVolt

Wat kost een thuisbatterij anno 2025?

De prijs hangt vooral af van de capaciteit. Een compacte batterij van 4 kWh kost rond de 3500 euro tot 4500 euro. Grotere systemen met 8 kWh of meer lopen richting de 6000 à 7000 euro, inclusief btw en installatie. Plug & play-systemen zoals de ZinVolt Base drukken die prijs flink, omdat er geen installateur nodig is: je steekt hem gewoon in het stopcontact en de slimme software doet de rest.

Daarnaast kun je bij het gebruik van een dynamisch energiecontract vaak 21 procent btw terugvragen. Dat scheelt honderden euro's en maakt de terugverdientijd een stuk korter.

Wat levert het op?

Een thuisbatterij maakt je minder afhankelijk van energieleveranciers. Je gebruikt meer van je eigen zonnestroom en minder dure netstroom tijdens piekuren. Bij een gemiddeld huishouden met zonnepanelen kan dat je honderden euro's per jaar schelen, afhankelijk van verbruik en contract.

Nog een voordeel: je hebt grip op je energiestromen. Een slimme batterij zoals de ZinVolt Base laadt automatisch op als stroom goedkoop is en levert terug als de prijs hoog is. Alles verloopt soepel via de meegeleverde app en de P1-dongle die met je slimme meter praat.

©ZinVolt

De winterfactor

Maar wacht even: 's winters wek je toch veel minder zonne-energie op? Klopt, maar juist dan kan een batterij handig zijn. Overdag laden met goedkope dalstroom, 's avonds gebruiken tijdens de duurdere piekuren – dat levert direct winst op bij dynamische contracten.

Daarnaast geeft het systeem een stukje zekerheid. De ZinVolt Base heeft bijvoorbeeld standaard een noodstroomstopcontact. Valt de stroom uit, dan blijven je koelkast, modem en verlichting gewoon aan. Handig, zeker gedurende de winter wanneer storingen vaker voorkomen.

Wachten of nu instappen?

Er zijn redenen om even af te wachten. De technologie wordt steeds efficiënter en prijzen dalen langzaam. Toch kiezen veel mensen ervoor om nu al te starten, juist omdat:

  • de salderingsregeling binnenkort echt verdwijnt

  • terugleverkosten blijven stijgen

  • levertijden oplopen nu de vraag toeneemt

  • btw-teruggave niet voor altijd gegarandeerd blijft

Een systeem zoals de ZinVolt Base is bovendien modulair: je kunt klein beginnen met 4 kWh en later uitbreiden naar 8 kWh of zelfs 24 kWh. Zo groei je mee met je huishouden, zonder opnieuw te hoeven investeren in een compleet ander systeem.

©ZinVolt

Wat de slimme keuze nu is

Wie zijn zonne-energie optimaal wil benutten, doet er goed aan zich nú te oriënteren. Wachten kan altijd, maar de kans is groot dat je dan hogere kosten hebt en langer op levering moet wachten.

Met een plug & play-oplossing zoals de ZinVolt Base kun je alvast klein beginnen. Je hebt geen installateur nodig, geen verbouwing in je meterkast en je kunt meteen profiteren van lagere netafhankelijkheid.

Persoonlijk advies van ZinVolt

Twijfel je nog of een thuisbatterij in jouw situatie loont? Bij ZinVolt kun je vrijblijvend een adviesgesprek aanvragen. Een expert bekijkt samen met jou je verbruik, zonnepanelen en toekomstplannen, zodat je precies weet wat slim is om te doen.
👉 Plan direct je adviesgesprek

De slimme stap vooruit

De thuisbatterij is niet langer toekomstmuziek, maar een logische volgende stap in slim energiegebruik. De ZinVolt Base laat zien hoe eenvoudig dat inmiddels kan: insteken, koppelen, klaar. Of je nu alvast wilt besparen of je voorbereidt op de winter, de stap naar energievrijheid begint hier. Reserveer de ZinVolt Base nu voor 50 euro en betaal bij levering het restbedrag!

👉 Ook een ZinVolt Base in huis?

Ontdek alle details en claim jouw plek via de officiële pre-orderpagina!