Python is oorspronkelijk een Nederlandse uitvinding. De programmeertaal is in de jaren 80 en 90 van de vorige eeuw ontwikkeld door Guido van Rossum. Python is gratis (open source) en onderscheidt zich door zijn eenvoud. De naam is overigens niet afkomstig van de slang, maar van het Engelse comedygezelschap Monty Python. Tijd voor een introductie.
De populariteit van Python vertoont een beetje de kenmerken van een golfbeweging. In het begin, met name ten tijde van Python 2, was de taal zeer populair. Daarna zakte de belangstelling een beetje in. Maar de laatste jaren mag Python zich weer op toenemende populariteit verheugen. Dat heeft zonder twijfel te maken met het feit dat softwareontwikkeling steeds complexer wordt. Java en C#/.NET-toepassingen zijn krachtig, maar ook erg ingewikkeld. Zelfs voor een simpele app op Android of iOS moet je al tientallen gigabytes aan schijfruimte opofferen en uren durende installaties doorlopen van tools als Android Studio of XCode. Python is daar een aangename uitzondering op. De taal zelf is relatief eenvoudig. Er zijn niet al te veel typeringen en er is een beperkte instructieset. Dit is de kern van Python. Het bevat onderdelen als variabelen, lists, dicts, tuples en functies. Voor het programmaverloop worden voornamelijk if- en while-statements gebruikt, terwijl de data met rechttoe-rechtaan operatoren voor optellen, aftrekken, delen en vermenigvuldigen worden bewerkt. Dat is heel overzichtelijk en in een dag te leren.


Versies van Python
Er zijn verschillende versies van Python in omloop. Dat kan ook bijna niet anders bij een programmeertaal die al ruim dertig jaar oud is. Een – zeer beknopte – tijdlijn van de geschiedenis van Python ziet er als volgt uit:
• 1989 – Eerste implementatie van Python, voor persoonlijk gebruik en op het CWI in Amsterdam.
• 1994 – Python 1.0
• 2000 – Python 2.0
• 2008 – Python 3.0
Binnen de hoofdversies zijn weer allerlei subversies verschenen, zoals Python 2.1, 2.2 enzovoort. Op het moment van schrijven was Python 3.11 de meest recente versie. Op de homepage van Python (python.org) vind je altijd de meest recente versies en kan je een exemplaar downloaden voor jouw besturingssysteem. Python is beschikbaar voor Windows, macOS en Linux.


Oefening: Raden Maar
Om een eerste inzicht te verschaffen in hoe Python werkt, maken we deze oefening. De computer neemt een getal ‘in gedachten’ en wij moeten het getal zien te raden binnen het toegekende aantal pogingen. Als het getal te hoog of te laag is volgt een hint. Als het getal geraden is, wordt de speler gefeliciteerd. Als aan het einde het getal niet geraden is, wordt getoond welk getal de computer had geselecteerd. De verliezer betaalt een rondje! Het is een eenvoudig project, maar je maakt toch kennis met een groot aantal Python-constructies, zoals het werken met variabelen, lussen, willekeurige getallen en het formatteren van strings.
In Raden Maar moet je een geheim, willekeurig getal tussen 0 en 1000 raden op basis van aanwijzingen.
• Als het getal dat je gokt te klein is, verschijnt hiervan een melding.
• Als het getal te groot is, wordt dit ook vermeld.
• Je hebt tien pogingen om het juiste getal te raden.
• Als je goed raadt, ontvang je een felicitatie en wordt het correcte getal bevestigd.
• Als je na tien pogingen het getal nog niet hebt geraden, wordt dit ook getoond.
De uitvoer
Je start het programma in een opdrachtregelomgeving (cmd.exe, PowerShell of Terminal) of start het programma vanuit je editor met de daarvoor bestemde sneltoets. Daarna kan het verloop er bijvoorbeeld als volgt uitzien:


