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

Zo kun je programmeren in Python - Deel 3

Nu je hebt gezien hoe je gegevens structureert in lijsten en dictionary’s, wordt het tijd om ook in je programma’s wat structuur te brengen. In deze les ga je van start met de Python-ontwikkelomgeving Thonny en schrijf je je eerste Python-programma’s.

Tot nu toe heb je al je Python-opdrachten in een interactieve sessie in de Python-interpreter uitgevoerd. Dat is handig voor wat kleine berekeningen, maar voor complexere zaken dien je een volwaardig programma te schrijven. En dat gaan we in deze les dan ook doen, waarbij we ook veel opdrachten zien die Python aanbiedt om een programma op te bouwen.

Thonny

Als je Python-programma’s begint te schrijven die voor meer dienen dan eenvoudige bewerkingen, volstaat de Python-interpreter niet: je hebt dan een ontwikkelomgeving nodig die je helpt bij het opbouwen van je programma. In deze les gebruiken we Thonny, dat standaard wordt geïnstalleerd met Python vanaf versie 3.7.

Als je Thonny opstart, krijg je twee tekstvelden te zien. In het tekstveld bovenaan typ je je Python-programma in. Het tekstveld onderaan is een ‘shell’: dit is hetzelfde als de Python-interpreter die we in de vorige lessen gebruikten. Om kort wat opdrachten uit te proberen terwijl je een programma aan het schrijven bent, kan dit tekstveld handig zijn.

©PXimport

Waar of niet waar

Maar voordat we een programma schrijven, dienen we eerst nog één datatype van Python uit te leggen, en wel een heel eenvoudig: bool. Dit stelt een booleaanse waarde voor: waar of niet waar, of in Python: True of False. Heel wat functies en operatoren in Python geven een van deze waardes terug. Voer de volgende opdrachten maar eens in het shell-tekstveld van Thonny in:

>>> namen = ['lies', 'jan', 'kees', 'mireille', 'koen', 'rob']>>> 'kees' in namenTrue>>> 'aniek' in namenFalse>>> namen[0] == 'lies'True>>> namen[1] != 'kees'True>>> 2 < 5True>>> 2 > 5False>>> 3.1.is_integer()False>>> 3.0.is_integer()True

Zoals je ziet, kun je met in testen of een element zich in een lijst bevindt. Met == test je op de gelijkheid van twee objecten en met != op de ongelijkheid. Vergelijkingen zoals < (kleiner dan) en > (groter dan) geven ook een booleaanse waarde terug. Daarnaast heb je ook <= (kleiner dan of gelijk aan) en >= (groter dan of gelijk aan). En een functie zoals is_integer() is handig om van een float te bepalen of het een gehele waarde is.

Met booleaanse waarden zelf kun je ook ‘rekenen’, namelijk met de operatoren and, or en not. De uitdrukking xor y is True als x of y of beide objecten True zijn; x and y is True als beide objecten True zijn; en not x is True als x False is en andersom.

Waardes testen: if

Dan gaan we nu ons eerste Python-programma schrijven. Het programma vraagt de gebruiker om een geheel getal van 1 tot 10 in te vullen en toont het getal dan in een woord uitgeschreven. Maar als de gebruiker een getal kleiner dan 1 of groter dan 10 invult, krijgt hij een foutmelding. Het programma ziet er zo uit:

getallen = {1: 'één', 2: 'twee', 3: 'drie', 4: 'vier', 5: 'vijf', 6: 'zes', 7: 'zeven', 8: 'acht', 9: 'negen', 10: 'tien'}

getal = int(input("Voer een geheel getal van 1 tot 10 in: "))

if getal < 1:

print("Het getal is kleiner dan 1.")

elif getal > 10:

print("Het getal is groter dan 10.")

else:

print(getallen[getal])

Op de eerste regel maken we een dictionary aan met de getallen van 1 tot 10 als sleutel, met telkens als bijbehorende waarde een string met het getal in een woord uitgedrukt. Daarna roepen we de functie input aan met als argument een string met de vraag om een getal in te voeren. De functie input geeft als waarde de string terug die de gebruiker heeft ingevoerd. Die string zetten we met int om naar een geheel getal, op voorwaarde natuurlijk dat de gebruiker daadwerkelijk een getal heeft ingevoerd.

Daarna testen we met if getal < 1 of het getal kleiner is dan 1. In dat geval wordt de regel erna uitgevoerd. Als aan die eerste voorwaarde niet voldaan is, controleert Python de voorwaarde in de regel elif getal > 10. Zo ja, dan wordt de regel erna uitgevoerd; zo nee, dan wordt de regel na else: uitgevoerd.

