Hoofdstuk 5 - IF-Statements
01 - Het IF-Statement
- Met een IF-instructie kun je de actuele status van het programma bekijken en daarop reageren
- De kern van elke IF-instructie is een conditie waaraan wordt voldaan of niet (True / False)
dinner = ['biefstuk', 'roomboter', 'zout', 'pepper']
for item in dinner:
if item == 'biefstuk':
print(item.upper())
else:
print(item.title())
BIEFSTUK
Roomboter
Zout
Pepper
- == gebruik je om twee dingen te vergelijken
- De enkele = maakt een toewijzing
# Kijkt of de variabele 'item' de waarde 'biefstuk' heeft. (True / False)
item == 'biefstuk'
# Stelt de variabele 'item' in op de enkele string 'biefstuk'
item = 'biefstuk'
- Net als bij een for-loop eindigt de regel met een dubbele punt
- Een vergelijking met == is hoofdlettergevoelig
Als hoofdlettergevoeligheid uitmaakt
- De .title( )-functie maakt tijdelijk de eerste letter, per woord, een hoofdletter
- Maar de variabele blijft ongewijzigd zoals je kunt zien in het resultaat
dinner = ['biefstuk', 'roomboter', 'zout', 'pepper']
for item in dinner:
if item.title() == 'Roomboter':
print("tip:", item, "is geen optie, maar de standaard")
tip: roomboter is geen optie, maar de standaard
Bij het gebruik van komma’s in print() voegt Python automatisch spaties toe. Bij string-concatenatie (+) niet
02 - Controleren op ongelijkheid
- Als == staat voor IS GELIJK AAN, dan staat != voor IS ONGELIJK AAN
pizza_ingredients = "tomatensaus"
if pizza_ingredients != "witte chocola":
print("Deze lus ik niet...")
Deze lus ik niet...
- Het kan natuurlijk ook met integers
age = 16
if age != 18:
print("Sorry, je moet precies 18 zijn")
Sorry, je moet precies 18 zijn
Nog een operator
age = 16
if age <= 17:
print("Bestelling geweigerd")
else:
print("Uw bestelling wordt verwerkt")
Bestelling geweigerd
03 - Meerdere voorwaarden controleren ( and / or )
- Met de keywords
and&orkunnen meerdere condities worden opgegeven bij een if-statement - Met
andmoeten beide condities (zowel links als rechts van het woordand) een True opleveren - Met
orhoeft maar 1 van de 2 condities een True op te leveren - Python voert
and-vergelijkingen altijd eerder uit danor-vergelijkingen
age = 60
if age >= 18 and age <= 64:
print("Uw bestelling wordt verwerkt")
else:
print("Uw bestelling kan helaas niet worden verwerkt")
Uw bestelling wordt verwerkt
intolerance = True
allergy = False
if intolerance == True or allergy == True:
print("Misschien is een chocolade pudding beter voor u.")
Misschien is een chocolade pudding beter voor u.
- Soms kan het handig zijn om haakjes om je condities heen te zetten
- Wat binnen haakjes staat wordt eerst opgelost
meal = "kaas"
money = 0
if meal == "kaas" or meal == "eieren" and money >= 2:
print("Uw maaltijd wordt bezorgd. (De boter is gratis.)")
else:
print("Sorry de maaltijd kan niet worden bezorgd")
Uw maaltijd wordt bezorgd. (De boter is gratis.)
Het resultaat is misschien onverwacht.
De logische and operator wordt eerst geëvalueerd en daarna pas de or.
De condities links en rechts van de and worden eerst afgehandeld en daaruit zal één antwoord komen (True / False).
Om dat ene antwoord te verkrijgen moeten in het geval van de and beide condities waar zijn.
Er staat eigenlijk:
meal == "kaas" or (meal == "eieren" and money >= 2)
De oplossing voor het gewenste resultaat kan verkregen worden door ( ) haakjes op de juiste plek te zetten
meal = "kaas"
money = 0
if (meal == "kaas" or meal == "eieren") and money >= 2:
print("Uw maaltijd wordt bezorgd. (De boter is gratis.)")
else:
print("Sorry de maaltijd kan niet worden bezorgd")
Sorry de maaltijd kan niet worden bezorgd
04 - Een lijst controleren op een waarde ( IN / NOT IN )
- Een booleaanse waarde is een andere naam voor een True/False-test
- Een boolean is ofwel True of False
requested_toppings = ['uien', 'salami', 'olijven']
print('uien' in requested_toppings)
True
available_toppings = ['witte chocola', 'rood bosfruit']
requested_extra_toppings = ['ananas']
if requested_extra_toppings[0] not in available_toppings:
print('Helaas, de pizza is net uitverkocht')
else:
print('Een prima keuze')
Helaas, de pizza is net uitverkocht
05 - De if-elif-else keten
- Een eenvoudig if-statement heeft één test (conditie) en één actie
- Door een 'else' toe te voegen kan een actie worden uitgevoerd wanneer de test niet slaagt
- De if-else structuur werkt goed in situaties waarin je wilt dat Python altijd één van de twee mogelijke acties uitvoert
- Wil je meer dan twee verschillende dingen testen en daarbij verschillende acties uitvoeren dan kan een if-elif-else uitkomst bieden
weight = 600
if weight < 400:
price = 7
elif weight < 800:
price = 13
else:
price = 18
print('Uw ribeye kost € ' + str(price) + ',-' )
Uw ribeye kost € 13,-
- In de if-elif-else keten (zie hierboven) wordt maar één blok code uitgevoerd
- In een reeks eenvoudige if-statements kunnen meerdere blokken code worden uitgevoerd
available_toppings = ['salami', 'olijven', 'ansjovis', 'jalapeno']
requested_extra_toppings = ['salami', 'uien', 'olijven']
if requested_extra_toppings[0] in available_toppings:
print(requested_extra_toppings[0], 'toegevoegd')
if requested_extra_toppings[1] in available_toppings:
print(requested_extra_toppings[1], 'toegevoegd')
if requested_extra_toppings[2] in available_toppings:
print(requested_extra_toppings[2], 'toegevoegd')
salami toegevoegd
olijven toegevoegd
Een For-loop met een if-statement
- Als je merkt dat je met herhaling bezig bent, probeer een loop
available_toppings = ['salami', 'olijven', 'ansjovis', 'jalapeno']
requested_extra_toppings = ['salami', 'uien', 'olijven']
for extra_topping in requested_extra_toppings:
if extra_topping in available_toppings:
print(extra_topping + " toegevoegd")
salami toegevoegd
olijven toegevoegd
Controleer ook of een lijst leeg is
available_toppings = ['salami', 'olijven', 'ansjovis', 'jalapeno']
requested_extra_toppings = []
if requested_extra_toppings:
for extra_topping in requested_extra_toppings:
if extra_topping in available_toppings:
print(extra_topping + " toegevoegd")
else:
print(extra_topping + " niet beschikbaar")
else:
print("Weet je zeker dat je geen extra toppings wilt?")
Weet je zeker dat je geen extra toppings wilt?
# Deze notatie is niet nodig om te controleren of een lijst leeg is
if len(requested_extra_toppings) == 0:
# Python heeft een andere regel daarvoor
if requested_extra_toppings:
Een lege lijst wordt gezien als False. Een gevulde lijst wordt gezien als True.