09: Else, And, Or, Not

In deze les leer je om complexe opgaven, waarin een voorwaarde getest wordt, elegant uit te voeren. Daarbij komen twee nieuwe aspecten van Python aan de orde.

  • na een if «C» statement, wordt een else statement alleen maar uitgevoerd wanneer C false is
  • je kunt Booleaanse voorwaarden combineren tot A and B, A or B, en not A

else

Het is vrij normaal dat je bij het schrijven van een programma een voorwaarde wilt testen, en afhankelijk of de voorwaarde waar of niet waar is de ene dan wel de andere actie uitvoert. We zagen daar eerder een voorbeeld van, toen we wilden bepalen welke van de twee getallen x en y het grootst was, waarbij we twee if statements gebruikten. Laten we het programma herschrijven en het else statement gebruiken:

Voorbeeld
Berekening van het maximum en illustratie van else
Type de invoer voor je programma hieronder in.

Algemener, je gebruikt else via het volgende paar blok statements:

if «voorwaarde»:
   «true-gedeelte»        # een inspringend blok
else:
   «false-gedeelte»       # nog een inspringende blok
Python evalueert de voorwaarde. Wanneer deze waar is wordt het true-gedeelte uitgevoerd, en wanneer het niet waar is wordt het false-gedeelte uitgevoerd.

De filosofie van else

Het is niet zo dat we iets extra's kunnen door het gebruik van else, maar het programma is wel gemakkelijker te lezen, fouten zijn makkelijker te vinden, en het programma is gemakkelijker te onderhouden. Hier volgen twee programma onderdelen die hetzelfde doen:

Versie A
if lengte < 256:
   print('Te klein voor deze rit')
else:
   print('Welkom aan boord!')
Versie B
if lengte < 256:
   print('Te klein voor deze rit')
if lengte >= 256:
   print('Welkom aan boord!')

Beide versies doen hetzelfde, en versie B wordt niet eens else gebrukt. Maar de meeste programmeurs zijn het erover eens dat versie A beter is. Bijvoorbeeld als bij versie B, de voorwaarde veranderd moet worden (bijv., wanneer er met 200 in plaats van 256 vergeleken dient te worden) dan is er maar één verandering nodig bij de code van versie A in plaats van twee keer bij de code van versie B. Ook, kan versie A onmiddellijk begrepen worden, terwijl in B je dient te checken of wellicht geen of allebei de voorwaarden waar zijn.

Programmeeroefening: Absolute waarde
De absolute waarde van een getal is als volgt gedefinieerd. Voor een getal x dat positief of 0 is, is de absolute waarde van x is x. Wanneer x een negatief getal is, dan is de absolute waarde van x gelijk aan -x, of in andere woorden hetzelfde als x maar zonder het min teken. Zo is de absolute waarde van 5 gelijk aan 5, en is de absolute waarsw van -10 gelijk aan --10 oftewel 10. Schrijf een programma dat een geheel getal als invoer in leest en dat de abolute waarde ervan afdrukt en gebruik daarbij if en else.
Type de invoer voor je programma hieronder in.

Python heeft een ingebouwde functie abs(x) die de absolute waarde van x levert. De grader hierboven verhindert het gebruik ervan hier, maar elders kun je abs(x) gewoon gebruiken.

elif

In Python bestaat ook elif, waarmee het gemakkelijker gemaakt wordt om meerdere voorwaarden achter elkaar te checken. Het normale gebruik van elif is het volgende:

if «voorwaarde1»:
   «gedeelte1»        # wordt uitgevoerd wanneer voorwaarde1 waar is
elif «voorwaarde2»:
   «gedeelte2»        # wordt uitgevoerd wanneer voorwaarde1 niet waar is, en voorwaarde2 waar is
Zoals je wel begrepen zult hebben is elif de afkorting van "else if", omdat het hetzelfde is als het opnemen van een if statement binnen een else gedeelte. maar het leidt tot een kortere code en minder inspringen. En dat maakt dat je programma makkelijker te lezen is, en dat je er makkelijker fouten uit kunt halen en ook dat het makkelijker te schrijven is. Sterker nog je kunt een willekurig aantal elif statements achter elkaar zetten en al of niet een else statement op het eind toevoegen:

if «voorwaarde1»:
   «gedeelte1»      # wordt uitgevoerd wanneer voorwaarde1 waar is 