Afhankelijk van het getal dat de computer had geselecteerd, kan het vervolg er uitzien zoals in de afbeelding hieronder.


Als het getal niet wordt geraden, wordt dit ook in beeld getoond.


De code
We tonen in één keer de volledige code voor het spel.
# 0. Modules in dit project
import random, time
# 1. Variabelen in dit programma
MIN_NUM = 0
MAX_NUM = 1000
NUM_GUESSES = 10
# 2. Net doen alsof we nadenken
print(‘Nadenken:’)
for i in range(3):
time.sleep(0.5)
print(‘.’)
# 3. Neem een getal ‘in gedachten’.
SELECTED_NUM = random.randint(MIN_NUM, MAX_NUM)
# 4. Instructie voor de gebruiker.
print(“Ik heb een getal in gedachten tussen {0} en {1}. Wat denk je dat het is?”.format(MIN_NUM, MAX_NUM))
print(“Je hebt {0} pogingen”.format(NUM_GUESSES))
for i in range(NUM_GUESSES):
# 5. Gebruik input() om een getal in te lezen.
your_num = int(input(‘> ‘))
if your_num < SELECTED_NUM:
print(“Jouw getal is te klein. Probeer het nogmaals! {0} pogingen over.”.format(NUM_GUESSES – (i + 1)))
elif your_num > SELECTED_NUM:
print(“Jouw getal is te groot. Probeer het nogmaals! {0} pogingen over.”.format(NUM_GUESSES – (i + 1)))
elif your_num == SELECTED_NUM:
print(‘Correct! Ik had {0} in gedachten.’.format(SELECTED_NUM))
break
if i == NUM_GUESSES – 1:
print(‘Je hebt het getal niet geraden! Ik had {0} in gedachten.’.format(SELECTED_NUM))
break
# 6. Einde
print(“Bedankt voor het spelen.”)
Constanten en variabelen
Python kent geen echte constanten. Het is niet mogelijk variabelen te maken die gedurende de uitvoering van het programma geen andere waarde kunnen krijgen. Door hoofdletters te gebruiken (zoals in MIN_NUM) wordt aangegeven dat het de bedoeling is dat deze variabele niet opnieuw wordt toegewezen. Maar technisch gezien kan je MIN_NUM gewoon een andere waarde geven. Het gebruik van hoofdletters is een conventie, een afspraak. Geen technische vereiste.
Na het importeren van de modules worden variabelen voor het programma gedefinieerd.
MIN_NUM = 0
MAX_NUM = 1000
NUM_GUESSES = 10
We hebben hier hoofdletters gebruikt voor de variabelenamen om aan te geven dat de desbetreffende variabelen constanten zijn. Het is niet de bedoeling dat ze in de loop van het programma worden gewijzigd. Omdat de constanten uit twee woorden bestaan, zijn ze met het underscoreteken geschreven. In Python is het de afspraak dat de underscore wordt gebruikt. Dit heet ook wel snake_case (naar een slang die over de grond kronkelt). Commentaar wordt in Python aangegeven met een hekje of hashtag, het teken #.
Regels voor naamgeving van Python-variabelen
Variabelen en constanten bestaan in Python uit een combinatie van kleine letters (a-z) en hoofdletters (A-Z) of getallen (0-9) en een underscore (_). Een variabelenaam mag niet met een getal beginnen. Speciale tekens zoal %, # en & zijn niet toegestaan in variabelenamen.
salaris #geldig
mijn_salaris # geldig
900euro # ongeldig
900_euro # ongeldig
euro_900 # geldig
We gebruiken een korte lus van drie keer om net te doen alsof de computer nadenkt. Tussen elke lusdoorgang pauzeren we het programma 0,5 seconden, zodat het wat realistischer lijkt. Technisch is dit natuurlijk totaal niet verplicht. Dit is de code:
print(‘Nadenken:’)
for i in range(3):
time.sleep(0.5)
print(‘.’)
Let er hierbij op:
• In de opdracht for i in range (3) heeft i achtereenvolgens de waarden 0, 1, 2, Het laatste getal in de range is niet inclusief.
• In elke lusdoorgang wordt na een halve seconde een punt op het scherm afgedrukt. Nogmaals, technisch heeft dit geen waarde, het gaat puur om de gebruikerservaring van het programma.
• De module time heeft talloze functies om bijvoorbeeld de klok uit te lezen, in te stellen, te formatteren en nog veel meer. Wij gebruiken hier alleen de eenvoudige functie sleep(). Lees eventueel meer over time op docs.python.org/3/library/time.html.
Willekeurig getal genereren
Met de module random wordt een willekeurig getal berekend. We kiezen hier een willekeurig getal tussen 0 en 1000 (of liever gezegd, tussen de waarden van MIN_NUM en MAX_NUM die eerder zijn gedefinieerd. In het geval van randint() is de eindwaarde inclusief. Het kan dus zijn dat de uitkomst precies 1000 is in plaats van maximaal 999 zoals bij range() het geval is.
SELECTED_NUM = random.randint(MIN_NUM, MAX_NUM)
De gekozen waarde wordt toegekend aan de constante SELECTED_NUM. Deze wordt verderop in de for-lus gebruikt.
Strings formatteren
Python kent tal van manieren om strings te formatteren. In dit boek zullen we voornamelijk de methode format() gebruiken. Binnen een string die op deze manier wordt geformatteerd wordt met placeholders {0}, {1} enzovoort aangegeven welke waarden op die posities moeten worden ingevuld. De waarden worden als argumenten meegegeven aan format().
Als je zeker weet dat je de argumenten in volgorde op de aangegeven posities wilt gebruiken, mag je de getallen in de placeholders ook weglaten.
“Ik heb een getal in gedachten tussen {0} en {1}.”.format(MIN_NUM, MAX_NUM)
Is dus hetzelfde als
“Ik heb een getal in gedachten tussen {} en {}.”.format(MIN_NUM, MAX_NUM)
Vanuit het oogpunt van duidelijkheid en ondubbelzinnige code zullen wij echter de eerste manier, dus inclusief getallen in de placeholders gebruiken. Python kent zoals gezegd vele manieren om strings vorm te geven. Je kan eenvoudige stringconcatenatie gebruiken zoals ‘string 1 ’ + ’string 2’. Daarnaast kent Python ook het %-teken om strings te formatteren en sinds Python 3 f-strings. Van beide wordt hierna een codevoorbeeld gegeven. Het is beslist niet zo dat format() de ‘beste’ manier is om strings te formatteren, maar deze gebruiken we toevallig graag omdat we dat gewend zijn.
# Python % operator met strings (C-style)
name = ‘Sandra’
email = ‘sandra@kpn.com’
print(‘mijn naam is %s en mijn e-mail is %s’ % (name, email))
# Python 3 f-strings
name = ‘Peter’
email = ‘info@kassenaar.com’
print(f’mijn naam is {name} en mijn e-mail is {email}’)
Praktisch Python


In dit boek ga je concreet aan de slag met de meest gebruikte programmeertaal ter wereld. Er zijn geen aparte hoofdstukken waarin wordt uitgelegd wat variabelen of functies zijn, of hoe een while-lus werkt. In plaats daarvan worden deze Python-kenmerken gebruikt om direct applicaties te maken die je rechtstreeks kan inzetten of gebruiken als basis voor je eigen toepassingen. Zelfs als je nog geen gedegen Python-voorkennis hebt, kan je met dit boek aan de slag. Gaandeweg maak je kennis met de belangrijkste kenmerken en zie je hoe je de voorbeeldprojecten op je eigen computer uitvoert. Van alle voorbeelden kan je de code inclusief extra, verhelderende commentaren downloaden.
Praktisch Python is onder andere verkrijgbaar bij Standaard Boekhandel, voor 34,99 euro.