Zo’n blok als hierboven kan meerdere controles met elif bevatten: die worden dan één voor één getest tot er aan een voorwaarde is voldaan. Overigens zijn de controles met elif en else optioneel. Je kunt dus eenvoudig alleen met if een voorwaarde testen: in het geval niet aan die voorwaarde is voldaan, gebeurt er niets en gaat het programma gewoon verder.

Voer je programma uit

Voer de code in het programmatekstveld van Thonny in. Je merkt dat Thonny de regels automatisch met vier tekens inspringt nadat je op Enter drukt na een regel met if, elif of else. Let op: zonder deze inspringing is de Python-code niet geldig. Nadat je de volledige code ingetypt hebt, sla je het bestand in Thonny op. Druk daarna op het groene icoontje met het driehoekje om het programma uit te voeren.

Als je een tikfout hebt gemaakt, krijg je in het onderste tekstveld een foutmelding te zien. Dat is bijvoorbeeld het geval als je een : op het einde van een regel met if, elif of else vergeet of als je de code niet correct inspringt. Verbeter dan je code en voer het programma opnieuw uit.

Je programma vraagt nu in het tekstveld onderaan om een getal van 1 tot 10 in te voeren. Test de verschillende onderdelen van je programma eens uit door een getal in te voeren dat te klein, te groot of binnen het bereik ligt. Na elke invoer druk je op Enter en krijg je het resultaat te zien. Voer het programma daarna opnieuw uit voor een volgende poging.

Programma’s op de opdrachtregel uitvoeren

Je hoeft je programma’s niet in Thonny uit te voeren. Als je op de Opdrachtprompt (onder Windows) of de Terminal (onder Linux of macOS) naar de directory gaat waarin je je Python-programma hebt opgeslagen, kun je het programma uitvoeren met de opdracht python3 naamvanprogramma.py.

Een bereik van getallen

Ons programma is ingewikkelder dan nodig. We hoeven eigenlijk niet te weten of het ingevoerde getal kleiner dan 1 is of groter dan 10: we willen gewoon weten of het in het gevraagde bereik van 1 tot 10 ligt. Daarbij kunnen we gebruikmaken van de functie range, die een bereik van getallen voorstelt. Zo kunnen we ons voorgaande programma vereenvoudigen tot:

getallen = {1: 'één', 2: 'twee', 3: 'drie', 4: 'vier', 5: 'vijf', 6: 'zes', 7: 'zeven', 8: 'acht', 9: 'negen', 10: 'tien'}

getal = int(input("Voer een geheel getal van 1 tot 10 in: "))

if getal - 1 in range(len(getallen)):

print(getallen[getal])

else:

print("Het getal ligt niet binnen het bereik van 1 tot 10.")

We hebben nu nog maar één test met if nodig, zonder elif. In die controle testen we immers of het ingevoerde getal in het bereik ligt. Dat bereik berekenen we door de lengte van de dictionary met getallen door te geven aan de functie range. Omdat Python altijd vanaf 0 begint te tellen, is het bereik voor die dictionary met lengte 10 gelijk aan de getallen van 0 tot 9. Maar omdat wij mensen vanaf 1 beginnen te tellen, trekken we 1 van het ingevoerde getal af voordat we testen of het getal zich in het bereik bevindt. En zo komen we aan deze regel:

if getal - 1 in range(len(getallen)):

Voorwaardelijke lussen

Ons programma heeft nog één groot minpunt: als de gebruiker een waarde buiten het bereik invoert, stopt het programma gewoon en moet de gebruiker het programma opnieuw uitvoeren. Waarom kan het programma in dat geval niet uit zichzelf opnieuw naar een getal vragen? Dat kan, namelijk met while:

getallen = {1: 'één', 2: 'twee', 3: 'drie', 4: 'vier', 5: 'vijf', 6: 'zes', 7: 'zeven', 8: 'acht', 9: 'negen', 10: 'tien'}

getal = 0

while getal - 1 not in range(len(getallen)):

getal = int(input("Voer een geheel getal van 1 tot 10 in: "))

print(getallen[getal])

In de regel met while testen we met not in of het ingevoerde getal zich niet binnen het bereik bevindt. In dat geval wordt de ingesprongen opdracht eronder uitgevoerd. En daarna gebeurt de test in de regel met while opnieuw, zolang het getal zich niet binnen het bereik bevindt. Pas wanneer het getal zich wel binnen het bereik bevindt, stopt het while-blok en gaat het programma verder met de laatste regel. Zo’n while-blok noemen we een lus, omdat het programma als het ware in rondjes draait zolang aan de voorwaarde op de while-regel is voldaan.

