if - else - Struktur (Selektion)


Programmverzweigungen auf Grund von bestimmten Bedingungen gehören zu den Grundstrukturen jeder Programmiersprache. Die Anweisungen nach if werden nur dann ausgeführt, wenn die Bedingung wahr ist, sonst werden die Anweisungen nach else ausgeführt. Im if-Ausdruck werden üblicherweise die Vergleichsoperatoren >, >= , < , <= , == , != verwendet.

Beispiel 1: Die Turtle zeichnet eine Treppe mit 10 Stufen. Die Farbe der Stufen wird mit einer if-else-Struktur bestimmt. Ist die Stufenzahl gerade, wird eine rote Stiftfarbe gewählt, sonst eine grüne. Für die Überprüfung, ob i gerade oder ungerade ist, wird die Modulodivision durch 2 verwendet, die den Rest nach der Division durch 2 liefert. Ist der Rest 0, so ist die Zahl gerade, sonst ungerade.

 

# Tu5.py

from gturtle import *

makeTurtle()
setPos(-200, -200)
setPenWidth(5)
for i in range(10):
    if i % 2 == 0:
        setPenColor("red")
    else:
        setPenColor("green")
    forward(40)
    right(90)
    forward(40)
    left(90)
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)
 

Erklärungen zum Programmcode:

if i % 2 == 0: falls i eine gerade Zahl ist

 

  if - Struktur

Oft ist der else-Teil überflüssig Das Programm verzweigt in den if-Block, falls die Bedingung erfüllt ist.

Beispiel 2: Die Turtle bewegt sich in einer Wiederholstruktur vorwärts und dreht um 90° nach rechts. Dabei wird die Schrittlänge nach jedem Schleifendurchgang um 2 vergrössert. Falls die Schrittlänge gleich 140 ist, wechselt die Stiftfarbe auf grün. Die aktuelle Schrittlänge kann in der Statusbar ausgeschrieben werden.


# Tu5a.py

from gturtle import *

makeTurtle()
  
addStatusBar(20)
speed(-1)
setPenColor("red")
for s in range(4, 220, 2):
    if s == 140:
        setPenColor("green")
    forward(s)
    right(90)
    setStatusText("Size: " + str(s))
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)
 

Erklärungen zum Programmcode:

Der Befehl addStatusBar(20) erzeugt eine 20 Pixel hohe Statusbar, in der während der Programmausführung Informationen ausgeschrieben werden können
setStatusText("Size: " + str(s)) ersetzt den vorhandenen Text durch einen neuen. In unserem Beispiel wird hier die aktuelle Grösse der gezeichneten Linie angegeben

 

  Bedingungen verknüpfen (logisches and und or)

Mit den logische Operatoren and und or können Bedingungen verknüpft werden.
A and B ist wahr, wenn beide Bedingungen A und B efüllt sind.
A or B ist wahr, wenn mindestens eine der Bedungungen erfüllt ist.

Beispiel 3: Mit einer doppelten for-Schleife werden an den Positionen (x, y) Punkte gezeichnet. Wenn beide Koordinaten positiv oder wenn beide Koordinaten negativ sind, werden rote Punkte gezeichnet.

#Tu5b.py

from gturtle import *

makeTurtle()
  
hideTurtle()
for x in range(-200, 200, 20):
    for y in range (-200, 200, 20):
       setPos(x, y)
       if (x > 0 and y > 0) or (x < 0 and y < 0):
            setPenColor("red")
       else:
            setPenColor("green")     
       dot(15) 
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)
 

Erklärungen zum Programmcode:

if x > 0 and y > 0: die Bedingung stimmt, wenn die beiden Koordinaten grösser als null sind
if (x > 0 and y > 0) or (x < 0 and y < 0): falls mehrere Verknüpfungen werdendet werden, müssen die Klammern richtig gesetzt werden

 

  Mehrfache Auswahl

Es können auch mehrere Bedingungen nacheinander überprüft werden. Falls die Bedingung bei if nicht erfüllt ist, wird die Bedingung bei elif überprüft. elif ist eine Abkürzung von else if. Dann werden die Bedingung nach den weiteren elif überprüft. Falls keine dieser Bedingungen stimmt, werden die Anweisungen nach else ausgeführt.

Beispiel 4: Die Turtle zeichnet in einer Wiederholstruktur Dreiecke in mehreren Farben.

# Tu5c.py

from gturtle import *

makeTurtle()
fillToPoint(0, 0)   
for k in range(6):
    if k == 0:
        setPenColor("red")
    elif k == 1:
        setPenColor("yellow")
    elif k == 2:
        setPenColor("blue")
    elif k == 3:
        setPenColor("green")
    else:
        setPenColor("black")
        
    for i in range(3):
        forward(100)
        right(120)
    right(60)
 
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)
 

Erklärungen zum Programmcode:

Mit dem Befehl fillToPoint(0, 0) werden die nachfolgend gezeichneten Dreiecke gefüllt. Die Füllfarbe entspricht hier der Stiftfarbe.

 

  Mit if - Struktur Fehler "abfangen"

Die if-Struktur wird oft verwendet, um Fehler abzufangen und dadurch unplamässiges Verhalten der Programme zu vermeiden.

Beispiel 5: Prorammabsturz verhindern
Im Kapitel Farben wurde im Beispiel 3 eine Farbauswahl box verwendet. Dabei wird mit dem Befehl askColor() eine Dialogbox gestartet, die eine Farbewahl mit Mausklick ermöglicht. Da im Beispiel mehrere Farbfiguren gezeichnet werden, wird diese Dialogbox mehrmals geöffnet, jeweils vor dem Zeichnen einer nächsten Figur. Die gewählte Farbe wird anschlissend als color gespeichert.

 

Falls man aber keine Farbe gewählt hat und auf Abbrechen klickt, erscheint im Beispiel 3 im vorhergehenden Kapitel eine Fehlermeldung und das Programm stürzt ab. Dieser Programmabstürz kann mit einer if-Struktur verhindert werden. Wenn keine Farbe ausgewähle wurde, wird das Programm mit break beendet.


# Tu5d.py

from gturtle import *

makeTurtle()

hideTurtle()
clear("black")
for x in range(-250, 250, 70):
    setPos(x, x)
    color = askColor("Farbauswahl", "yellow")
    if color == None:
        break
    setPenColor(color)
    dot(70)
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)
 

Erklärungen zum Programmcode:

askColor() : startet die Farbauswahlbox
if color == None: es wurde keine Farbe gewählt
break : da Programm wird beendet, das Turtlefenster wird aber weiter angezeigt
           Anstelle break könnten in dieser Zeile auch z. B. color = "black" stehen,
           dann kan die nächste Programmzeile ausgeführt werden

 


Aufgaben: Serie 5

  Verwende if-else-Struktur, um folgende Figuren zu zeichnen

1)
2)
3)

4)
5)
6)