Les 4: Booleaanse expressies

Booleaanse expressies

Eerder hebben we bij de if-expressies vergelijkingen gebruikt. Als dit waar is, dan doen we dat! Deze vergelijkingen worden ook wel booleaanse expressies genoemd. Een booleaanse expressie is een vergelijking waarvan er alleen gezegd kan worden of deze waar is of niet. Het kan niet misschien waar zijn of half waar. Hier krijg je dan de Engelse woorden true (waar), en false (onwaar) van. In Python schrijf je waar als True en onwaar als False. Hieronder wat voorbeelden:

Booleaanse expressie

True / False

4 > 3

True

5 <= 2

False

2 != 3

True

2 <= 2

True

2 < 2

False

"Henk" == "Henk"

True

"henk" == "Henk"

False

Bij de if-expressies zou de booleaanse expressie 4>3, een true geven, en dan wordt de code in deze if-expressie uitgevoerd. Bij 4<3 zou er een false gegeven worden, en zou er niks gebeuren, of gaat de computer naar de volgende if-expressie. Kijk de volgende voorbeelden maar door, hier zie je een hele lijst met booleaanse expressies. Kijk maar of je snapt waarom het programma deze antwoorden terug geeft.

a = 6
b = 7
c = 42
print (1, a == 6)
print (2, a == 7)
print (3, a == b)
print (4, a * b == c)
print (5, c / a == b)
print (6, a + b == c)
print (7, a > b)
print (8, a < b)
print (9, b != a)
print (10, b != c / a)

Als je een true terug krijgt bij deze booleaanse expressies, voert het programma alles af wat nog komt binnen de if-expressie, en anders stopt het en gaat deze verder. Later zullen we nog andere gevallen leren waarbij booleaanse expressies van belang zullen zijn.

Opgave

Bedenk voordat je de komende booleaanse expressies zelf uitvoert, of ze een true of false geven. Voer ze daarna uit.

  1. 4 > 5

  2. 4 != 4

  3. 4 == (7 - 3)

  4. a = 3 b = 6 b - a == a

  5. “hallo” == “hallo”

Zoals je hierboven kan zien, kan je ook booleaanse expressies uitvoeren met strings. Het komt erop neer dat alles dat voor de vergelijkings expressie hetzelfde is als erna, dat er dan true uit komt. Dit is handig voor als je input wilt vergelijken en wilt dat de gebruiker dit precies in typt zoals jij wilt! Dit hebben we natuurlijk al eerder gezien.

Opgave

Schrijf een programma dat door middel van booleaanse waarden kijkt welke soorten fruit de gebruiker wilt, en vervolgens vraagt hoeveel de gebruiker er van zou willen. Geef twee verschillende soorten fruit als mogelijkheid. voorbeeld

>>> Hallo, wilt u appels of peren? >>> peren >>> Hoeveel peren wilt u? >>> 6 >>> Oke! Wij sturen u 6 peren!

Het if-statement uitbreiden met elif

Met de if opdracht kun je een onderscheid maken tussen twee verschillende mogelijkheden: of de if-voorwaarde is waar of hij is onwaar. Soms zijn er meer dan twee mogelijkheden en hebben we meer dan twee takken nodig. Een manier om een dergelijke berekening vorm te geven is een gekoppelde voorwaarde:

Als ik mijn schoen in mijn handen heb.

Trek ik hem aan.

of Als ik het koud heb.

Pak ik mijn jas.

En anders

Ga ik op de bank zitten.

Hier is dus een situatie waar je je schoen aantrekt, als je hem in je handen hebt.. Of ‘als je het koud hebt’, ‘dan pak je je jas’. En in alle andere gevallen ga je op de bank zitten. Je kunt dit soort situaties programmeren met een elif. We gaan dat uitleggen met een voorbeeld met getallen. Bekijk de volgende code:

dier = input("Kies een dier: ")
gerecht = input("Kies een gerecht: ")

if dier == "Cheetah":
  print("Mijn favoriete dier!")
elif gerecht == "Pasta":
  print("Mijn favoriete gerecht!")
else:
  print(dier + " is niet mijn favoriete dier.")
  print(gerecht + " is ook niet mijn favoriete gerecht.")

Hoe de if-elif-else constructie werkt zie je in het volgende plaatje:

elif is een afkorting van "else if". Ook hier wordt precies één tak uitgevoerd. Er is geen limiet op het aantal elif instructies. Staat er een else opdracht, dan is dat het einde, maar deze hoeft er niet te staan.

Opgave - tempratuur

Schrijf een programma waar de gebruiker een temperatuur moet ingeven. Als het onder nul is moet het programma zeggen "Het vriest!". Als de temperatuur tussen 0 en 15 zit, zeg je: "Trek een jas aan als je naar buiten gaat." Anders zeg je: "Je kan zonder jas naar buiten!"

