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: vijf Android-tablets met een 10 inch-scherm en groter
© lev dolgachov
Huis

Waar voor je geld: vijf Android-tablets met een 10 inch-scherm en groter

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. Zoek je een goede tablet met een lekker groot scherm? We hebben vijf mooie exemplaren voor je gevonden.

Lenovo Tab M11 (ZADA0134SE)

Lenovo bewijst met zijn Tab M11 dat een goede tablet helemaal niet zo veel geld hoeft te kosten. Zo komen diverse onafhankelijke testers op Kieskeurig.nl tot een gemiddelde score van een 9. Vaak benoemde pluspunten zijn onder meer de hoge beeldkwaliteit, de lange accuduur en het goede geluid. Verder vinden gebruikers het prettig dat er al een stylus is inbegrepen. Handig voor wie graag tekeningen of handgeschreven notities maakt. Het lcd-scherm telt 1920 × 1200 pixels. De resolutie is weliswaar wat lager vergeleken met die van duurdere modellen, maar je kunt nog altijd films in Full-HD-kwaliteit streamen. De beelden ogen op het 11inch-scherm dan ook scherp. Ondanks de lage aanschafprijs heeft deze stevige tablet een metalen behuizing.

Voor het opslaan van apps en eigen data bevat de Tab M11 128 GB intern geheugen. Breid dat desgewenst uit met een eigen microSD-kaart van maximaal 1 TB. Het rekencentrum bestaat uit de veelgebruikte MediaTek Helio G88-processor en 4 GB werkgeheugen. Voor basistaken als e-mailen, internetten, webwinkelen en video's streamen is dat ruimschoots voldoende.

Samsung Galaxy Tab S9+ WiFi

Zoek je een krachtige tablet met een groot scherm? De Samsung Galaxy Tab S9+ WiFi heeft amoledscherm van 12,4 inch. Dat is een prettig formaat om bijvoorbeeld de digitale krant te lezen of Netflix-series te bingewatchen. Verder draait de aanwezige Qualcomm Snapdragon 8 Gen 2-processor zijn hand niet om voor zware taken, zoals het spelen van 3D-games of monteren van video's. Deze chipset bevat acht rekenkernen waarvan de snelste cores zijn afgeregeld op een maximale klokfrequentie van 3,36 GHz. In combinatie met 12 GB werkgeheugen kun je vlot op deze tablet werken. Gebruik hiervoor eventueel de bijgesloten drukgevoelige stylus.

Voor beeldbewerkingen komt de respectabele resolutie van 2800 × 1752 pixels goed van pas. Foto's en video's ogen hierop haarscherp. Daarnaast ondersteunt het amoledscherm een vernieuwingsfrequentie van 120 hertz. Je speelt dus snelle games zonder haperingen. De basisuitvoering heeft 256 GB interne opslag. Kies tussen de kleurstellingen grafiet en beige. Je kunt de Galaxy Tab S9+ WiFi ook met 512 GB interne opslag kopen (grafiet/beige). Overigens heeft de waterdichte behuizing een microSD-kaartslot, waardoor je de opslagcapaciteit eenvoudig met maximaal 1 TB kunt uitbreiden.

Xiaomi Pad 6

De Xiaomi Pad 6 is een krachtige tablet die zich richt op zowel entertainment als productiviteit. Het absolute hoogtepunt is het 11-inch WQHD+ scherm met een verversingssnelheid van 144Hz. Dit zorgt voor een aanzienlijk vloeiender beeld. Onder de motorkap vind je een snelle Snapdragon 870-processor, waardoor zware apps en games moeiteloos draaien.

De tablet heeft een luxe, volledig metalen behuizing en vier luidsprekers met Dolby Atmos-ondersteuning voor een ruimtelijk geluid. De accu van 8840 mAh gaat lang mee en laadt snel op (33W). Let wel dat de optionele stylus niet standaard wordt meegeleverd.

Logicom Tab XXL

De naam zegt het al: de Logicom Tab XXL is een grote tablet voor wie graag wat meer ruimte op het scherm heeft. Met het grote 14,1-inch display kijk je comfortabel films en series, lees je makkelijk langere teksten en heb je genoeg overzicht als je meerdere apps tegelijk gebruikt. Hij leent zich goed voor dagelijkse dingen zoals surfen op internet, mailen, videobellen en het gebruiken van bekende Android-apps. Ook voor thuiswerken of studeren is het grote scherm prettig, bijvoorbeeld bij het bekijken van documenten of online vergaderingen.

