ID.nl logo
Zo kun je programmeren in Python - Deel 2
© PXimport
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
De geheime codes van Netflix: zo ontdek je verborgen genres en films
© Pavell
Huis

De geheime codes van Netflix: zo ontdek je verborgen genres en films

Netflix is voor veel mensen dé plek om een avond lang te bingewatchen of even snel iets op te zetten. Maar ondanks het enorme aanbod, voelt het soms alsof je steeds dezelfde titels voorbij ziet komen. Dat komt doordat Netflix je kijktips baseert op wat je eerder hebt bekeken. Handig, maar ook een beetje beperkend. Gelukkig bestaat er een manier om dat algoritme te omzeilen: met de zogeheten geheime codes van Netflix.

In dit artikel lees je:

📺 Geheime codes? Wat zijn dat? 📺 Hoe de geheime codes van Netflix werken 📺 Hoe je geheime codes kunt gebruiken op je televisie (spoler alert: met een omweg) 📺 Waarom de geheime codes van Netflix zo handig zijn 📺 Waar je alle geheime codes van Netflix kunt vinden

Lees ook: Zo reset je de Netflix-aanbevelingen

Wat zijn geheime codes?

De geheime codes van Netflix zijn simpele cijferreeksen die verwijzen naar specifieke categorieën in de catalogus van de streamingdienst. Elk genre, subgenre of niche heeft een eigen nummer. Door dat nummer toe te voegen aan een speciale url, kun je direct naar een overzichtspagina gaan waarin alleen titels binnen dat genre te vinden zijn. Denk aan 'klassieke sciencefictionfilms', 'spionagethrillers', 'anime voor volwassenen' of 'kindvriendelijke musicals'.

Deze codes zijn niet officieel geheim, maar worden ook niet actief gepromoot door Netflix. Ze bestaan al jaren en zijn vooral populair bij mensen die graag gericht zoeken. Wie eenmaal weet hoe het werkt, merkt al snel dat er een wereld aan verborgen films en series opengaat.

Hoe werkt het?

Om een geheime code te gebruiken, open je Netflix in een webbrowser (zoals Chrome, Firefox of Safari) en plak je de volgende URL in de adresbalk:

https://www.netflix.com/browse/genre/[code]

Vervang [code] door het getal van de categorie waarin je geïnteresseerd bent. Voorbeelden:

  • 1365 voor actiefilms

  • 5475 voor romantische komedies

  • 7424 voor anime

  • 8711 voor horrorfilms

  • 783 voor kinder- en familiefilms

  • 8933 voor thrillers

  • 47147 voor klassieke scifi- en fantasyfilms

Een concreet voorbeeld: als je benieuwd bent naar wat Netflix aanbiedt aan actiefilms, ga dan naar https://www.netflix.com/browse/genre/1365. Je komt dan uit bij een speciaal overzicht dat je normaal gesproken alleen via toeval of veel scrollen zou vinden.

Alleen via de browser

De geheime codes werken alleen als je Netflix opent in een browser op je computer, laptop of tablet. In de mobiele app of op je smart-tv kun je geen url invoeren. Gelukkig is er wel een omweg: open Netflix in een browser op je laptop of computer, gebruik daar de geheime codes om een interessante titel te vinden, en voeg die toe aan je kijklijst. Vervolgens kun je de titel gemakkelijk terugvinden op je tv via de zoekfunctie of direct in je kijklijst.

Waarom zie je soms niets?

Niet elke code levert resultaat op. Dat komt doordat het aanbod per regio verschilt. Netflix heeft voor elk land aparte licenties en laat alleen zien wat in jouw land – bijvoorbeeld Nederland – beschikbaar is. Sommige codes werken daardoor wel in de VS, maar leveren in Nederland een lege pagina op. Ook je taalinstellingen en kijkgedrag hebben invloed. Als je vooral Nederlandstalige of Franstalige content kijkt, krijg je minder snel Engelstalige nichefilms voorgeschoteld. Daarnaast wisselt het aanbod van Netflix regelmatig. Wat vandaag nog te zien is, kan morgen alweer verdwijnen.

Hierom zijn de geheime codes van Netflix zo handig

Voor wie vaak het gevoel heeft 'alles al gezien te hebben' op Netflix, zijn de geheime codes een uitkomst. Ze helpen je om films en series te vinden die niet in je standaard overzicht staan, maar wél op het platform aanwezig zijn. Het is ook een handige manier om buiten je gebruikelijke voorkeuren te zoeken. Stel dat je normaal alleen drama's kijkt, maar nu zin hebt in een jaren 70-horrorfilm of een Italiaanse misdaadserie, dan kun je met één code meteen in het juiste genre duiken. Wie graag films of series kijkt uit specifieke landen of tijdsperiodes, vindt via deze route ook makkelijker zijn weg.

©ink drop - stock.adobe.com

Alle geheime codes op één plek

Er zijn honderden geheime codes, en je hoeft ze gelukkig niet allemaal uit je hoofd te leren. Een van de meest actuele en overzichtelijke bronnen is de website https://www.netflix-codes.com. Daar vind je een uitgebreid overzicht van alle codes per categorie. Klik je op een code, dan word je direct doorgestuurd naar het juiste Netflix-overzicht. De site is Engelstalig, maar de links werken gewoon in Nederland – zolang de bijbehorende content in jouw regio beschikbaar is.

Tot slot