Opgave - leeftijd en jaartallen

Schrijf een programma dat de gebruiker vraagt om drie dingen:

  • het huidige jaar,

  • zijn/haar geboortejaar

  • leeftijd.

Als het geboortejaar na het huidige jaar ligt, schrijf dan naar het scherm:

Je bent nog niet geboren.

Als de persoon al jarig is geweest schrijf je:

Je bent dit jaar al jarig geweest.

Als de persoon nog niet jarig is geweest schrijf je:

Je bent dit jaar nog niet jarig geweest.

Als de leeftijd niet kan kloppen schrijf je:

Je leeftijd klopt niet met de jaartallen!

keuze = input("Kies een letter (a,b,c)")
if keuze == "a":
      print("je hebt gekozen voor a")
elif keuze == "b":
      print("je hebt gekozen voor b")
elif keuze == "c":
      print("je hebt gekozen voor c")
else:
	print ("Je hebt voor een andere letter gekozen")

Elke voorwaarde wordt in volgorde gecontroleerd. Is de eerste onwaar, dan wordt de volgende gecontroleerd, enzovoorts. Is er één waar dan wordt de bijbehorende tak uitgevoerd en de instructie eindigt. Zelfs als er meer dan één voorwaarde waar zou zijn. Alleen de tak bij de eerste keer waar wordt uitgevoerd.

import turtle

def vierhoek():
  for i in range(4):
    turtle.forward(50)
    turtle.right(90)

def driehoek():
  for i in range(3):
    turtle.forward(50)
    turtle.right(120)

def vijfhoek():
  for i in range(5):
    turtle.forward(50)
    turtle.right(360/5)

keuze = input("Maak een keuze: (a) vierkant, (b) driehoek en (c) vijfhoek")

if keuze == "a":
  vierhoek()
elif keuze == "b":
  driehoek()
elif keuze == "c":
  vijfhoek()
else:
  print ("Je hebt een verkeerde keuze gemaakt!")
  

Opgave - Raad het getal

Schrijf een programma waarin de gebruiker wordt gevraagd om een getal, en vergelijk die vervolgens met een ander getal die je er zelf in hebt gezet. Is het getal hetzelfde, vertel dit dan aan de gebruiker, en zeg anders dat het niet hetzelfde is.

Opgave - Wat voor fruit wil je?

Schrijf een programma waar de gebruiker wordt gevraagd van welk soort fruit hij/zij houdt. De keuze moet tussen twee soorten fruit zijn, en dit moet een toepasselijke reactie opbrengen. En als de gebruiker iets anders zegt moet dit ook opgevangen worden met een reactie.

Opgave - Afronden

Schrijf een programma die een getal naar beneden afrondt als de gebruiker “beneden” in typt, naar boven afrondt als er “boven” wordt gegeven, en anders de wortel van het getal neemt.

Opgave - rekenmachine

Schrijf een programma dat reageert als een rekenmachine door middel van de input() functie. Zorg ervoor dat de eerste input de soort berekening wordt (optellen, aftrekken, delen of vermenigvuldigen) en de tweede en derde input de getallen zijn waarmee de berekening uitgevoerd wordt. Denk eraan hoe je bij bepaalde berekeningen de input en output wilt hebben in verband met informatietypes!

If-opdrachten in if-opdrachten

In de vorige les heb je geleerd dat over if-elif-else expressies, maarrrr wist je ook dat je if-opdrachten in if-opdrachten kan plaatsen?! Dit worden geneste if-opdrachten genoemd. Zo een geneste if ziet er schematisch uit als volgt:

Voorbeeld:

num1 = float(input("Geef een positief getal "))
num2 = float(input("Geef een hoger getal "))

if num1 >= 0:
    if num2 > num1:
        print("Je eerste getal is " + str(num2 - num1) + " hoger!")
    else:
        print("Je hebt een lager tweede getal ingevoerd!")
else:
    print("Je hebt geen positieve getallen ingevoerd!")

Als num groter dan of gelijk is aan 0, dan komt het programma in een tweede if. Deze tweede if wordt alleen uitgevoerd als de vergelijking num >= 0 waar is (als deze booleaanse vergelijking dus true terug geeft!). De eerste else die er staat hoort bij de tweede if. Dit kun je zien aan de hand van de tabjes die zijn gebruikt. Het goed gebruiken van de tabs is hier dus ontzettend belangrijk! Mede omdat het een vereiste is van python zelf, maar ook omdat het je code een stuk leesbaarder maakt. Dit is altijd heel erg belangrijk!

Opdracht