Let op: we kennen in het begin van het programma 0 toe aan de variabele getal zodat de while-lus de eerste keer sowieso wordt uitgevoerd.

Samenvatting

In deze les hebben we de stap gezet van afzonderlijke Python-opdrachten naar Python-programma’s. Dat deden we in de ontwikkelomgeving Thonny. We bekeken het datatype bool en werkten met voorwaarden in if-blokken en while-lussen. Daarbij maakten we ook gebruik van de functie range voor een bereik van getallen. We gebruikten input en print voor invoer en uitvoer. De volgende les besteden we volledig aan invoer en uitvoer, en bespreken we ook hoe je door elementen in een lijst of dictionary loopt.

Opdracht

Ons laatste programma heeft nog één nadeel: het vraagt bij de invoer van een getal buiten het bereik van 1 tot 10 gewoon opnieuw een getal zonder extra melding dat je iets verkeerds hebt ingetypt. Voeg die extra melding toe, zoals we wel in het programma met if hadden.

Uitwerking

getallen = {1: 'één', 2: 'twee', 3: 'drie', 4: 'vier', 5: 'vijf', 6: 'zes', 7: 'zeven', 8: 'acht', 9: 'negen', 10: 'tien'} getal = int(input("Voer een geheel getal van 1 tot 10 in: ")) while getal - 1 not in range(len(getallen)): print("Het getal ligt niet binnen het bereik van 1 tot 10.") getal = int(input("Voer een geheel getal van 1 tot 10 in: ")) print(getallen[getal]) Dit programma combineert de ideeën achter onze twee vorige programma’s. We initialiseren getal nu niet met 0, maar met de invoer van de gebruiker. Als deze eerste keer het getal onmiddellijk in het bereik van 1 tot 10 ligt, is aan de voorwaarde van de while-lus niet voldaan en wordt het getal getoond. In het andere geval wordt de lus gestart, waarbij zolang het getal niet in het bereik ligt de gebruiker een melding daarvan krijgt en de vraag om een getal in te voeren.

Cheatsheet

argument: een waarde die je aan een functie doorgeeft. bool (‘booleaanse waarde’): waar (True) of niet waar (False). if: een test of er aan een voorwaarde is voldaan. ontwikkelomgeving (development environment): software die je ondersteunt bij het schrijven van programma’s. while: een lus die uitgevoerd wordt zolang er aan een voorwaarde is voldaan.

▼ Volgende artikel
Waar voor je geld: 5 compacte vrijstaande vaatwassers tot 250 euro
Huis

Waar voor je geld: 5 compacte vrijstaande vaatwassers tot 250 euro

Bij ID.nl zijn we dol op kwaliteitsproducten waar je niet de hoofdprijs voor betaalt. Een paar keer per week speuren we binnen een bepaald thema naar zulke deals. Heb je geen grote keuken maar zou je toch graag een vaatwasser willen? Wij vonden vijf betaalbare vrijstaande vaatvassers met een compact formaat voor je.

In niet iedere keuken is plek voor een vaatwasser en zeker als je geen inbouwruimte meer hebt, kan het lastig zijn om er eentje kwijt te kunnen. Maar er zijn ook vaatwassers met afwijkende formaten die een stuk kleiner zijn en daardoor ook makkelijk passen in een keuken die niet zo heel groot is. Wij vonden vijf betaalbare modellen voor je.

Tomado TDW5501B mini-vaatwasser

De Tomado TDW5501B is een compacte, vrijstaande vaatwasser die geschikt is voor zes couverts. Volgens de specificaties is de breedte 55 cm en bedraagt het geluidsniveau 47 dB. Het apparaat heeft verschillende programma’s, waaronder een kort programma, een eco‑stand en een intensief programma. De energieklasse is D, maar in ruil daarvoor krijg je een machine die weinig ruimte inneemt en eenvoudig op het aanrecht kan worden aangesloten. De startuitstel‑optie maakt het mogelijk de wasbeurt later te laten beginnen. De TDW5501B is ontworpen voor huishoudens met weinig ruimte die toch een volwaardige vaatwasbeurt willen.

Tomado TDW5501W

De TDW5501W is het witte broertje van de TDW5501B. Dit model heeft eveneens een breedte van 55 cm en biedt plaats aan zes couverts. Het geluidsniveau is 47 dB en de energieklasse D, net als bij de zwarte variant. Er zijn meerdere programma's, waaronder een eco- en een kort programma. De vaatwasser is vrijstaand, maar vanwege het lage formaat zet je 'm het best op een aanrecht en sluit je hem aan via een slang op de kraan. Dankzij de startuitstel‑functie kun je zelf bepalen wanneer hij begint met spoelen.

