Beetje Coderen

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.

⏱ 45–60 minuten leestijd + oefenen

🎯 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

  1. Maak korting.py.
  2. Vraag het bedrag, de leeftijd en of de klant student is (j/n).
  3. Regel: 10% korting voor studenten of klanten van 65+, en alleen als het bedrag boven de € 20 ligt.
  4. Laat de gebruiker ook J (hoofdletter) mogen typen.
  5. Print het bedrag na korting, bijvoorbeeld Te betalen: € 22.50, of Geen korting, te betalen: € 18.00.
  6. 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

  • and is waar als beide kanten waar zijn, or als minstens één kant waar is, not draait om.
  • Zet haakjes als je and en or combineert.
  • Falsy zijn False, 0, 0.0, "", lege verzamelingen en None; al het andere is truthy.
  • Geneste if's kun je vaak vervangen door één voorwaarde met and.
  • x == "a" or "b" is altijd waar; schrijf x == "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.

Cursus kopen en verdergaan

💻 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

Krijg je unauthorized bij het downloaden? De registry vraagt een login. Bouw het image dan eerst zelf (eenmalig, een paar minuten):

$ docker build -t registry.wizg.it/webhosting/beetjecoderen-web:lab-python-latest -f python.Dockerfile https://beetjecoderen.nl/labs/lab-images.tar.gz

In de container: beetje lijst toont alle lessen van het image.

Volg daarna de stappen van de opdracht hierboven. Nog geen Docker? Zie les 14 van Een beetje Linux & Docker.

Klaar? Controleer je werk met:

$ beetje check concepten-les4

📝 Quiz: logische operatoren en waarheid

5 vragen · 70% nodig om te slagen

1. Wanneer is `a or b` False?
2. Welke waarde is truthy?
3. Waarom is `if keuze == "a" or "b":` altijd waar?
4. Wat is de uitkomst van `not (5 > 3 and 2 > 4)`?
5. Welke voorwaarde controleert of `uur` tussen 9 en 17 ligt (grenzen inbegrepen)?