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
In drie stappen je eigen video als screensaver: zo doe je dat
© ID.nl
Huis

In drie stappen je eigen video als screensaver: zo doe je dat

De tijd dat een screensaver nodig was om je computerscherm te beschermen tegen inbranden, ligt ver achter ons. Vandaag is een screensaver vooral een manier om je computer een persoonlijk tintje te geven. Met een eenvoudige tool verander je je vakantiefilmpjes of familievideo's in een levendige screensaver die je scherm vult zodra de pc even pauze neemt.

Wat gaan we doen

We laten zien hoe je met PUSH Video Wallpaper een video omzet in een screensaver. Je kiest geschikte fragmenten, stelt een afspeellijst samen en activeert de screensaver in Windows. Daarna zie je precies hoe je de tool zo instelt dat hij alleen in ruststand draait.

Lees ook: Zo maak je je eigen AI-video met Bing Video Creator

Stap 1: Download PUSH VideoWallpaper

Voordat je een video als bureaubladachtergrond instelt, is het verstandig om eerst na te denken over de juiste clips. Voor een opvallend en toch rustig effect werkt een korte video die in een lus draait meestal het best. Met PUSH Video Wallpaper kun je bovendien een afspeellijst maken zodat meerdere clips elkaar automatisch opvolgen. Deze Windows-app is eenvoudig in gebruik en levert de beste resultaten. Je kunt video's afspelen vanaf de harde schijf, maar ook geanimeerde gifs en zelfs YouTube-fragmenten zijn mogelijk. Het programma is niet gratis: een licentie voor persoonlijk gebruik kost 9,95 euro en een thuislicentie voor vijf pc's 14,95 euro. Er is wel een gratis proefversie, waarbij alleen een klein watermerk rechtsonder zichtbaar is.

De eerste stap is het downloaden van PUSH Video Wallpaper (26 MB). Na het binnenhalen installeer je de tool met het bestand VideoWallpaper_setup.exe. Aan het einde van de installatie verschijnt een pop-up met de vraag of je PUSH Video Wallpaper meteen wilt starten en of je de app ook als schermbeveiliging wilt instellen. Vink beide opties aan en klik op Voltooien.

Selecteer zeker de optie Instellen als schermbeveiliging.

Stap 2: Instellingen

Via het pictogram in het systeemvak kun je met de rechtermuisknop de instellingen openen. Klik bovenaan op het kleine voorbeeldscherm om een afspeellijst samen te stellen. Er staan standaard enkele voorbeeldvideo's klaar. Verwijder die en voeg je eigen filmpjes toe die je als screensaver wilt gebruiken. Ga vervolgens terug naar het tandwieltje en schakel de optie Start with Windows uit. Klik ten slotte op Instellen als schermbeveiliging. De ontwikkelaar gaat ervan uit dat je de tool gebruikt als video-wallpaper. De screensaverfunctie is eigenlijk een extraatje. Door het automatisch opstarten uit te schakelen, gebruik je de app uitsluitend als screensaver en niet als dynamische bureaubladachtergrond.

Voeg de filmpjes toe aan de afspeellijst.

Stap 3: Als schermbeveiliger instellen

Herstart de pc en ga naar Instellingen / Persoonlijke instellingen / Vergrendelingsscherm / Schermbeveiliging. Hier kun je dan PUSH Video Screen Saver selecteren voor schermbeveiliging.

In de Persoonlijke instellingen selecteer je PUSH Video Wallpaper als schermbeveiliger.

Je video's naar een hoger niveau tillen?

Misschien is een vlogcamera iets voor jou!
▼ Volgende artikel
Waar voor je geld: vijf 65-inch televisies voor ieder budget
Huis

Waar voor je geld: vijf 65-inch televisies voor ieder budget

In de rubriek Waar voor je geld gaan we op zoek naar leuke aanbiedingen of producten met bijzondere eigenschappen. Dit keer hebben we een selectie van vijf 65-inch televisies voor je, met uiteenlopende prijzen van zo'n 800 tot 1.600 euro, voor ieder budget dus.

LG OLED65C46LA

Met de LG OLED65C46LA haal jij een televisie in huis die een groot 65‑inch scherm combineert met de uitstekende contrasten van OLED. Elke pixel kan individueel oplichten of uitstaan, zodat zwarte beelden echt donker worden en er geen achtergrondverlichting nodig is. In de praktijk levert dat scherp beeld en een prettige kijkhoek op, waardoor je zelfs vanuit de hoek van je woonkamer naar films of series kunt kijken. De 4K‑resolutie (3.840 × 2.160 pixels) zorgt ervoor dat ondertitels en fijne details bij natuurdocumentaires of sportwedstrijden scherp blijven.

Dankzij het 120 Hz‑paneel worden snelle bewegingen vloeiend weergegeven, wat vooral bij games of sport handig is. De tv draait op LG’s WebOS‑systeem; daarmee kun je eenvoudig navigeren tussen apps zoals Netflix, Disney+ en YouTube. Vier HDMI 2.1‑poorten bieden ruimte voor gameconsoles en randapparatuur. Ook beschikt de tv over eARC voor het doorgeven van geluid naar een externe soundbar.