De camera’s zijn handig voor videogesprekken en snelle foto’s, terwijl wifi en bluetooth het eenvoudig maken om accessoires zoals een koptelefoon of toetsenbord te koppelen. Door de flinke batterij kun je de tablet langere tijd gebruiken zonder steeds naar een oplader te hoeven grijpen. De meegeleverde hoes maakt het geheel net wat praktischer in gebruik, zowel op de bank als aan tafel.

Lenovo Tab P12 (ZACH0112SE)

De Lenovo Tab P12 heeft een schermdiagonaal van 12,7 inch. De resolutie is met 2944 × 1840 pixels eveneens prima op orde, zodat je foto's en video's in een hoge kwaliteit kunt bekijken. Verder heeft de fabrikant ook aan een goed geluid gedacht. De metalen behuizing bevat vier minispeakers van het bekende audiomerk JBL. Een bluetooth-koptelefoon koppelen kan uiteraard ook.

De Tab P12 geschikt voor alledaagse apps, zoals Facebook, YouTube, Chrome en simpele spelletjes. es rekenkernen presteren op 2 GHz, terwijl de twee resterende cores zijn geklokt op 2,6 GHz. Deze tablet heeft daarnaast 8 GB werkgeheugen en 128 GB interne opslag. Overigens breid je de opslagcapaciteit makkelijk uit met een eigen microSD-kaart van maximaal 1 TB. Lenovo levert bij dit product een stylus mee. Benieuwd naar ervaringen van andere gebruikers? Lees dan deze reviews op Kieskeurig.nl.

▼ Volgende artikel
Nieuwe Philips Airfryer Dual Stacked 4000 bespaart bijna de helft aan ruimte op het aanrecht
© Philips
Huis

Nieuwe Philips Airfryer Dual Stacked 4000 bespaart bijna de helft aan ruimte op het aanrecht

Philips breidt zijn assortiment heteluchtfriteuses uit met de Airfryer Dual Stacked 4000-serie. Je ziet meteen waar de naam vandaan komt: de twee bakmanden zijn gestapeld (stacked). Hierdoor neemt het apparaat tot 45 procent minder ruimte in op het aanrecht dan traditionele dubbele airfryers, terwijl de totale inhoud met 10 liter gelijk blijft aan grotere modellen.

Philips is niet de eerste die met een verticaal ontwerp komt. Merken als Ninja (met de Double Stack) en Princess hebben al soortgelijke modellen. Het is een duidelijke trend in de keukenmarkt: consumenten willen wel de voordelen van twee mandjes, maar hebben geen zin in een apparaat dat het halve aanrecht in beslag neemt.

De Philips Airfryer Dual Stacked 4000-serie richt zich vooral op huishoudens met kleine(re) keukens. De twee manden hebben elk een capaciteit van 5 liter, zodat je bijvoorbeeld vlees in de ene mand en groenten in de andere kunt bereiden. De synchronisatiefunctie zorgt ervoor dat beide zones op precies hetzelfde moment klaar zijn, ook als de bereidingstijden verschillen.

©Philips

Voor de bereiding leunt Philips op de bekende RapidAir-technologie, waarbij hete lucht met hoge snelheid door de manden circuleert. Volgens de fabrikant zorgt dat voor een gelijkmatige garing met weinig of geen olie. Handig zijn de kijkvensters: je houdt het bakproces in de gaten zonder dat je de laden hoeft te openen. Zo ontsnapt er niet onnodig warme lucht.

Je bedient de airfryer via een digitaal touchscreen met dertien voorgeprogrammeerde instellingen voor bekende gerechten. Wil je meer controle, dan kun je de temperatuur en tijd ook handmatig per mand instellen.

Ook handig: na afloop kunnen de losse onderdelen in de vaatwasser, wat het schoonmaken na het koken makkelijker maakt.

©Philips

Beschikbaarheid

De Philips Airfryer Dual Stacked 4000-serie is per direct verkrijgbaar bij diverse elektronicaspeciaalzaken en online winkels. Het apparaat heeft een adviesprijs van 229,99 euro.

Wat is RapidAir-technologie?

De meeste airfryers werken als een kleine heteluchtoven, maar de RapidAir-techniek van Philips onderscheidt zich door de vorm van de bodem in de bakmand. Deze heeft vaak een stervormig profiel (de 'zeespiegelbodem'). Hierdoor wordt de opstijgende hete lucht krachtig teruggekaatst en ontstaat er een werveling. Dit zorgt ervoor dat het voedsel van alle kanten direct wordt geraakt door de hitte, wat resulteert in een krokantere buitenkant zonder dat het product uitdroogt.