Les 4 · Module 1 · Fundament (alleen Python)
Logische operatoren en waarheid
Meerdere voorwaarden combineren met and, or en not, en weten wat Python als waar of onwaar ziet.
🎯 Na deze les kun je
- voorwaarden combineren met and/or/not
- truthy en falsy waarden herkennen
- geneste if's vereenvoudigen
Echte regels bestaan zelden uit één vergelijking. "Korting voor studenten of 65-plussers, en alleen boven de € 20." Zulke samengestelde regels schrijf je met de logische operatoren (logical operators) and, or en not. Je leert ook dat Python niet alleen True en False als waar of onwaar beschouwt.
and, or en not
| Operator | Is True als … |
Voorbeeld | Uitkomst |
|---|---|---|---|
a and b |
beide waar zijn | 5 > 3 and 2 > 1 |
True |
a or b |
minstens één waar is | 5 > 9 or 2 > 1 |
True |
not a |
a niet waar is |
not 5 > 3 |
False |
Een waarheidstabel (truth table) zet alle combinaties op een rij:
| a | b | a and b | a or b |
|---|---|---|---|
| True | True | True | True |
| True | False | False | True |
| False | True | False | True |
| False | False | False | False |
leeftijd = 70
is_student = False
bedrag = 25.00
korting = (is_student or leeftijd >= 65) and bedrag > 20
print(korting)
True
Voorspel zelf: wat geeft dit als bedrag = 15.00? (Antwoord: False, want het tweede deel van de and is onwaar.)
Haakjes en volgorde
Python rekent not eerst uit, dan and, dan or. Net als * vóór + gaat. Zonder haakjes betekent de regel hierboven iets anders:
leeftijd = 70
is_student = False
bedrag = 15.00
print(is_student or leeftijd >= 65 and bedrag > 20)
print((is_student or leeftijd >= 65) and bedrag > 20)
False
False
Hier toevallig dezelfde uitkomst, maar met is_student = True en bedrag = 15.00 geeft de eerste regel True (want True or ...) en de tweede False. Zet daarom altijd haakjes als je and en or mengt. Dan hoeft niemand de voorrangsregels te kennen.
Een bereik controleren
Wil je weten of een cijfer tussen 1 en 10 ligt? Dat kan met and, of korter met een kettingvergelijking:
cijfer = 7.5
print(cijfer >= 1 and cijfer <= 10)
print(1 <= cijfer <= 10)
True
True
Truthy en falsy
Python kan elke waarde als voorwaarde gebruiken. Een paar waarden tellen als onwaar; ze heten falsy. Al het andere is truthy.
| Falsy | Truthy (voorbeelden) |
|---|---|
False |
True |
0 en 0.0 |
7, -1, 0.5 |
"" (lege string) |
"a", " " (spatie!), "0" |
[] (lege lijst, les 8) |
[0] |
None |
Met bool() zie je hoe Python een waarde beoordeelt:
print(bool(0), bool(""), bool(" "), bool("0"), bool(-3))
False False True True True
Dit is handig om te controleren of iemand iets heeft ingevuld:
naam = "" # stel: de gebruiker drukte meteen op Enter
if not naam:
print("Je hebt geen naam ingevuld.")
Je hebt geen naam ingevuld.
Geneste if's platslaan
Een if binnen een if heet genest (nested). Soms is dat nodig, maar vaak is het een omweg:
leeftijd = 20
heeft_rijbewijs = True
if leeftijd >= 18:
if heeft_rijbewijs:
print("Je mag de auto huren.")
Hetzelfde met and, één niveau minder diep:
leeftijd = 20
heeft_rijbewijs = True
if leeftijd >= 18 and heeft_rijbewijs:
print("Je mag de auto huren.")
Je mag de auto huren.
Nesten blijft zinvol als je in het binnenste en buitenste blok iets verschillends wilt doen, bijvoorbeeld een andere foutmelding per reden.
Typische fout: x == 1 or 2
Je wilt weten of een keuze "a" of "b" is en schrijft:
keuze = "c"
if keuze == "a" or "b":
print("Geldige keuze")
Geldige keuze
Dit print altijd "Geldige keuze". Python leest het als (keuze == "a") or ("b"), en "b" is een niet-lege string, dus truthy. Schrijf de vergelijking twee keer uit:
keuze = "c"
if keuze == "a" or keuze == "b":
print("Geldige keuze")
else:
print("Ongeldige keuze")
Ongeldige keuze
Een tweede valkuil: if not leeftijd >= 18 werkt, maar if leeftijd < 18 leest makkelijker. Gebruik not vooral bij bool-variabelen en truthy/falsy-controles, zoals if not naam:.
Oefenen
Oefening 1. Bepaal zonder computer: True and not False, False or 0, not "", 3 > 2 > 1.
Modelantwoord oefening 1
True and not False → True. False or 0 → 0 (or geeft de laatste waarde terug die het bekeek, en 0 is falsy). not "" → True. 3 > 2 > 1 → True (betekent 3 > 2 and 2 > 1).
Oefening 2. Een pretpark laat je in de achtbaan als je minstens 1,40 m lang bent, of minstens 1,20 m met een volwassene erbij. Schrijf de voorwaarde voor variabelen lengte (in meters) en met_volwassene (bool).
Modelantwoord oefening 2
lengte = 1.25
met_volwassene = True
mag_erin = lengte >= 1.40 or (lengte >= 1.20 and met_volwassene)
print(mag_erin)
True
Oefening 3. Herschrijf zonder nesting:
temperatuur = 22
regen = False
if temperatuur > 20:
if not regen:
print("Terrasweer!")
Modelantwoord oefening 3
temperatuur = 22
regen = False
if temperatuur > 20 and not regen:
print("Terrasweer!")
Terrasweer!
Lab: kortingsregels van een webshop
- Maak
korting.py. - Vraag het bedrag, de leeftijd en of de klant student is (
j/n). - Regel: 10% korting voor studenten of klanten van 65+, en alleen als het bedrag boven de € 20 ligt.
- Laat de gebruiker ook
J(hoofdletter) mogen typen. - Print het bedrag na korting, bijvoorbeeld
Te betalen: € 22.50, ofGeen korting, te betalen: € 18.00. - Test minstens deze vier gevallen: student met € 25, 70-jarige met € 15, 30-jarige niet-student met € 50, student van 70 met € 21. Controleer met
beetje check concepten-les4.
Samenvatting
andis waar als beide kanten waar zijn,orals minstens één kant waar is,notdraait om.- Zet haakjes als je
andenorcombineert. - Falsy zijn
False,0,0.0,"", lege verzamelingen enNone; al het andere is truthy. - Geneste
if's kun je vaak vervangen door één voorwaarde metand. x == "a" or "b"is altijd waar; schrijfx == "a" or x == "b".
In les 5 leer je herhalen: hetzelfde stuk code meerdere keren uitvoeren met while en for.
Lab
Kortingsregels van een webshop (student OF 65+, EN bedrag boven 20 euro)
🔒 Het live lab hoort bij de volledige cursus. Met één aankoop (€ 29,00, eenmalig) krijg je alle lessen, de live labs en het certificaat. Geen abonnement. Je kunt dit lab altijd gratis lokaal met Docker doen.
💻 Lokaal met Docker. Start de lab-container met (geeft de opdracht een eigen startcommando, gebruik dan dat):
$ docker run -it --rm -e BEETJE_COURSE=programmeerconcepten -e BEETJE_LESSON=4 registry.wizg.it/webhosting/beetjecoderen-web:lab-python-latest
$ docker build -t registry.wizg.it/webhosting/beetjecoderen-web:lab-python-latest -f python.Dockerfile https://beetjecoderen.nl/labs/lab-images.tar.gz
Klaar? Controleer je werk met:
$ beetje check concepten-les4