De optimale kijkafstand

De juiste kijkafstand voor je televisie is belangrijk voor optimaal kijkcomfort en beeldkwaliteit. Een algemene vuistregel is dat je afstand ongeveer 2–3 keer de schermdiagonaal moet zijn. Zit je te dicht, dan worden scherpe details lastig te zien; te ver weg en je mist details.

Voor een 65-inch tv geldt dat de optimale kijkafstand dan ongeveer vier meter is. Het is dus niet heel logisch om te kiezen voor een grote televisie als de afstand vanaf de bank tot de plek waar de televisie staat, minder dan vier meter is.

Je kunt in zo'n geval ook kiezen voor een 43-inch of 55-inch televisie.

Samsung QE65Q73D

Als je graag een groot scherm wilt met levendige kleuren, dan is de Samsung QE65Q73D een model om naar te kijken. Deze QLED‑televisie heeft eveneens een schermdiagonaal van 165 centimeter, maar maakt gebruik van een Quantum‑Dot laag om licht om te zetten in een breed kleurvolume. Hierdoor zijn kleuren uit films, series of games aanwezig zonder dat je zelf iets hoeft bij te stellen. Met een verversingssnelheid van 100 Hz worden bewegingen soepel weergegeven en dankzij de Motion Xcelerator 120 Hz‑functie profiteer je bij gameconsoles die hogere verversingsfrequenties ondersteunen.

De 4K AI‑upscaler in Samsungs Quantum‑processor schaalt beelden op tot de volledige Ultra‑HD‑resolutie, zodat je oudere HD‑films scherper ervaart. Het besturingssysteem Tizen biedt toegang tot apps en streamingdiensten en je kunt via SmartThings andere

slimme apparaten bedienen. Er zijn vier HDMI‑poorten en wifi aan boord en energieklasse E geeft aan dat het verbruik gemiddeld is voor een groot QLED‑scherm.

LG OLED65G45LW

De LG OLED65G45LW uit 2024 is een zogeheten Gallery‑model, bedoeld om strak tegen de muur te hangen. Het scherm is slechts enkele centimeters dik, zodat het toestel in je interieur opgaat. Binnenin zit een OLED evo‑paneel met 4K‑resolutie, waardoor elk beeldpunt individueel wordt aangestuurd en kleurenkrachtig zijn. De televisie ondersteunt een verversingssnelheid van 120 Hz en biedt daardoor vloeiende beelden bij sport of snel bewegende films.

Via vier HDMI‑2.1‑aansluitingen kun je gameconsoles aansluiten en profiteren van variabele refresh rates. WebOS 8 vormt de basis voor het smart‑platform; hiermee navigeer je door apps en diensten en kun je via spraakassistenten als Google Assistant of Amazon Alexa de tv bedienen. De set wordt geleverd met een wandbeugel, zodat hij strak tegen de muur bevestigd kan worden.

LG OLED65B42LA

In de B‑serie van LG vind je de OLED65B42LA, een toestel dat in 2024 op de markt kwam. Deze televisie biedt de voordelen van OLED – elk pixel kan apart aan of uit – maar in een iets betaalbaarder segment dan de G‑ of C‑series. Het 65‑inch scherm combineert een 4K‑resolutie met een verversingssnelheid van 120 Hz. Hierdoor zijn bewegingen bij games of sportprogramma’s soepel en blijven details scherp.

WebOS maakt het mogelijk om streamingapps en live‑tv makkelijk te combineren en je kunt de tv bedienen met de meegeleverde Magic Remote. De televisie heeft vier HDMI‑poorten voor randapparatuur en ondersteunt eARC voor lossless audiotransport naar een soundbar of receiver. Door het slanke ontwerp staat de tv op twee subtiele pootjes of kun je hem aan de muur hangen via een VESA‑beugel.

Sony XR‑65A80L

Sony’s XR‑65A80L combineert een 65‑inch OLED‑scherm met het Google TV‑platform. Hierdoor kun je eenvoudig door streamingapps scrollen en de tv koppelen aan je Google‑account. Het XR‑paneel gebruikt Sony’s Cognitive Processor XR, die beelden analyseert en optimaliseert voor contrast en kleur. Met een vernieuwingsfrequentie van 120 Hz en ondersteuning voor HDMI 2.1 zijn snelle games of films geen probleem; variabele refresh rates en Auto Low Latency worden ondersteund.

De luidsprekers zitten achter het scherm verwerkt zodat het geluid direct uit het beeld lijkt te komen; met ondersteuning voor Dolby Atmos sluit je ook eenvoudig een soundbar aan. Vier HDMI‑poorten, wifi en Bluetooth zorgen voor verbinding met randapparatuur, en via de ingebouwde microfoon kun je spraakopdrachten geven. Dankzij de ingebouwde standaard kun je de tv neerzetten of via VESA aan de muur hangen. Het 55-inch model van deze televisie is eerder door ID.nl getest.