Programmeren in Python/Beslissingscontrole
Python gebruikt zoals zovele programmeertalen Booleaanse logica voor beslissingscontrole. Dit wil zeggen dat de Python interpreter één of meerdere waarden om zo te beslissen of een stuk logica al dan niet uitgevoerd dient te worden.
De beslissingscontrole is gesplitst in twee hoofdgroepen: conditie- en herhalingsgerelateerd. Conditionele logica maakt gebruik van het statement if
en een Booleaanse expressie om te beslissen of een code blok al dan niet uitgevoerd dient te worden. Herhaling baseert zich op conditionele constructies door een bepaalde blok uit te voeren wanneer een bepaalde Booleaanse expressie zich herleidt tot true
.
Booleaanse uitdrukkingen
bewerkenHier is een voorbeeld van enige Booleaanse uitdrukkingen en hun resultaat:
>>> a = 6
>>> b = 7
>>> c = 42
>>> print(1 , a == 6)
1 True
>>> print(2 , a == 7)
2 False
>>> print(3 , a == 6 and b == 7)
3 True
>>> print(4, a == 7 and b == 7)
4 False
>>> print(5, not a == 7 and b == 7)
5 True
>>> print(6, a == 7 or b == 7)
6 True
>>> print(7, a == 7 or b == 6)
7 False
>>> print(8, not (a == 7 and b == 6))
8 True
>>> print(9, not a == 7 and b == 6)
9 False
Wat gebeurt hier ? Het programma bestaat uit een aantal print
statements. Elk print
statement print een getal en de waarde van een Booleaanse expressie. Het nummer is louter ter referentie in de tekst. Merk op dat elke expressie uiteindelijk resulteert in zijnde True
of False
. In de eerste twee regels worden twee waarden vergeleken. In het geval dat de twee waarden gelijk zijn is het resultaat True
en in het andere geval False
.
Vanaf regel drie wordt het iets complexer. De operator and
zal enkel True
teruggeven indien zowel het statement voor als na de operator beide True
zijn. In het andere geval is het resultaat False
. Dit kan als volgt samengevat worden:
expressie | resultaat |
---|---|
true and true | true |
true and false | false |
false and true | false |
false and false | false |
Merk op dat indien de eerste expressie False
is, het niet meer nodig is om het tweede deel te testen (het resultaat zal in elk geval False
zijn) en Python zal dit dan ook niet doen (dit heet ook wel lazy evaluation).
Regel vijf maakt gebruik van de not
operator. Deze geeft het tegenovergestelde van de expressie weer. De expressie had ook geschreven kunnen worden als print 5, a != 7 and b == 7
. Dit geeft de volgende waarheidstabel:
expressie | resultaat |
---|---|
not true | false |
not false | true |
Regels 6 en 7 maken gebruik van de or
operator. Deze geeft True
wanneer minstens één van de expressies True
is.
expressie | resultaat |
---|---|
true or true | true |
true or false | true |
false or true | true |
false or false | false |
Bemerk dat hier indien de eerste expressie True
is, de gehele expressie al True
is, onafhankelijk van de andere expressies. Ook hier dient dus het tweede deel niet meer geëvalueerd te worden en Python zal dit dan ook niet doen.
De volgende twee regels 8 en 9 tonen dat haakjes gebruikt kunnen worden om expressies te groeperen om ervoor te zorgen dat een bepaald deel van de expressie eerst geëvalueerd dient te worden. Merk op dat het gebruik van de haakjes het resultaat van de uitdrukking veranderd heeft. Dit is doordat de not
toepassing gekregen heeft op de gehele expressie in plaats van enkel op het gedeelte a = 7
.
Nu volgt een voorbeeld waarin gebruik gemaakt wordt van een Booleaanse uitdrukking:
## This programs asks a user for a name and a password.
# It then checks them to make sure that the user is allowed in.
name = input("What is your name? ")
password = input("What is the password? ")
if name == "Josh" and password == "Friday":
print("Welcome Josh")
elif name == "Fred" and password == "Rock":
print("Welcome Fred")
else:
print("I don't know you.")
Let wel:het statement elif is een samentrekking van else en if.
Voorbeeld output:
What is your name? Josh What is the password? Friday Welcome Josh What is your name? Bill What is the password? Saturday I don't know you.
Hier wordt eerst een naam en een wachtwoord ingelezen. Vervolgens wordt de input vergeleken met voorgedefinieerde waarden. De uitvoer hangt dus af van het al dan niet correct invoeren en een combinatie van naam en wachtwoord.