elif «voorwaarde2»:
   «gedeelte2»      # wordt uitgevoerd wanneer voorwaarde1 niet waar is en voorwaarde2 waar is
elif «voorwaarde3»:
   «gedeelte3»      # wordt uitgevoerd wanneer voorwaarde1 en voorwaarde 2 beiden niet waar zijn en voorwaarde3 waar is
else:               # de laatste twee regels kunnen voorkomen maar dat hoeft niet
   «else-gedeelte»  # wordt uitgevoerd wanneer ALLE voorwaarden niet waar zijn
Programmeeroefening: First, Second, Third
De Engelstalige woorden 1st, 2nd, 3rd, 4th, 5th, 6th, 7th, 8th, 9th worden rangtelwoorden genoemd. Schrijf een programma dat een geheel getal x tussen 1 en 9 als invoer inleest. Het programma dient het bij x behorende (Engelse) rangtelwoord af te drukken.
Hint: je hoeft geen 9 aparte gevallen te onderscheiden; 4 is genoeg.
Type de invoer voor je programma hieronder in.

Booleaanse operatoren: and, or, not

Je kunt "and", "or", en "not", combineren.

  • De expressie A and B is waar indien zowel A als B waar zijn, en is niet waar wanneer één van beiden niet waar is. (Bijvoorbeeld, je wordt nat wanneer het regent and je hebt je paraplu vergeten.)
  • De expressie A or B is waar wanneer ofwel A waar is of B waar is, en is niet waar wanneer beiden niet waar zijn (Bijvoorbeeld, de school is dicht wanneer het vakantie is or wanneer het weekend is.)
  • De expressie not A is waar wanneer A niet waar is, en is niet waar wannneer A waar is. (Bijvoorbeeld, je hebt trek wanneer je not een lunch hebt gehad.)

Hier volgt een programma dat alle mogelijkheden laat zien. Precies zoals de 'tafels van vermenigvuldiging' die je je herinnert van de basisschool. Dit wordt een waarheidstabel genoemd.

Voorbeeld
Waarheidstabel

Een voorbeeld waarbij and wordt gebruikt. Hier is een programma dat getallen in letters vertaalt, waarbij gelet wordt op niet correcte invoer.

Voorbeeld
Een voorbeeld met and: Vertalen van getallen in letters, met 1=A, 2=B, etc.
Type de invoer voor je programma hieronder in.

Programmeeroefening: 26 Letters
Schrijf een programma dat het tegenovergestelde doet dan het voorbeeld hierboven: het krijgt als invoer een letter en als uitvoer het corresponderende getal (tussen 1 en 26). Je programma mag alleen maar hoofdletters accepteren. Als foutmelding moet je programma niet toegestaan afdrukken wanneer de invoer geen hoofdletter is. HintAlternatieve string vergelijkingsmethode
Type de invoer voor je programma hieronder in.

Meerkeuze Opgave: De wet van De Morgan
Welke van de volgende expressies is equivalent aan A or B?
Correct! Here is one way to arrive at this answer. First, not (A or B) is only true when both A and B are false. Also, note that (not A) and (not B) is only true if both not A and not B are true, i.e. if both A and B are false. So we have the following equality:
(not A) and (not B) = not (A or B)
Put a not around both sides, so we deduce
not ((not A) and (not B)) = not (not (A or B))
and observe that not(not X)) always equals X, so
not ((not A) and (not B)) = not (not (A or B)) = A or B
This way of rewriting a boolean expression is one of De Morgan's laws.

Volgorde van de operaties

Booleaanse operatoren hebben "volgorde" net zoals rekenkundige operatoren. De volgorde is

NAO: not (hoogste voorkeur), and, or (laagste voorkeur)

zo geldt,

not x or y and z betekent (not x) or (y and z)

We sluiten deze les af met een korte vraag over deze feiten.

Meerkeuze Opgave: Volgorde van de operaties
Wat is de waarde van

A or not B and C
wanneer (A, B, C) = (False, True, True)? Hint
Correct! The order of operations makes this equivalent to
A or ((not B) and C)
substituting the values, we have
False or ((not True) and True)
and now simplifying one step at a time gives
False or ((not True) and True)
= False or (False and True)
= False or False
= False
Wanneer je dit hebt doorgewerkt, ben je klaar voor de volgende les.