Program Arcade Games
With Python And Pygame

Chapter 3: Kwisspelletjes en If Statements

Hoe kan je weten dat een speler de hoogste score heeft behaald? Hoe kunnen we weten of hij nog extra levens heeft? Hoe kunnen we weten dat zij de sleutel heeft om de deur te openen?

Video: Inleiding tot het if statement

Wat we nodig hebben is een if statement. Het if statement is ook gekend als een conditie. (Je kan de term “conditional statement” gebruiken om indruk te maken op iemand.) Het if statement laat de computer toe om een beslissing te maken. Is het warm buiten? Heeft het ruimteship de rand van het scherm bereikt? Werd er teveel geld van de rekening genomen? Een programma kan testen op al deze zaken met het if statement.

3.1 Basis Vergelijkingen

Hier zijn een aantal voorbeelden van if statements. Het eerste deel heeft twee variabelen (a and b) die gebruikt worden in een if statements. Dan zijn er twee if statements die tonen hoe je variabelen vergelijkt om te zien wie groter is dan de andere. Druk op “Stap” knop en zie hoe de computer de code evalueert.

# Variabelen gebruikt in if statements
a = 4
b = 5

# Basis vergelijking
if a < b:
    print ("a is kleiner dan b")

if a > b:
    print ("a is groter dan b")
	
print("Einde")
Variabelen:
a=4
b=5
Output:
a is kleiner dan b
Einde

Omdat a kleiner is dan b, wordt het eerste statement geprint wanneer de code wordt uitgevoerd. Wanneer beide variabelen a en b gelijk waren aan 4, dan zouden beide if statements niets uitprinten. Het getal 4 is niet groter dan 4 en dus wordt het if statement niet uitgevoerd.

Om te tonen hoe de 'flow' van een programma verloopt kan je gebruik maken van een flowchart. De meeste mensen kunnen flowcharts begrijpen, zelfs zonder dat ze kunnen programmeren. Bekijk of je Figuur 3.1 begrijpt.

fig.flowchart1
Figure 3.1: Flowchart

Dit book gaat niet grondig in op flowcharting omdat het saai is. Maar als een top-programmeur wil worden dan kan je het volgende lezen :
http://en.wikipedia.org/wiki/Flowchart

Het vorige voorbeeld controleerde op groter dan of kleiner dan. Getallen die gelijk waren ontsnapten aan de test. Om te controleren of getallen groter dan zijn of gelijk, moet je het volgende meegeven :

if a <= b:
    print ("a is kleiner dan of gelijke aan b")

if a >= b:
    print ("a is groter dan of gelijk aan b")

Het <= en >= symbool moet in die volgorde en er mogen geen spaties tussen. Voorbeeld, =< zal niet werken, en ook < = niet.

Wanneer ik dit vraag op een toets zijn er studenten die gebruik maken van het ≤ symbool. Voorbeeld :
if a ≤ b:

