In alle programma's tot nu toe zijn alle opdrachten uitgevoerd, zonder dat er een regel werd overgeslagen. Zoals in het volgende voorbeeld.
Klik op de knoppen Back (terug) en Forward (vooruit) om door het programma te gaan. Of gebruik de pijltjestoetsen.
Opmerking: "line that has just executed" betekent "regel die als laatste is uitgevoerd" en " next line to execute" betekent " de regel die als eerstvolgende zal worden uitgevoerd".
Het nieuwe in deze les is de if
-opdracht, die het mogelijk maakt om, afhankelijk van of aan een voorwaarde is voldaan, bepaalde opdrachten wel of niet uit te voeren. Laten we als voorbeeld ons programma aanpassen om een boodschap af te drukken wanneer de leeftijd van een persoon voldoende is. We zullen twee regels toevoegen: if leeftijd > 65:
(hetgeen betekent "als de leeftijd is hoger dan 65" en print('Geniet van uw pensioen')
. Ga nu nog eens stap voor stap door het programma.
Merk op dat de nieuwe print
-opdracht werd overgeslagen omdat leeftijd
slechts 32 was. Wat gebeurt er met exact hetzelfde programma wanneer geboorteJaar
veranderd wordt in 1928:
Heb je het verschil gezien? In de laatste versie (met leeftijd
85) werden er twee regels afgedrukt en geen enkele regel overgeslagen. Dit is precies wat de if
-opdracht beoogt: een voorwaarde nagaan (is leeftijd
groter dan 65?) en bepaalde opdrachten uitvoeren (afdrukken van Geniet van uw pensioen!
) enkel wanneer de voorwaarde waar is.
We noemen de opdrachten die enkel uitgevoerd worden als de voorwaarde waar is, het lichaam (Eng.: body) van de if
-opdracht. Het lichaam moet inspringen, dat wil zeggen dat er extra spaties zijn aan het begin van de regel (zoals in het voorbeeld hierboven). Het lichaam kan meer dan één opdracht bevatten: die moeten dan allemaal evenveel spaties inspringen. Hier volgt een voorbeeld.
- Probeer bovenstaand programma in de console of de visualizer uit te voeren met geboortejaar 1982.
- if x < y: betekent "als x is kleiner dan y"
- if x >= y: betekent "als x is groter dan of gelijk aan y"
- if x <= y: betekent "als x is kleiner dan of gelijk aan y"
De algemene structuur van een if
-opdracht
- De eerste regel
if «voorwaarde»:
heeft drie delen: het woordjeif
, de«
die ofwel Waar of Onwaar (True of False) moet zijn (meer hierover hieronder), en een dubbele puntvoorwaarde
»:
- Dan het lichaam, wat een voorbeeld is van een blok, waarmee we een reeks opdrachten bedoelen die één of meerdere opdrachten lang kan zijn. Python leidt af waar het blok begint en eindigt door inspectie van de inspringing, of anders gezegd je moet een zelfde aantal spaties plaatsen voor iedere regel in het blok.
Lichamen
Lichamen zullen later op veel meer plaatsen worden gebruikt: in for
-lussen, en wanneer je bijvoorbeeld je eigen functies schrijft. (Een typische manier in vele andere programmeertalen om een lichaam aan te geven is met accoladen { }
.) Alle regels in het lichaam moeten op precies op dezelfde manier inspringen: ze moeten starten met exact hetzelfde aantal spaties. Zodra Python ziet dat de volgende regel meer spaties heeft, neemt het aan dat er een nieuw lichaam wordt gestart, en wanneer er minder spaties zijn, eindigt het lichaam.
De volgende oefening bestaat eigenlijk uit 4 oefeningen. Je moet de regels van een programma in een andere volgorde zetten om telkens een ander resultaat te krijgen. Klik op de horizontale balk-knoppen om elk van de onderdelen te openen; je kunt dat in elke gewenste volgorde doen. Zoals gebruikelijk kun je in elk onderdeel de regels verslepen.
True
, False
, en Booleaanse waarden
Tot nu toe zagen we, in het «
deel van een voorwaarde
»-
-opdracht, eenvoudige numerieke ongelijkheden zoals if
en x > y
, die al of niet waar zijn. Meer in het algemeen wordt iedere expressie die of waar of niet waar is Booleaans genoemd (naar George Boole). In Python wordt het booleaanse type gebruikt om Booleaanse waarden voor te stellen; er bestaan slechts twee Booleaanse waarden, x <= y
True
en False
(waar en onwaar).
Merk op dat als je in Python de Booleaanse waarden
True
en
direct in het programma gebruikt, ze met een hoofdletter moeten beginnen, anders krijg je een foutmelding.False
Vergelijkingen
We zijn al eerder de operatoren
, <
, >
en <=
tegengekomen, waarin twee getallen worden vergeleken>=
en waarbij een Boole
. Er zijn nog twee manieren om getallen te vergelijken:aanse waarde wordt
teruggegeven
is de is-gelijk-operator; ze zalx == y
teruggeven als en slechts alsTrue
enx
gelijk zijn.y
is de is-ongelijk-operator; ze zalx != y
True
teruggeven als en slechts alsx
eny
niet gelijk zijn.==
en!=
werken ook op tekenreeksen en andere types van waarden.
(Hier worden twee gelijktekens gebruikt
omdat het enkelvoudige gelijkteken al betekenis heeft in ==
waarmee bedoeld wordt "ken aan x = «expressie»
de waarde van «expressie» toe". Het verwarren van x
en =
komt vaak voor: source of bugs.)==
Hier volgt om te beginnen een voorbeeld.
We hebben zojuist het concept blok geïntroduceerd (meerdere regels na elkaar die hetzelfde inspringen). Er kan een blok in een ander blok voorkomen:
if wachtwoord=='SesamOpenU': print('De gebruiker is ingelogd.') if uur>18: print('Goedenavond!') print('Type een opdracht in:')Hier bestaat uit het buitenste blok uit 4 regels en het binnenblok uit maar 1 regel:
if wachtwoord=='SesamOpenU':print('De gebruiker is ingelogd.')
if uur>18:print('Goedenavond!')print('Type een opdracht in:')
if
suur>18
onwaar is (waardoor het binnenblok wordt overgeslagen), zal de regel print('Type een opdracht in:')
van het buitenblok toch worden uitgevoerd.Later, in les 9, zullen we zien dat in programma's waarin meerdere Booleaanse waarden moeten worden gecheckt, ze kunnen worden vereenvoudigd door middel van else
en elif
(else if) en tevens het gebruik van de operatoren "and", "or" en "not". Nu kun je naar de volgende les gaan.