Voor we eerst dieper ingaan op keuzestructuren en hun mogelijkheden moeten we eerst meer uitleg geven over het het Booleaanse datatype.
Tot nu toe hebben we expressie gehad die na evaluatie resulteren in één waarde.
Variabelen:
getal_1 = 9
getal_2 = 9
getal_pi = 3.14159
voornaam = "tanja"
achternaam = "van den eede"
Voorbeelden van expressies:
2 + 3 ==> 5
getal_1 / getal_2 = 1.5
achternaam + voornaam = "van den eedetanja"
"Pi is gelijk aan " + str(getal_pi) + "." --> "Pi is gelijk aan 3.14159"
Elke expressie evolueerde naar één waarde van het type int, float of string.
Bij een Booleaanse expressie of beweringen evolueert het antwoord ook naar één waarde maar het zal waar (true)/onwaar(false) zijn. Het type van deze waarde noemen ze binnen Python een booleaanse waarde of kortweg bool. Deze waarde kan True of False zijn.
Voorbeeld in CLI:
> type(True)
=> <class 'bool'>
> type(False)
=> <class 'bool'>
> type(15)
Let op! True en False worden enkel aanvaard met hoofletters, bij false of true zal Python een foutmelding geven.
Deze booleanse expressie is SUPERHANDIG zo kunnen we beweringen een specifiek gevolg laten hebben op basis dat hun bewering waar of niet waar is. Dit is ook beter gekend als de ALS/DAN-constructie.
ALS de bewering waar is DAN specifiek gevolg.
Voorbeelden dagelijks leven:
ALS de vuilzak vol is DAN zetten we de vuilzak buiten.
ALS het regent DAN doen we onze regenjas aan.
ALS het WC-papier is op DAN nemen we een nieuwe rol.
Een statement is een stukje programmacode dat een - door de computer uit te voeren - taak beschrijft.
Het if-statement (éénvoudigste vorm) beschrijft welke taken er moeten uitgevoerd worden, wanneer een specifieke booleanse expressie evalueert naar de waarde True.
ALS de bewering waar is DAN specifiek gevolg.
als we dit programmeergericht veranderen krijgen we:
ALS booleaanse expressie DAN specifieke taak
Deze specifiek taak kan bestaan uit meerdere taken.
Voorbeeld:
ALS de vuilzak is vol DAN
haal volle vuilzak uit vuilnisemmer
zet volle vuilzak buiten
neem een lege vuilzak
steek lege vuilzak in vuilnisemmer
Wanneer we ALS/DAN vertalen naar Python (if/:) krijgen we de volgende syntax:
if <<booleaanse expressie>> :
<<taak 1>>
<<taak 2>>
<<taak 3>>
<<taak 4>>
Merk op dat er voor elke taak een insprong/indentatie staat.
Om de taken te laten uitvoeren als het resultaat van de booleaanse expressie waar is, moeten deze taken inspringen tegenover de kantlijn. Wanneer een regel niet meer inspringt, behoort deze niet meer tot de taken van het resultaat van de booleaanse expressie.
Deze insprong wordt ook wel "code block" genoemd en heeft volgende eigenschappen:
start wanneer de code inspringt;
eindigt met de terugkeer naar het eerdere niveau;
alle tussenliggende regels maken deel uit van hetzelfde blokje programmacode, van dezelde "code block";
"code blocks" kunnen deel uitmaken van grotere "code blocks";
wordt er begonnen aan de uitvoering van een "code block", dan wordt de "code block" - in principe - volledig doorlopen.
Voorbeeld in de editor:
getal = 25
if getal > 5:
print("Amai")
print("Het is groter dan 5")
print("Het programma is doorlopen")
Wanneer een de variabele een waarde groter dan 5 geven zal het programma 3 regels tekst afdrukken, bij een waarde voor getal kleiner dan 5 of 5 zal het slechts 1 regel afdrukken.
Om onze booleaanse expressies op te stellen hebben relationele operatoren nodig. Zodat we in onze bewering kunnen zeggen of iets groter of kleiner moet zijn dan een andere uitdrukking of waarde.
Overzicht relationele operatoren:
Let op! 1 keer = betekent toekennen, om te vergelijken hebben je 2 keer = (==) nodig.
Het zou handig zijn mochten we niet enkel taken kunnen uitvoeren als de bewering waar is, maar ook specifieke taken kunnen definiëren wanneer de bewering niet waar is.
Voorbeelden:
ALS je portefeuille is leeg DAN
haal geld af van je spaarrekening
ANDERS DAN
geef geld uit
ALS het regent DAN
doe je regenjas aan
ANDERS DAN
geef de planten water
Indien meerdere voorwaarde moet geëvalueerd worden om een pad te kiezen kan je binnen else een nieuwe if-structuur bouwen. Dit principe noemen we geneste if. Het wordt duidelijker met een voorbeeld:
a = 200
b = 33
if b > a :
print("b is groter dan a")
else:
if a == b:
print("b is gelijk aan a")
else:
print("b is kleiner dan a")
In het bovenstaande voorbeeld gaan we een nieuwe if evalueren wanneer b niet groter is dan a. Maar in dat geval zijn er toch nog twee mogelijkheden. Dus als b niet groter is dan a, dan is a misschien wel gelijk b, ...
Afhankelijk van de complexiteit van het probleem is een geneste IF nog haalbaar, maar je kan ook binnen 1 if structuur meerdere beweringen evalueren. Je kan telkens met ELIF een nieuwe bewering evalueren. Je kan op het einde weer ELSE toevoegen maar dit is echter niet verplicht.
Her voorgaande voorbeeld kunnen we ook uitwerken zonder een genest structuur
a = 200
b = 33
if b > a :
print("b is groter dan a")
elif a == b:
print("b is gelijk aan a")
else:
print("b is kleiner dan a")
Booleaanse expressie
IF-statement
Relationele operatoren
IF/ELSE
Booleaanse operatoren (or en not)
Booleaanse operatoren (and)
Uitbreiding ELIF