Dit ≤ symbool werkt niet in een programma. Plus de meeste mensen weten niet hoe ze dit makkelijk kunnen intypen op een toetsenbord. (Alleen maar voor de nieuwsgierigen, Hou 'alt( toets ingedrukt en type het cijfer 243 op het numeriek klavier.) Dus wanneer je code schrijft gebruik je <= en niet ≤. Vele verliezen daar hun punten.

De operator voor gelijk aan is == en de operator voor niet gelijk aan is !=. Kijk hieronder hoe ze werken.

# Gelijk
if a == b:
    print ("a is gelijk aan b")
   
# Niet gelijk 
if a != b:
    print ("a en b zijn niet gelijk")
Opgepast! Veel voorkomende fout.

OPMERKING : Het komt veel voor dat er een verwarring is tussen == en =. Gebruik == wanneer je wil vragen of iets gelijk is, gebruik = wanneer je iets wil toekennen.

De twee meestvoorkomende fouten met = en == operatoren zijn de volgende :

# Dit is fout
a == 1
	
# Dit is ook fout
if a = 1:
    print ("A is één")

Stop! Ga alsjeblief terug en neem de tijd om de laatste 2 voorbeelden te bekijken. Het zal je tijdswinst opleveren wanneer we gebruik gaan maken van = en ==. Niet gokken!

3.2 Inspringen of Indentation

Inspringen of indentation is van belang. Elke lijn onder een if statement waar werd ingesprongen zal alleen uitgevoerd worden als het statement waar (true) is:

if a == 1:
    print("Als a gelijk is aan één wordt dit geprint.")
    print("En ook dit.")
    print("En ook dit zal geprint worden.")
	
print("Dit wordt altijd geprint omdat hier niet werd ingesprongen.")

De inspringen moet hetzelfde zijn. Volgende code werkt niet.

if a == 1:
  print("Inspringen met twee spaties.")
    print("Inspringen met vier spaties. Dit zal een fout veroorzaken.")
   print("De computer zal zich afvragen wat je nu eigenlijk wil.")

Eens een if statement is beeindigd, is het niet meer mogelijk om opnieuw in te springen om terug te keren. Je zal de test (if) opnieuw moeten doen.

if a == 1:
    print("Als a gelijk is aan één wordt dit geprint.")
    print("En ook dit.")

print("Dit wordt altijd geprint omdat er niet ingesprongen werd.")
    print("Dit zal een fout geven. Waarom wordt hier ingesprongen?")

3.3 Gebruik van And/Or

Een if statement kan testen op meerdere condities door een aaneenschakeling van vergelijkingen met and en or. Ze worden beschouwd als operators zoals + of -.

# And
if a < b and a < c:
    print ("a is kleiner dan b en c")
 
# Non-exclusive or   
if a < b or a < c:
    print ("a is kleiner dan b or c (of beide)")
Herhaal dit voor jezelf aub.

Een veelvoorkomende fout is dat bij de tweede vergelijking de variabele wordt weggelaten. De code hieronder werkt niet omdat de computer niet weet wat hij moet vergelijken met variabele c. Hij kan niet veronderstellen dat dit met a is.

# This is niet correct
if a < b or < c:
    print ("a is kleiner dan b en c")

3.4 Boolean Variables

Python supporteert Booleaanse variabelen. Wat zijn Booleaanse variabelen? Booleaanse variabelen kunnen ofwel de waarde True ofwel de waarde False bevatten. Boolean algebra werd ontwikkeld door George Boole ergens in 1854. Moest die ooit geweten hebben hoe belangrijk zijn werk is geworden voor de moderne computer logica!

Een if statement heeft een vergelijking nodig om te evalueren of het True of False is. Wat misschien raar lijkt is dat je niet de vergelijking moet maken of een variabele True of False is.

# Booleaans data type. Dit is correct!
a = True
if a:
    print ("a is true")

Wanneer je wil controleren of het statement false is moet je gebruik maken van de not operator. De volgende code gebruikt not om de waarde van a te wijzigen tussen true en false.

# Hoe gebruik je de not operator
if not(a):
    print ("a is false")

Omdat de not operator geen functie is, zijn de haakjes niet nodig. Het volgende mag ook:

# Hoe gebruik je de not operator
if not a:
    print ("a is false")

Het is ook mogelijk om booleaanse variabelen te gebruiken met and en or operators.

a = True
b = False

if a and b:
    print ("a en b zijn beide true")
Wie dacht dat True/False moeilijk is?

Het is ook mogelijk om een variabele toe te kennen aan het resultaat van een vergelijking. In de onderstaande code wordt de variabelen a en b met elkaar vergeleken. Als ze gelijk zijn dan wordt c gelijk aan True, anders wordt c False.

a = 3
b = 3
# De volgende lijn lijkt raar maar is volledig correct.
# c wordt true of false, afhankelijk of 
# a en b gelijk zijn.
c = a == b
# Print de waarde van c, in dit geval True
print(c)
Nul is False. Al de rest is True.

Het is mogelijk om een if statement te maken zonder dat de evaluatie of het True of False is er bij staat. Dit wordt niet vaak gebruikt maar het is wel belangrijk om te weten dat het kan wanneer je op zoek gaat naar problemen of wanneer je kijkt naar andermans coding. Het statement hieronder is correct en zal ervoor zorgen dat de tekst wordt geprint omdat de waarde van het if statement niet gelijk is aan nul :

if 1:
	print ("1")
if "A":
	print ("A")

De code hieronder zal niets printen omdat de waarde van het if statement gelijk is aan nul en dus behandeld wordt als False. Alle andere waarden verschillend van nul worden beschouwd als True.

if 0:
	print ("Zero")

In de code hieronder lijkt het if statement te werken. Het probleem is dat het resultaat altijd True zal zijn, zelfs al is de variabele a niet gelijk aan b. Dit komt omdat b zichzelf beschouwd als True.(zoals hierboven).

a = "c"
if a == "B" or "b":
	print ("a is gelijk aan b. Misschien.")
	
# Dit is een betere manier om het if statement te schrijven.
if a == "B" or a == "b":
	print ("a is gelijk aan b.")

3.5 Else en Else If

In de code hieronder wordt de temperatuur gevraagd aan de gebruiker (user) en als het warm is wordt dit geprint.

temperature = int(input("Wat is de temperatuur in Fahrenheit? "))
if temperature > 90:
    print("Het in warm buiten")
print ("Einde")

Wanneer de programmeur ook code wil laten uitvoeren wanneer het niet warm is kan hij gebruik maken van het else statement. Kijk goed hoe het else op gelijke hoogte staat dan de i van het if statement, en het wordt gevolgd door een dubbele punt net zoals het if statement.

In het geval van een if...else statement, zal er altijd 1 blok van coding uitgevoerd worden. Het eerste blok zal worden uitgevoerd indien het statement True weergeeft en het tweede blok zal False weergeven.

temperature = int(input("Wat is de temperatuur in Fahrenheit? "))
if temperature > 90:
    print("Het is warm buiten")
else:
    print("Het is niet warm buiten")
print ("Einde")

Het is ook mogelijk om een ketting te maken van if statements gecombineerd met het gebruik van else...if statement. Python kort deze af tot elif.

temperature = int(input("Wat is de temperatuur in Fahrenheit? "))
if temperature > 90:
    print("Het is warm buiten")
elif temperature < 30:
    print("Het is koud buiten")
else:
    print("Het is niet te warm en niet te koud buiten")
print ("Einde")
Video: Volgorde van if statements

In the code below, the program will output “It is hot outside” even if the user types in 120 degrees. Why? How can the code be fixed?

If you can't figure it out, see the video.

temperature = int(input("Wat is de temperatuur in Fahrenheit? "))
if temperature > 90:
    print("Het is warm buiten")
elif temperature > 110:
    print("Het is heet buiten!")
elif temperature < 30:
    print("Het is koud buiten")
else:
    print("Het is ok buiten")
print ("Einde")

3.6 Tekst vergelijkingen

Het is ook mogelijk om gebruik te maken van het if statement om te checken op tekst. (Opmerking, Wanneer Eclipse wordt gebruikt in plaats van het IDLE program, zal het voorbeeld niet werken omdat de input een extra extra carriage return bevat op het einde.)

userName = input("Wat is uw naam? ")
if userName == "Paul":
    print("Je hebt een leuke naam.")
else:
    print("Je naam is ok.") 

Het vorige voorbeeld zal alleen werken wanneer de user “Paul” ingeeft. Het zal niet werken wanneer de user “paul” of “PAUL” ingeeft.

Een veelvoorkomende fout is dat de aanhalingstekens worden vergeten rond de tekst (string) die wordt vergeleken. In het voorbeeld hieronder zal de computer denken dat Paul een variabele is die een waarde bevat. Het zal een fout geven omdat de computer niet weet welke waarde er in die variabele Paul dan zit.

userName = input("Wat is je naam? ")
if userName == Paul: # Hier ontbreken de aanhalingstekens
    print("Je hebt een mooie naam.")
else:
    print("Je naam is ok.") 

3.6.1 Meerdere Tekst mogelijkheden

Wanneer we een variabele gaan vergelijken met meerdere strings van tekst, is het belangrijk dat de variabele gebruikt wordt in de vergelijking. Voorbeeld:

# Dit werkt niet en geeft altijd True
if userName == "Paul" or "Mary":

Eigenlijk zou de code als volgt moeten zijn :

# Dit werkt wel
if userName == "Paul" or userName == "Mary":

Dit komt omdat elke waarde anders dan nul door de computer aanzien wordt als True. Dus voor de computer is "Mary" hetzelfde als True en dus zal de code van toepassing zijn in het if statement.

3.6.2 Letterongevoelige vergelijkingen

Als een programma een vergelijking moet maken ongeacht of er hoofdletters of kleine letters worden gebruikt, dan is de gemakkelijkste oplossing om de tekst om te zetten naar kleine letters. Dit kan je doen door het gebruik van het lower command.

Het voorbeeld hieronder zal eender wat de user heeft ingegeven omzetten naar kleine letters om dan de vergelijking te doen. Belangrijk : Vergelijk de string dan niet met hoofdletters, anders zal er nooit geen match kunnen zijn.

userName = input("Wat is je naam? ")
if userName.lower() == "paul":
    print("Je hebt een leuke naam.")
else:
    print("Je naam is ok.") 	

3.7 Voorbeeld if Statements

Video: If statement voorbeelden

De volgende reeks voorbeelden geven de reeds besproken concepten weer. De video geeft een overzicht van de code en legt uit hoe het werkt.

De video gebruikt een geintegreerde editor Eclipse. De standaard versie van Eclipse werkt niet voor Python, maar de PyDev versie doet dat wel. De PyDev editor is gratis beschikbaar via :
http://pydev.org/

The editor is niet gemakkelijk, maar hij heeft veel opties en het is een krachtige ontwikkelinsomgeving. Sommige programmeurs houden van zulke omgeving omdat deze bijna alles kan behalve koffie voor je halen, anderen geven de voorkeur aan de meest simpele editors.

# Sample Python/Pygame Programs
# Simpson College Computer Science
# http://programarcadegames.com/
# http://simpson.edu/computer-science/

# Explanation video: http://youtu.be/pDpNSck2aXQ

# Variables used in the example if statements
a = 4
b = 5
c = 6

# Basic comparisons
if a < b:
    print("a is less than b")

if a > b:
    print("a is greater than than b")

if a <= b:
    print("a is less than or equal to b")

if a >= b:
    print("a is greater than or equal to b")

# NOTE: It is very easy to mix when to use == and =.
# Use == if you are asking if they are equal, use =
# if you are assigning a value.
if a == b:
    print("a is equal to b")

# Not equal
if a != b:
    print("a and b are not equal")

# And
if a < b and a < c:
    print("a is less than b and c")

# Non-exclusive or
if a < b or a < c:
    print("a is less than either b or c (or both)")


# Boolean data type. This is legal!
a = True
if a:
    print("a is true")

if not a:
    print("a is false")

a = True
b = False

if a and b:
    print("a and b are both true")

a = 3
b = 3
c = a == b
print(c)

# These are also legal and will trigger as being true because
# the values are not zero:
if 1:
    print("1")
if "A":
    print("A")

# This will not trigger as true because it is zero.
if 0:
    print("Zero")

# Comparing variables to multiple values.
# The first if statement appears to work, but it will always
# trigger as true even if the variable a is not equal to b.
# This is because "b" by itself is considered true.
a = "c"
if a == "B" or "b":
    print("a is equal to b. Maybe.")

# This is the proper way to do the if statement.
if a == "B" or a == "b":
    print("a is equal to b.")

# Example 1: If statement
temperature = int(input("What is the temperature in Fahrenheit? "))
if temperature > 90:
    print("It is hot outside")
print("Done")

# Example 2: Else statement
temperature = int(input("What is the temperature in Fahrenheit? "))
if temperature > 90:
    print("It is hot outside")
else:
    print("It is not hot outside")
print("Done")

# Example 3: Else if statement
temperature = int(input("What is the temperature in Fahrenheit? "))
if temperature > 90:
    print("It is hot outside")
elif temperature < 30:
    print("It is cold outside")
else:
    print("It is not hot outside")
print("Done")

# Example 4: Ordering of statements
# Something with this is wrong. What?
temperature = int(input("What is the temperature in Fahrenheit? "))
if temperature > 90:
    print("It is hot outside")
elif temperature > 110:
    print("Oh man, you could fry eggs on the pavement!")
elif temperature < 30:
    print("It is cold outside")
else:
    print("It is ok outside")
print("Done")

# Comparisons using string/text
# Note, this example does not work when running under Eclipse
# because the input will contain an extra carriage return at the
# end. It works fine under IDLE.
userName = input("What is your name? ")
if userName == "Paul":
    print("You have a nice name.")
else:
    print("Your name is ok.")

3.8 Herhalingsvragen

Click here for a multiple-choice herhalingskwis.

  1. Verbeter de volgende code:
    temperature = float (input("Temperature")
    if temperature > 90:
        print("It is hot outside.")
    
  2. Er zijn twee dingen fout met de code. De eerste zorgt ervoor dat de code niet draait en de andere is iets meer subtiel.
    x == 4
    if x >= 0:
        print("x is positive.")
    else:
        print("x is not positive.")
    
  3. Er zijn vier dingen mis met deze code. Copieer ze in een script en zoek de fouten.
    answer = input("What is the name of Dr. Bunsen Honeydew's assistant?")
    if a = "Beaker":
        print("Correct!")
        else
        print("Incorrect! It is Beaker.")
    
  4. Verbeter de volgende fouten:
    userInput = input("A cherry is a:")
    print("A. Dessert topping")
    print("B. Desert topping")
    if userInput=="A":
        print("Correct!")
    
  5. Wat zijn de drie fouten in de volgende code?
    x = input("Enter a number:")
    if x = 3
        print ("You entered 3")
    
  6. Dit programma werkt niet correct. Wat is fout?
    x = input("How are you today?")
    if x == "Happy" or "Glad":
        print ("That is good to hear!")
    
  7. Kijk naar de code hieronder. Wat denk je dat er zal geprint worden? Daarna run je het programma en kijk je of dit correct was :
    x = 5
    y = x == 6
    z = x == 5
    print("x=",x)
    print("y=",y)
    print("z=",z)
    if y:
        print ("Fizz")
    if z:
        print ("Buzz")
    
  8. Verbeter de volgende code:
    answer = input("True or False, is 3+4 equal to 7?")
    a = True
    b = False
    if a:
        print("Correct")
    else:
        print("Incorrect")
    
  9. Schrijf een Python programma dat een getal vraagt aan de user en afdrukt of dit getal positief, negatief of nul is.
  10. Schrijf een Python programma dat een getal vraagt aan de user en print “Success” wanneer het groter is dan -10 en kleiner dan 10, (10 zelf is inbegrepen).

3.9 Oefening

Complete Oefening 2 “Maak een Kwis” Maak je eigen kwisprogramma en maak gebruik van het if statement.


You are not logged in. Log in here and track your progress.