Beko DTC36610W

De Beko DTC36610W is een compacte vrijstaande vaatwasser voor huishoudens met beperkte ruimte. De machine is 55 cm breed en heeft een geluidsniveau van 49 dB. Met energieklasse A+ is hij zuiniger dan veel andere mini‑vaatwassers. Het apparaat is geschikt voor zes couverts en biedt verschillende programma’s om lichte en intensieve vaat schoon te krijgen. Omdat hij niet ingebouwd hoeft te worden, kun je hem gemakkelijk op het aanrecht of in een kleine keuken plaatsen.

Inventum VVW4530AW

De Inventum VVW4530AW is een smalle vrijstaande vaatwasser met een breedte van slechts 44,8 cm. Het toestel is geschikt voor tien couverts en beschikt over een verstelbare bovenkorf en startuitstel, zodat je de indeling en het wasprogramma kunt aanpassen. De energieklasse is E en het geluidsniveau bedraagt 47 dB. Het voordeel van deze vaatwasser is dat hij de normale hoogte heeft van een gewoon model, je schuift hem daardoor eenvoudig onder een werkblad of plaatst hem vrij.

Inventum VVW5520

De Inventum VVW5520 is een mini-vaatwasser voor zes couverts. Het apparaat is onderbouw (dus vrijstaand) en heeft een breedte van 55 cm, een diepte van 50 cm en een hoogte van 44 cm. Het geluidsniveau is 47 dB en de energieklasse D. In de specificaties worden een resttijdindicator, condensdroging en uitgestelde start genoemd. De machine is bedoeld voor kleine huishoudens die niet de ruimte of behoefte hebben aan een grote vaatwasser, bijvoorbeeld als je op kamers woont, een klein gezin hebt of een kleine keuken.

▼ Volgende artikel
Wat is wifi 6(E) eigenlijk en merk je echt verschil?
© A Stockphoto
Huis

Wat is wifi 6(E) eigenlijk en merk je echt verschil?

Heb je last van haperende streams of traag internet wanneer iedereen thuis tegelijk online is? Wifi 6 belooft dé oplossing te zijn voor overvolle netwerken en betere prestaties. Maar wat is deze nieuwe standaard precies en merk je in de praktijk echt verschil? We duiken in de voordelen van wifi 6 en de supersnelle wifi 6E-variant. Lees snel verder en ontdek of een upgrade voor jouw situatie de investering waard is.

Ben jij ook klaar met haperende videocalls of films die precies op het spannendste moment beginnen te bufferen omdat iedereen in huis tegelijk online is? Dan wordt het hoog tijd om kennis te maken met wifi 6, dat korte metten maakt met overbelaste netwerken. Maar is deze technologie echt een revolutie voor je dagelijkse internetgebruik of merk je in de praktijk eigenlijk weinig van die veelbelovende specificaties? In dit artikel duiken we dieper in de wereld van wifi 6 en zijn nog krachtiger broertje wifi 6E. We leggen helder uit wat de technische verschillen zijn en helpen je bepalen of een overstap voor jouw huishouden de investering waard is, zodat jij precies weet of je klaar bent voor de toekomst van razendsnel en stabiel draadloos internet.

Tijd voor een nieuwe wifi 6-router? Kijk snel op Kieskeurig.nl!

Efficiëntie is het hoofddoel

Wifi 6 is de huidige standaard voor draadloos internet, technisch ook wel bekend als 802.11ax. Waar voorgaande upgrades zich voornamelijk richtten op het verhogen van de maximale topsnelheid per apparaat, gooit wifi 6 het over een andere boeg. Het hoofddoel van deze technologie is niet alleen snelheid, maar vooral efficiëntie en capaciteit. Je kunt het vergelijken met een verbreding van de snelweg: je mag misschien niet veel harder rijden, maar doordat er meer rijbanen zijn en het verkeer slimmer wordt geregeld, sta je nooit meer in de file, zelfs niet tijdens de spits.

Het antwoord op de vraag of je het verschil echt merkt, hangt sterk af van je thuissituatie. Als je alleen woont en slechts één laptop en een telefoon gebruikt, zal de sprong van wifi 5 naar wifi 6 wellicht aanvoelen als een kleine, nauwelijks merkbare verbetering. Het echte verschil wordt pas duidelijk in een huishouden vol slimme apparaten. Wifi 6 excelleert namelijk in omgevingen waar meerdere mensen tegelijkertijd streamen, gamen en videobellen, terwijl op de achtergrond slimme thermostaten en deurbellen ook verbinding zoeken. De router kan met wifi 6 gelijktijdig data naar meerdere apparaten sturen in plaats van snel tussen alle apparaten te moeten wisselen, wat zorgt voor een stabielere verbinding zonder haperingen. Daarnaast communiceren wifi 6-routers efficiënter met je apparaten over wanneer ze moeten 'slapen' en 'wakker worden', wat een positief effect heeft op de batterijduur van je smartphone en laptop.

