Les 3 · Module 1 · Fundament (alleen Python)
Beslissingen met if
Je programma kiest een pad met if, elif en else en vergelijkingen.
🎯 Na deze les kun je
- vergelijkingsoperatoren gebruiken
- if/elif/else schrijven
- inspringing (indentation) correct toepassen
Tot nu toe voerde je programma elke regel uit, van boven naar beneden. Maar echte programma's maken keuzes: is de gebruiker oud genoeg voor deze film? Is het wachtwoord goed? Is het saldo hoog genoeg? In deze les leer je je programma laten beslissen met if, elif en else.
Vergelijken
Een beslissing begint met een vraag die waar of niet waar is. In Python is het antwoord een bool: True of False.
leeftijd = 15
print(leeftijd >= 12)
print(leeftijd == 16)
print(leeftijd != 16)
True
False
True
| Operator | Betekenis | Voorbeeld | Uitkomst |
|---|---|---|---|
== |
is gelijk aan | 5 == 5 |
True |
!= |
is niet gelijk aan | 5 != 3 |
True |
< |
kleiner dan | 3 < 5 |
True |
> |
groter dan | 3 > 5 |
False |
<= |
kleiner dan of gelijk aan | 5 <= 5 |
True |
>= |
groter dan of gelijk aan | 4 >= 5 |
False |
Je kunt ook tekst vergelijken. Dat is hoofdlettergevoelig: "ja" == "Ja" is False.
if: alleen als het waar is
leeftijd = 17
if leeftijd >= 18:
print("Je mag stemmen.")
print("Klaar.")
Voorspel eerst de uitvoer. Daarna:
Klaar.
De regel met if eindigt op een dubbele punt. De regels eronder die inspringen (4 spaties) vormen samen een blok. Dat blok wordt alleen uitgevoerd als de voorwaarde True is. print("Klaar.") springt niet in en hoort dus niet bij de if: die regel wordt altijd uitgevoerd.
else: anders
saldo = 12.50
prijs = 15.00
if saldo >= prijs:
print("Betaling gelukt.")
else:
tekort = prijs - saldo
print(f"Saldo te laag, je komt € {tekort:.2f} tekort.")
Saldo te laag, je komt € 2.50 tekort.
Precies één van de twee blokken wordt uitgevoerd, nooit allebei.
elif: meer dan twee mogelijkheden
Met elif (else if) stel je een volgende vraag als de vorige False was.
cijfer = 6.8
if cijfer >= 8:
print("Uitstekend")
elif cijfer >= 6:
print("Voldoende")
elif cijfer >= 5:
print("Bijna")
else:
print("Onvoldoende")
Voldoende
Python loopt de voorwaarden van boven naar beneden af en voert het eerste blok uit waarvan de voorwaarde waar is. Daarna slaat het de rest over. Daarom hoeft er bij elif cijfer >= 6 niet ook cijfer < 8 te staan: als het cijfer 8 of hoger was, waren we hier nooit gekomen.
De volgorde telt. Zet je cijfer >= 5 bovenaan, dan krijgt een 9,5 ook "Bijna": die voorwaarde is immers ook waar, en ze komt eerst.
Inspringing is betekenis
In Python bepaalt de inspringing welke regels bij elkaar horen. Vergelijk:
temperatuur = 25
if temperatuur > 30:
print("Het is heet.")
print("Neem water mee.")
Dit print niets: beide print-regels springen in en horen dus bij de if. Haal je de inspringing van de laatste regel weg, dan verandert de betekenis:
temperatuur = 25
if temperatuur > 30:
print("Het is heet.")
print("Neem water mee.")
Neem water mee.
Gebruik altijd 4 spaties per niveau. Elke editor voor Python doet dat automatisch als je op Tab drukt.
Uitgewerkt voorbeeld: verzendkosten
Een webshop rekent € 4,95 verzendkosten, behalve bij bestellingen vanaf € 50. Voorspel de uitvoer.
bedrag = 49.99
if bedrag >= 50:
verzending = 0
else:
verzending = 4.95
totaal = bedrag + verzending
print(f"Verzending: € {verzending:.2f}")
print(f"Totaal: € {totaal:.2f}")
Verzending: € 4.95
Totaal: € 54.94
Zie je het patroon? In elk blok krijgt verzending een waarde. Na de if/else gebruik je die variabele gewoon verder.
Typische fouten
= in plaats van ==. Eén = is toekennen, twee == is vergelijken.
leeftijd = 18
if leeftijd = 18:
print("Precies 18")
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?
Python raadt hier zelfs wat je bedoelde.
Dubbele punt vergeten. if leeftijd >= 18 zonder : geeft ook een SyntaxError (expected ':').
Inspringing klopt niet. Een blok zonder inspringing geeft IndentationError: expected an indented block after 'if' statement. Spring je in waar dat niet hoort, dan krijg je IndentationError: unexpected indent.
Tekst met een getal vergelijken. input() geeft tekst (les 2). "17" >= 18 geeft TypeError: '>=' not supported between instances of 'str' and 'int'. Zet de invoer eerst om met int().
Oefenen
Oefening 1. Wat print dit programma voor uur = 12? En voor uur = 18?
uur = 12
if uur < 12:
print("Goedemorgen")
elif uur < 18:
print("Goedemiddag")
else:
print("Goedenavond")
Modelantwoord oefening 1
Bij uur = 12 is 12 < 12 niet waar, maar 12 < 18 wel: Goedemiddag. Bij uur = 18 zijn beide voorwaarden onwaar, dus Goedenavond.
Oefening 2. Vraag een getal en print of het even of oneven is. Tip: getal % 2 is de rest bij delen door 2.
Modelantwoord oefening 2
getal = int(input("Getal: "))
if getal % 2 == 0:
print(f"{getal} is even")
else:
print(f"{getal} is oneven")
Oefening 3. Dit programma geeft een 9 als cijfer "Voldoende". Waarom, en hoe los je het op?
cijfer = 9
if cijfer >= 5.5:
print("Voldoende")
elif cijfer >= 8:
print("Goed")
Modelantwoord oefening 3
De eerste voorwaarde die waar is, wint. 9 >= 5.5 is waar, dus elif wordt nooit bekeken. Draai de volgorde om: eerst >= 8, dan >= 5.5.
Lab: bioscoopkaartje
- Maak
bioscoop.py. - Vraag de leeftijd van de bezoeker (geheel getal).
- Tarieven: onder 12 jaar € 7,50; van 12 tot en met 64 € 11,50; vanaf 65 € 9,00.
- Print het tarief, bijvoorbeeld
Je kaartje kost € 11.50. - Vraag daarna de leeftijdsgrens van de film (bijvoorbeeld 16). Is de bezoeker jonger, print dan
Helaas, deze film is vanaf 16 jaar. - Test alle grenzen: 11, 12, 64, 65. Controleer met
beetje check concepten-les3.
Samenvatting
- Vergelijkingen (
==,!=,<,>,<=,>=) gevenTrueofFalse. ifvoert een blok alleen uit als de voorwaarde waar is;elsevangt de rest.- Met
elifstel je meerdere vragen; de eerste die waar is, wint. Volgorde telt. - Inspringing (4 spaties) bepaalt welke regels bij een blok horen.
=is toekennen,==is vergelijken.
In les 4 combineer je voorwaarden met and, or en not, en ontdek je dat niet alleen True en False als waar of onwaar tellen.
Lab
Leeftijdscheck voor een bioscoopkaartje met tarieven
🔒 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.
Klaar? Controleer je werk met:
$ beetje check concepten-les3