3. Als… dan…#

Je hebt inmiddels kennisgemaakt met while en for loops, die je in staat stellen een blok code te herhalen. In dit hoofdstuk behandelen we het if statement, waarmee Python kan kiezen om een blok code wel of niet uit te voeren.

Kopieer onderstaande code naar een nieuw bestand in Mu editor en sla het op als hello_if.py.

hello_if.py#
1# Functie say_hello() toont een begroeting
2def say_hello(name):
3    print("Hallo", name)
4
5# Hoofdprogramma
6say_hello("Tony")
7say_hello("Tina")

In hello_if.py wordt de functie say_hello() gedefinieerd, die een begroeting op het scherm toont. In regels 6 en 7 wordt deze functie aangeroepen met twee verschillende namen. De output van het programma is:

hello_if.py output#
Hallo Tony
Hallo Tina

Nu gaan we de functie say_hello() uitbreiden met een if statement:

hello_if.py#
1# Functie say_hello() toont een begroeting
2def say_hello(name):
3    if name == "Tony":
4        print("Hallo", name)
5
6# Hoofdprogramma
7say_hello("Tony")
8say_hello("Tina")

Met het dubbele is-gelijk-aan-teken == kun je Python laten checken of twee waarden aan elkaar gelijk zijn. Regel 3 van hello_if.py kun je dus lezen als: ‘Als de waarde van de variabele name gelijk is aan "Tony", doe dan het volgende.’ Merk op dat de inspringing van regel 4 aangeeft dat die regel binnen het if statement valt.

Wanneer je deze code runt, is de output:

hello_if.py output#
Hallo Tony

Het programma toont nu alleen een begroeting als de naam Tony wordt gebruikt en anders niet.

3.1. If en else#

Een if statement gebruik je om Python te vertellen: ‘Als er dit aan de hand is, doe dan het volgende.’ Met het keyword else kun je dat uitbreiden naar ‘Als er dit aan de hand is, doe dan het volgende, en zo niet, doe dan iets anders.’

Wijzig de functie say_hello() als volgt:

hello_if.py#
 1# Functie say_hello() toont een begroeting
 2def say_hello(name):
 3    if name == "Tony":
 4        print("Hallo", name)
 5        print("Leuk je weer te zien.")
 6    else:
 7        print("Hallo", name)
 8        print("Aangenaam kennis te maken.")
 9
10# Hoofdprogramma
11say_hello("Tony")
12say_hello("Tina")

Begrijp je wat hier gebeurt? De regels 4 en 5 worden uitgevoerd als aan de functie say_hello() het argument "Tony" wordt meegegeven. In alle andere gevallen worden de regels 7 en 8 uitgevoerd. Je kunt aan het hoofdprogramma nog extra regels toevoegen om het effect te zien:

hello_if.py#
10# Hoofdprogramma
11say_hello("Tabe")
12say_hello("Tess")
13say_hello("Tony")
14say_hello("Tina")

Run het programma en zie dat alleen bij de naam Tony de reactie ‘Leuk je weer te zien.’ wordt geprint.

Wanneer je deze code runt, is de output:

hello_if.py output#
Hallo Tabe
Aangenaam kennis te maken.
Hallo Tess
Aangenaam kennis te maken.
Hallo Tony
Leuk je weer te zien.
Hallo Tina
Aangenaam kennis te maken.

3.2. Elif#

Je kunt een if statement nog verder uitbreiden met het keyword elif, dat staat voor ‘else if’. In de onderstaande code zie je hoe dat werkt. Hierin is tevens de aanroep print("Hallo", name) buiten het if statement geplaatst (op regel 3) omdat we die begroeting voor elke naam willen tonen.

hello_if.py#
 1# Functie say_hello() toont een begroeting
 2def say_hello(name):
 3    print("Hallo", name)
 4    if name == "Tony":
 5        print("Leuk je weer te zien.")
 6    elif name == "Tina":
 7        print("Hoe gaat het met je?")
 8    else:
 9        print("Aangenaam kennis te maken.")
10
11# Hoofdprogramma
12say_hello("Tabe")
13say_hello("Tess")
14say_hello("Tony")
15say_hello("Tina")

Op regel 4 checkt Python of de waarde van name gelijk is aan "Tony". Zo ja, dan wordt regel 5 uitgevoerd. Zo nee, dan checkt Python in regel 6 of name misschien de waarde "Tina" bevat. Zo ja, dan wordt regel 7 uitgevoerd. Zo nee, dan zorgt regel 8 ervoor dat de code in regel 9 wordt uitgevoerd.

hello_if.py output#
Hallo Tabe
Aangenaam kennis te maken.
Hallo Tess
Aangenaam kennis te maken.
Hallo Tony
Leuk je weer te zien.
Hallo Tina
Hoe gaat het met je?

3.3. And en or#

In een if statement kun je gebruik maken van and en or om voorwaarden te combineren. Stel dat we zowel Tony als Tina willen begroeten met de zin ‘Leuk je weer te zien.’, dan zouden we de functie say_hello() als volgt kunnen aanpassen (het hoofdprogramma blijft ongewijzigd):

hello_if.py#
1# Functie say_hello() toont een begroeting
2def say_hello(name):
3    print("Hallo", name)
4    if name == "Tony" or name == "Tina":
5        print("Leuk je weer te zien.")
6    else:
7        print("Aangenaam kennis te maken.")

In regel 4 staat if name == "Tony" or name == "Tina":. Het keyword or betekent of. Hier staat dus: ‘Als de waarde van name gelijk is aan "Tony" of als de waarde van name gelijk is aan "Tina", doe dan het volgende.’

Vraag 01

Het keyword and betekent en. Wat zou er gebeuren als je regel 4 wijzigt in if name == "Tony" and name == "Tina":? Probeer het maar eens uit. Kun je het resultaat verklaren?

Antwoord

De waarde van name kan niet tegelijkertijd zowel "Tony" als "Tina" zijn. Dus name == "Tony" and name == "Tina" is altijd onwaar. Daardoor springt de code naar regel 6 en wordt elke naam begroet met "Aangenaam kennis te maken.".