©YurolaitsAlbert

Snel over de VIP-strook

Om het plaatje compleet te maken is er ook nog wifi 6E. Dat is een uitbreiding van de wifi 6-standaard die gebruikmaakt van een volledig nieuwe frequentieband: 6 GHz. De traditionele 2,4GHz- en 5GHz-banden die we al jaren gebruiken, zitten inmiddels overvol met signalen van de buren, magnetrons en babyfoons. Wifi 6E opent als het ware een exclusieve VIP-strook waar alleen de allernieuwste apparaten gebruik van mogen maken. Hierdoor heb je geen last van interferentie en haal je extreem hoge snelheden met een zeer lage vertraging. Dat is echter alleen relevant als zowel je router als je ontvangende apparatuur (zoals je nieuwste smartphone) wifi 6E ondersteunen.

Al met al is de overstap naar wifi 6 of 6E zeker de moeite waard als je toe bent aan een nieuwe router en in een druk huishouden woont of in een appartementencomplex waar veel signalen door elkaar lopen. Je zult het verschil vooral merken in de stabiliteit van de verbinding wanneer iedereen thuis tegelijk online is. Voor wie weinig apparaten heeft en tevreden is met de huidige snelheid, is een directe upgrade minder noodzakelijk, al is het wel de standaard voor de toekomst.

🎯 Populairste merken routers in NL

TP-Link |  Netgear | Ubiquity AVM Fritz! | ASUS

Wi-Fi 6-routers worden op Kieskeurig.nl steeds populairder, vooral vanwege hun veel hogere snelheid, betere stabiliteit en het vermogen om veel apparaten tegelijk te verbinden zonder snelheidverlies. Merken als AVM (met de FRITZ!Box-serie), TP-Link (o.a. Deco en Archer), en Linksys (Velop) scoren daarbij hoog.

Aanraders per merk

AVM FRITZ!Box 5590 Fiber AON
Krachtige glasvezelrouter met 4×4 Wi-Fi 6, 2,5G-poort en uitgebreide mesh- en telefoniefuncties. Geschikt voor hoge snelheden via AON of XGS-PON. Reviewscore op Kieskeurig.nl: 9,5.

AVM FRITZ!Box 6690 Cable

High-end kabelrouter met ingebouwde DOCSIS-3.1-modem, 4×4 Wi-Fi 6 en een 2,5G-poort voor extra hoge snelheden. Ondersteunt DECT-smart-home, mesh en uitgebreide netwerkfuncties. Reviewscore op Kieskeurig.nl: 9,0.

TP-Link Deco X60 3-Pack

Mesh-systeem voor stabiele dekking door het hele huis met Wi-Fi 6-snelheden tot 2402 Mbit/s op 5 GHz. Inclusief WPA3-beveiliging en ouderlijk toezicht. Reviewscore op Kieskeurig.nl: 9,3.

Linksys Velop Pro 6E 2-Pack

Tri-band mesh-systeem met een snelle 6 GHz-band voor 4K/8K-streaming en lage latency, geschikt voor grotere woningen. Ondersteunt WPA3 en slimme netwerkoptimalisatie. Reviewscore op Kieskeurig.nl: 8,6.

TP-Link Archer AX73

Zeer snelle dual-band Wi-Fi 6-router met 5400 Mbit/s totale bandbreedte en sterke beveiliging (WPA3). Met vier gigabit-poorten en USB-aansluiting ideaal voor veeleisende huishoudens. Reviewscore op Kieskeurig.nl: 10,0.

🔟 Over de reviewscores op Kieskeurig.nlOp Kieskeurig.nl schrijven consumenten reviews over producten. Elke review moet voldoen aan kwaliteitscriteria: de reviewer moet aangeven of het product gekocht, gekregen of getest is, er mag geen misleidende taal in staan en de inhoud moet betrouwbaar zijn. Zo worden nep- of spamreacties tegengegaan. Bij de beoordeling zie je niet alleen het gemiddelde cijfer, maar ook hoeveel reviews er zijn. Zo krijg je meteen een indruk of de score op basis van één enkele review is of op basis van veel gebruikerservaringen.