Ga naar hoofdinhoud

De beslismachine

Een if met elif en else is een rij poortwachters. Een kaartje komt bij de eerste, en die zegt ja of nee. Bij ja is het klaar, bij nee gaat het door naar de volgende. Jullie zijn de poortwachters.

Wat je nodig hebt​

  • Per groepje van vier: tien lege kaartjes, een pen, en drie blaadjes op tafel met if, elif en else erop.
  • Ongeveer 20 minuten.

Zo werkt het​

  1. Elke poortwachter krijgt één blaadje en leest zijn voorwaarde hardop.
  2. Iemand legt een kaartje bij if. Is de voorwaarde waar, dan zegt die poortwachter wat het programma print, en is het kaartje klaar.
  3. Is hij niet waar, dan schuift het kaartje door naar elif, en daarna naar else. Bij else is het altijd ja.
  4. Een kaartje dat klaar is, komt nooit meer bij een volgende poortwachter.

Machine 1: het cijfer​

cijfer = 8.5
if cijfer >= 5.5:
print("voldoende")
elif cijfer >= 8:
print("goed")
else:
print("onvoldoende")

Schrijf op de kaartjes: 4, 5.5, 7, 8.5 en 9.9. Gok eerst bij welk kaartje goed op het scherm komt. Laat dan elk kaartje door de machine gaan.

CijferMijn gokWie zegt ja?Op het scherm
4
5.5
7
8.5
9.9

Er is een kaartje dat de machine nooit bij goed laat uitkomen. Verander de volgorde van de poortwachters, zodat 8.5 en 9.9 goed krijgen en de rest blijft kloppen. Schrijf de nieuwe machine op.

Machine 2: de kermis​

leeftijd = 13
lengte = 150
if leeftijd >= 12 and lengte >= 140:
print("Je mag in de achtbaan.")
elif leeftijd >= 12 or lengte >= 140:
print("Je mag in de botsauto's.")
else:
print("Je mag in de draaimolen.")

Elk kaartje is nu een bezoeker met twee getallen: leeftijd en lengte.

LeeftijdLengteWie zegt ja?Op het scherm
13150 cm
10145 cm
14130 cm
9120 cm

Bespreek na​

  1. Waarom kwam bij machine 1 niemand ooit bij goed?
  2. Welke regel kun je maken over de volgorde: komt de strengste voorwaarde eerst of laatst?
  3. In machine 2 staat bij elif het woord or. Kan een bezoeker die door elif komt ook allebei de eisen halen? Waarom niet?
Antwoorden

Machine 1. De eerste poortwachter zegt al ja bij alles vanaf 5.5, dus 8.5 en 9.9 komen nooit bij elif. Zet de strengste voorwaarde voorop:

for cijfer in [4, 5.5, 7, 8.5, 9.9]:
if cijfer >= 8:
print(cijfer, "goed")
elif cijfer >= 5.5:
print(cijfer, "voldoende")
else:
print(cijfer, "onvoldoende")

Uitvoer:

4 onvoldoende
5.5 voldoende
7 voldoende
8.5 goed
9.9 goed

Met de oude volgorde krijgen 8.5 en 9.9 voldoende, en de rest is hetzelfde.

Machine 2.

bezoekers = [[13, 150], [10, 145], [14, 130], [9, 120]]
for leeftijd, lengte in bezoekers:
if leeftijd >= 12 and lengte >= 140:
print(leeftijd, lengte, "achtbaan")
elif leeftijd >= 12 or lengte >= 140:
print(leeftijd, lengte, "botsauto's")
else:
print(leeftijd, lengte, "draaimolen")

Uitvoer:

13 150 achtbaan
10 145 botsauto's
14 130 botsauto's
9 120 draaimolen

Bespreek na. Vraag 3: wie allebei de eisen haalt, is al door if opgevangen. Bij elif komt dus alleen wie er hooguit één haalt.

Verder op de site​