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
Hoor het verschil met de nieuwe Fresh 'n Rebel Clam Ace 2
© Fresh ’n Rebel
Huis

Hoor het verschil met de nieuwe Fresh 'n Rebel Clam Ace 2

Fresh 'n Rebel introduceert de Clam Ace 2, een draadloze over-ear koptelefoon die technologie en comfort slim samenbrengt. Hij klinkt niet alleen goed, maar past zich ook aan jou aan. Met gepersonaliseerd geluid, intelligente noise cancelling en een batterij die het moeiteloos meerdere dagen volhoudt is dit een koptelefoon die meebeweegt met jouw dag.

Partnerbijdrage - in samenwerking met Fresh 'n Rebel

Stilte wanneer jij dat wilt

Of je nu werkt, reist of ontspant: de Clam Ace 2 helpt je de juiste focus te vinden. Dankzij Adaptive Hybrid Active Noise Cancelling bepaal je zelf hoeveel van de wereld je hoort. De technologie filtert storend geluid weg, en jij bepaalt zelf hoeveel daarvan je wilt dempen. In de My Sound App stel je het niveau eenvoudig bij, afhankelijk van waar je bent – op kantoor, in de trein of thuis op de bank. Zo houd je zelf de controle over wat je wel en niet hoort.

Met de Ambient Sound Mode blijf je alert op wat er om je heen gebeurt. Het omgevingsgeluid wordt subtiel versterkt, zodat je bijvoorbeeld het verkeer hoort of iemand kort kunt aanspreken. De Quick Access-functie maakt het extra handig: houd kort de linkeroorschelp ingedrukt en je schakelt direct over naar hear-through, zonder instellingen te veranderen.

©Fresh ’n Rebel

Geluid dat zich aan jou aanpast

Iedereen hoort anders, en dat merk je pas echt met Personal Sound by Audiodo. Deze technologie, geïntegreerd in de My Sound App, meet met een gehoortest hoe goed jij verschillende frequenties waarneemt. Op basis daarvan wordt een geluidsprofiel aangemaakt dat de muziek afstemt op jouw gehoor. De lage tonen worden iets krachtiger waar nodig, de hoge juist helderder. Zo klinkt elke noot precies goed!

De app geeft bovendien volledige controle over je instellingen. Je kunt de equalizer aanpassen, knoppen een eigen functie geven, het volume begrenzen of batterijbesparing activeren. Alles in één overzichtelijke interface.

©Fresh ’n Rebel

Schakelen zonder onderbreking

De Clam Ace 2 ondersteunt Multipoint Bluetooth, waarmee je twee apparaten tegelijk kunt verbinden. Zo kun je moeiteloos wisselen tussen laptop en smartphone. Een inkomend telefoontje aannemen terwijl je muziek luistert of een video bekijkt? De koptelefoon schakelt automatisch over.

Tijdens gesprekken zorgen twee Environmental Noise Cancelling-microfoons dat je stem helder blijft, zelfs in een rumoerige omgeving. En met Wind Noise Cancelling blijft ook buiten het geluid helder, zelfs als het waait. Dankzij on-ear detectie pauzeert de muziek automatisch als je de koptelefoon afzet, en gaat hij verder zodra je hem weer opzet. Met het volumewieltje en de klikbare knop op de oorschelp bedien je muziek, noise cancelling en spraakassistent zonder je telefoon erbij te hoeven pakken.

©Fresh ’n Rebel

Dagenlang luisteren zonder opladen

Een van de grootste pluspunten van de Clam Ace 2 is de speeltijd. Met meer dan 100 uur luisteren op één lading hoef je nauwelijks nog aan opladen te denken. Zelfs met actieve noise cancelling ingeschakeld haal je nog 60 uur speeltijd, en met tien minuten snelladen heb je alweer acht uur muziek. Handig als je vaak onderweg bent.

Het draagcomfort is net zo goed doordacht. De zachte oorkussens vormen zich naar je oren, terwijl de flexibele hoofdband ook bij lange luistersessies prettig blijft zitten. Na gebruik klap je de Clam Ace 2 eenvoudig in en berg je hem op in het meegeleverde tasje.

Kleur en karakter

Fresh 'n Rebel staat bekend om zijn frisse kleuren, en dat zie je terug in de Clam Ace 2. Van subtiel Ice Grey en Storm Grey tot opvallender Dreamy Lilac, Dried Green, True Blue en Pastel Pink – er is altijd een uitvoering die bij je past. Welke kleur je kiest, maakt voor de prijs geen verschil: die is voor elke tint 99,99 euro.

©Fresh ’n Rebel

In het kort: dit zijn de belangrijkste features van de Clam Ace 2

  • My Sound App + Audiodo Personal Sound

  • +100 uur speelduur

  • Adaptive Hybrid Active Noise Cancelling

  • Multipoint Bluetooth (verbind 2 apparaten tegelijkertijd)

  • Ambient Sound Mode met Quick Access

Dit maakt de Clam Ace 2 bijzonder

De Clam Ace 2 past zich aan jou aan. Hij filtert storend geluid weg, stemt het geluid af op jouw gehoor met Personal Sound by Audiodo en houdt het moeiteloos dagenlang vol. Een slimme koptelefoon die meedenkt, comfortabel zit en altijd klaarstaat. Zoals het hoort. Zoals jíj het hoort!

▼ Volgende artikel
Waar voor je geld: 5 platenspelers met klep voor minder dan 275 euro
© © Przemek Klos
Huis