Schrijf een programma die de gebruiker vraagt of hij een ‘lahmacun’ wil of een ‘borek’. Als de gebruiker kiest voor ‘lahmacun’, dan moet hij een tweede vraag krijgen: Wil hij er één met sambal of zonder sambal? Als de gebruiker er één met sambal wil dan zegt het programma "Alsjeblieft! Een lahmacun met sambal". Zo niet, dan zegt hij "Alsjeblieft! Een lahmacun zonder sambal". Zo ziet de werking van het programma eruit:

>>> Welkom bij de digitale kantine :) >>> Maak een keuze (lahmacun of borek) lahmacun >>> Wil je er ook sambal op? ja >>> Alsjeblieft! Een lahmacun met sambal.

Breid nu het bovenstaande programma uit. Als de gebruiker borek wil, dan krijgt hij een tweede vraag: Met gehakt of kaas? Afhankelijk van zijn keuze krijgt hij een bericht te zien. Zo kan het eruit zien:

>>> Welkom bij de digitale kantine :) >>> Maak een keuze (lahmacun of borek) borek >>> Met gehakt of kaas gehakt >>> Alsjeblieft! Een borek met gehakt!

Opdracht

Schrijf een programma waarbij je de gebruiker een vraag stelt waar alleen ja of nee op geantwoord mag worden (bij wat anders moet dit opgevangen worden!) en als er ja geantwoord wordt dan moet er een nieuwe vraag gesteld worden. Deze vragen mag je zelf bedenken, wees creatief!

Je kunt ook if-opdrachten in if-opdrachten in if-opdrachten plaatsen. In principe kun je if-opdrachten oneindig gaan nesten. Maar in de praktijk hangt het af van hoe slim je het programmeert en hoe moeilijk de keuzestructuur is.

If statements met and, or en not

Zoals je nu inmiddels heel goed weet kan je booleaanse expressies gebruiken bij verscheidene dingen! Maar wat nou als je meerdere voorwaarden tegelijk wilt controleren. Nou dit kan dus heel makkelijk! Dit kan namelijk door middel van het gebruik van and, or en not operatoren. Het gaat als volgt:

Hier schrijven we een programma waarin we checken of de gebruiker een goede keuze heeft gemaakt. De "and" operator kijkt of de twee booleaanse expressies allebei True geven en dan pas is het geheel ook True.

keuze1a = input("wilt u appels, peren of manderijnen?")
keuze1b = input("Nogmaals, wilt u appels, peren of manderijnen?")

if keuze1a == "appels" and keuze1b == "peren":
  print ("U heeft eerst appels en toen peren gekozen!")
else:
  print ("U heeft een andere combinatie gekozen dan eerst appels en toen peren.")

We kunnen ook een "or" operator gebruiken, hier wordt er gechecked of een van de twee booleaanse expressies waar zijn. Als een van de twee true geeft, is het geheel ook true. Zo kan je hier goed het verschil zien tussen "and" en "or".

keuze2 = input("wilt u appels, peren of manderijnen?")

if keuze2 == "appels" or keuze2 == "peren":
  print ("U heeft appels of peren gekozen")
else:
  print ("U heeft een manderijn gekozen!")

Dan heb je als laatst de "not" operator. Hier worden de verwachtingen van de uitkomst van de booleaanse expressies omgekeerd. Waar true wordt verwacht, wordt nu false verwacht.

keuze3 = input("wilt u appels, peren of manderijnen?")

if not(keuze3 == "appels" or keuze3 == "peren"):
  print ("U heeft geen appels of peren gekozen, dus veel plezier met uw manderijnen!")
else:
  print ("U heeft appels of peren gekozen")

Opdracht 6

Schrijf een functie die kijkt of een waarde tussen de 3 en de 8 zit. Als de waarde hier tussen zit, meld dit dan door middel van een print.

Opdracht 7

Schrijf een functie die kijkt of een waarde lager is dan 20 of hoger is dan 100. Meld weer je bevinding van de waarde d.m.v. een print.

Opdracht 8

Stel je krijgt de keuze om naar Walibi of naar slagharen te gaan. Als je naar Walibi wilt, dan krijg je korting als je met 10 of meer mensen gaat. En als je naar slagharen gaat, dan krijg je al korting als tussen de 5 of de 10 mensen mee neemt. Schrijf een programma die vraag of de gebruiker naar Walibi of slagharen wilt. En vervolgens moet er gevraagd worden met hoeveel mensen de gebruiker erheen wilt. Geef dan aan of de gebruiker korting krijgt of niet bij een bepaalde hoeveelheid mensen.

Opdracht 9

Schrijf een programma dat een zin vraagt aan de gebruiker, en vervolgens kijkt of het woord “de” niet in de zin voorkomt. Meld dit dan vervolgens.

Last updated