Netflix biedt veel, maar laat je meestal alleen zien wat het algoritme denkt dat je leuk vindt. Met de geheime codes neem je zelf het heft in handen. Ze geven je directe toegang tot het volledige genre-aanbod, zonder eindeloos te scrollen. Ideaal als je iets nieuws wilt ontdekken, of gewoon zin hebt in een specifiek soort film dat je anders nooit te zien zou krijgen. Typ eens een code in en kijk wat er gebeurt. Grote kans dat je op iets verrassends stuit.

Lekker voor erbij

🍿🍿🍿🍿🍿 Popcorn!
▼ Volgende artikel
Waar voor je geld: 5 slimme personenweegschalen voor minder dan 50 euro
© Nexa
Gezond leven

Waar voor je geld: 5 slimme personenweegschalen voor minder dan 50 euro

Bij ID.nl zijn we gek op producten waar je niet de hoofdprijs voor betaalt. Een paar keer per week speuren we daarom binnen een bepaald thema naar zulke deals. Wil je je gewicht goed in de gaten kunnen houden, dan is een personenweegschaal een must. Een digitale weegschaal is zeer nauwkeurig. Wij zochten vijf goed gewaardeerde exemplaren voor minder dan 50 euro.

Een digitale personenweegschaal biedt talrijke voordelen. Veel modellen hebben bijvoorbeeld extra functies zoals het meten van BMI, vetpercentage en spiermassa. Ze zijn gebruiksvriendelijk en vaak uitgerust met geheugen voor meerdere gebruikers. Een digitale weegschaal is eenvoudig af te lezen dankzij een duidelijk digitaal display. Door het moderne en compacte ontwerp past hij goed in elke badkamer. Wij vonden vijf modellen die werden gewaardeerd met een cijfer 8 en hoger op Kieskeurig.nl en die voorzien zijn van handige functies.

Inventum PW708ZW

De Inventum PW708ZW geeft – naast het gewicht – ook inzicht in vetpercentage, vochtpercentage, spiermassa en botmassa. Het apparaat heeft een geheugenfunctie voor maximaal 10 gebruikers, waardoor meerdere personen hun gegevens kunnen bijhouden. Het ontwerp is voorzien van een glazen weegoppervlak met roestvrijstalen accenten en een blauw verlicht LCD-display voor duidelijke aflezing.

Extra meetfuncties: vetpercentage, vochtpercentage, spiermassa en botmassa
App beschikbaar: Nee
Materiaal: Gehard glas met roestvrijstalen accenten
Maximum gewicht: 180 kg

Beurer BF195LE

De Beurer BF195LE is een digitale personenweegschaal die naast het gewicht ook lichaamsvet, lichaamswater, spiermassa, botmassa, BMI en caloriebehoefte (AMR) meet. Hij is uitgerust met een rond, blauw verlicht LCD-display en roestvrijstalen elektroden. Er kunnen gegevens van maximaal 10 gebruikers worden opgeslagen.

Extra meetfuncties: vetpercentage, vochtpercentage, spiermassa, botmassa, BMI en AMR
App beschikbaar: Nee
Materiaal:
Gehard glas met roestvrijstalen elektroden
Maximum gewicht:
180 kg

Medisana BS 440 Connect

Naast het meten van het gewicht kun je op deze weegschaal ook metingen van lichaamsvet, lichaamswater, spiermassa, botmassa, BMI en het basaal metabolisme (BMR) aflezen. De weegschaal maakt gebruik van ITO-elektroden die vrijwel onzichtbaar zijn op het glazen oppervlak, wat bijdraagt aan een strak en modern ontwerp. Met bluetooth-functionaliteit kunnen de meetgegevens draadloos worden gesynchroniseerd met de VitaDock+ app op iOS- en Android-apparaten, zodat je je gegevens makkelijk kunt bijhouden en analyseren.

Extra meetfuncties: vetpercentage, vochtpercentage, spiermassa, botmassa, BMI en BMR
App beschikbaar: Ja
Materiaal: Gehard glas met ITO-elektroden
Maximum gewicht:
180 kg

Medisana BSA42

De Medisana BSA42 kent naast het wegen ook lichaamsanalysefuncties, waaronder metingen van lichaamsvet, lichaamswater, spiermassa, botmassa, BMI en caloriebehoefte (BMR). Het apparaat ondersteunt bluetooth-gegevensoverdracht naar de VitaDock+ app en kan gegevens van maximaal 8 gebruikers opslaan. De weegschaal is voorzien van een groot LCD-display en roestvrijstalen elektroden.

Extra meetfuncties: vetpercentage, vochtpercentage, spiermassa, botmassa, BMI en BMR
App beschikbaar: Ja
Materiaal:
Gehard glas met roestvrijstalen elektroden
Maximum gewicht:
180 kg

Tefal Goodvibes Life BM9620

De Tefal Goodvibes Life BM9620 is een digitale personenweegschaal die 10 lichaamsmetingen biedt, waaronder gewicht, BMI, vetpercentage, spiermassa, botmassa en vochtpercentage. Het apparaat werkt met een app voor het bijhouden van gegevens en ondersteunt een onbeperkt aantal gebruikers. De weegschaal heeft een zwart glazen oppervlak met vier roestvrijstalen sensoren en een wit LED-display.

Extra meetfuncties: vetpercentage, vochtpercentage, spiermassa, botmassa en BMI
App beschikbaar: Ja
Materiaal:
Gehard glas met roestvrijstalen sensoren
Maximum gewicht:
180 kg