Waar voor je geld: 5 platenspelers met klep voor minder dan 275 euro

In de rubriek Waar voor je geld gaan we op zoek naar bijzondere producten voor een mooie prijs. Vinyl is de laatste jaren weer helemaal terug, maar die kun je natuurlijk alleen afspelen op een platenspeler. Wij vonden vijf interessante modellen voorzien van een stofklep, voor minder dan 275 euro.

Platenspelers worden steeds vaker aangeboden, en ook op Kieskeurig.nl zien we ze meer en meer in de verschillende aangesloten webshops. Wij vonden vijf mooie exemplaren voor je die ook nog eens zijn voorzien van een klep om het mechanisme en je platen te beschermen tegen stof.

Sony PS-LX310BT

De Sony PS-LX310BT is een volautomatische platenspeler. Dit betekent dat je met een druk op de knop de arm naar de plaat kunt bewegen om het afspelen te starten. Aan het einde van de plaat keert de arm automatisch terug naar zijn beginpositie. De speler is aangedreven met een snaar. Een kenmerkende functie is de ingebouwde Bluetooth-zender, waarmee je het geluid van je vinyl draadloos kunt doorsturen naar een Bluetooth-speaker, -soundbar of -hoofdtelefoon.

Mocht je de voorkeur geven aan een bekabelde opstelling, dan kan dat ook via de RCA-uitgang. De platenspeler heeft een ingebouwde phono-voorversterker. Dit maakt het mogelijk om de speler direct aan te sluiten op een versterker of actieve luidsprekers die geen speciale phono-ingang hebben. De aluminium draaischijf is ontworpen om trillingen te minimaliseren en een stabiele rotatie te waarborgen. De meegeleverde stofkap beschermt de plaat en de naald tegen stof.

Lenco L-3808

Bij de Lenco L-3808 heb je te maken met een direct aangedreven platenspeler, wat inhoudt dat de motor de draaischijf direct aandrijft zonder tussenkomst van een snaar. Dit zorgt voor een snelle start- en stoptijd. Een bijzondere eigenschap is de USB-aansluiting. Hiermee kun je de platenspeler verbinden met een computer om je vinylplaten te digitaliseren.

Verder beschikt dit model over een ingebouwde phono-voorversterker, die je naar wens kunt in- of uitschakelen. Hierdoor kun je hem aansluiten op een breed scala aan audiosystemen, zowel met als zonder specifieke phono-ingang. De arm is S-vormig en voorzien van een afneembare headshell, wat het wisselen van het element vereenvoudigt. De aanwezigheid van pitch control geeft je de mogelijkheid om de afspeelsnelheid handmatig fijn te stellen. Een doorzichtige stofkap houdt stof op afstand.

Audio-Technica AT-LP60XBT

De Audio-Technica AT-LP60XBT functioneert als een volautomatische, snaaraangedreven platenspeler. Het bedieningsgemak staat hierbij centraal: met knoppen voor start en stop kun je het afspeelproces eenvoudig beheren. De arm plaatst zichzelf op de groef en keert na afloop van de plaat vanzelf weer terug. Net als de Sony beschikt dit model over een geïntegreerde Bluetooth-functionaliteit. Dit maakt het mogelijk om draadloos verbinding te maken met maximaal acht verschillende Bluetooth-apparaten, zoals luidsprekers of een koptelefoon.

Voor een standaard opstelling is er een RCA-uitgang beschikbaar. De ingebouwde phono-voorversterker is uitschakelbaar, waardoor je de keuze hebt tussen aansluiting op een phono- of een lijningang van je versterker. De draaischijf is vervaardigd uit gegoten aluminium. Het meegeleverde element is een Dual Magnet-cartridge met een vervangbare naald. De stofkap is scharnierend en afneembaar.

Denon DP-29F

Dit model, de Denon DP-29F, is een snaaraangedreven en volautomatische platenspeler. Je bedient de speler met de start- en stopknoppen, waarna de toonarm automatisch naar het begin van de plaat beweegt en aan het einde weer terugkeert. Een belangrijk kenmerk is de ingebouwde, inschakelbare RIAA phono-equalizer. Dankzij deze voorversterker kun je de DP-29F direct aansluiten op een versterker of receiver via een standaard AUX- of lijningang, zonder dat een aparte phono-ingang nodig is.

De draaischijf is gemaakt van gegoten aluminium en de platenspeler wordt geleverd met een MM-element (Moving Magnet), zodat je na het aansluiten direct kunt beginnen met luisteren. Het geheel wordt beschermd door een stofkap die het mechanisme en je platen vrijhoudt van stof en vuil.

Lenco LBT-188

Ook deze Lencois uitgerust met een snaaraandrijving. Een opvallende functie van dit model is de ingebouwde Bluetooth-zender. Hiermee heb je de mogelijkheid om het geluid van je vinylplaten draadloos te streamen naar een compatibele Bluetooth-luidspreker of -hoofdtelefoon. Daarnaast is de platenspeler voorzien van een USB-aansluiting, waarmee je hem aan een computer kunt koppelen. Dit stelt je in staat om je platencollectie te digitaliseren.

De Lenco LBT-188 beschikt over een geïntegreerde phono-voorversterker, wat betekent dat je hem direct kunt aansluiten op de aux-ingang van vrijwel elke versterker of set actieve speakers. De toonarm is voorzien van een instelbaar contragewicht voor een nauwkeurige naalddruk. Het geheel wordt geleverd met een afneembare, doorzichtige stofkap die de draaitafel en de plaat beschermt.