deutsch     english     français     Drucken

 

2.7 SELEKTION

 

 

EINFÜHRUNG

 

Was du im täglichen Leben unternimmst, hängt oft von gewissen Bedingungen ab. So entscheidest du dich je nach Wetter, wie du in die Schule fährst. Du sagst: "Falls es regnet, fahre ich mit dem Tram, sonst mit dem Fahrrad". Auch der Ablauf eines Programms kann von Bedingungen abhängig sein. Solche 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.

PROGRAMMIERKONZEPTE: Bedingung, Programmverzweigung, Selektion, If-Else-Struktur

 

 

EINGABE ÜBERPRÜFEN

 

Nach der Eingabe der Seitenlänge in einer Dialogbox soll das Quadrat nur dann gezeichnet werden, wenn es im Fenster vollständig Platz hat.

Dazu prüfen wir den Wert von s. Wenn s kleiner als 300 ist, wird ein Quadrat mit der Seitenlänge s gezeichnet, sonst erscheint im unteren Teil des Tigerjython-Fensters eine Meldung.  Diese Prüfung erfolgt in der Programmiersprache mit der if-Anweisung



 
from gturtle import *

def square(sidelength):    
    repeat 4: 
        forward(sidelength) 
        right(90)
      
makeTurtle()
s = inputInt("Enter the side length")
if s < 300:
    square(s)    
else:  
    print "The side length is too big"
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

 

 

MEMO

 

Die Anweisungen nach if werden nur dann ausgeführt, wenn die Bedingung wahr ist, sonst werden die Anweisungen nach else ausgeführt. Manchmal kommt es vor, das nur etwas gemacht wird, wenn die Bedingung erfüllt ist; sonst aber nichts passiert. Für diese Fälle kannst du den else-Block weglassen.

Achte auf die Doppelpunkte nach der if-Bedingung und nach else, sowie auf die korrekte Einrückung der beiden Programmblöcke.

 

 

MEHRFACHE AUSWAHL

 

Wir wollen farbige Quadrate zeichnen. In einer Dialogbox kannst du die gewünschte Farbe mit einer Zahl eingegeben. In einer if-Struktur wird diese Zahl überprüft und die entsprechende Füllfarbe gesetzt. Wir testen zuerst auf den Wert 1, dann mit elif auf 2 und dann auf 3. Falls eine andere Zahl eingegeben wird, setzen wir mit else die Farbe auf schwarz.

Mit dem Befehl fill(10, 10) wird die geschlossene Fläche um den gegebene Punkt mit der Füllfarbe gefüllt. Da sich die Turtle nach dem Zeichnen des Quadrats wieder in der Fenstermitte (0, 0) befindet, wählen wir mit (10, 10) einen Punkt, der sicher im Inneren des Quadrats liegt.


 
from gturtle import *

def square():    
    repeat 4: 
        forward(100) 
        right(90)
      
makeTurtle()
n = inputInt("Enter a number: 1:red 2:green 3:yellow")
if n == 1:
    setFillColor("red")
elif n == 2: 
    setFillColor("green") 
elif n == 3:
    setFillColor("yellow") 
else:
    setFillColor("black")        
    
square()
fill(10, 10)
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

 

 

MEMO

 

Es können 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. Falls keine der elif-Bedingungen erfüllt ist werden die Anweisungen nach else ausgeführt.

Es fällt dir sicher auf, dass das Prüfen auf Gleichheit in Python mit einem doppelten Gleichheitszeichen erfolgt. Dies ist etwas gewöhnungsbedürftig, aber nötig, da das einfache Gleichheitszeichen für Zuweisungen verwendet wird.

Beachte die Notation für Vergleichsoperatoren: >, >= , < , <= , == , != .

Mit dem Befehl fill(x, y) können geschlossene Figuren mit der Füllfarbe gefüllt werden. Der Punkt (x, y) muss sich aber im Inneren der Figur befinden.

 

 

FARBAUSWAHL, BOOLESCHE VARIABLEN

 

Das nachträgliche Füllen mit fill() setzt voraus, dass das Innere der Figur nicht bereits mit einer anderen Figur belegt ist. Du kennst von früher die startPath()/fillPath()-Kombination, mit der du auch neue Figuren, die über schon vorhandenen Figuren liegen, korrekt füllen kannst. Du verwendest im Programm durch Aufruf von askColor() ein elegantes Dialogfeld, mit welchem du die Farbe des Sterns auswählst.

 

Den Stern zeichnest du mit der Funktion star(), die neben der Grösse des Sterns auch einen Parameter hat, dessen Wert True oder False sein kann, und der bestimmt, ob der Stern gefüllt werden soll oder nicht.

from gturtle import *

makeTurtle()

def star(size, filled):
    if filled:
        startPath()
    repeat 9:
        forward(size)
        left(175)
        forward(size)
        left(225)
    if filled:
        fillPath()

clear("black")
repeat 5:
    color = askColor("Color selection", "yellow")
    if color == None:
        break
    setPenColor(color) 
    setFillColor(color)
    setRandomPos(400, 400)
    back(100)
    star(100, True)
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

 

 

MEMO

 

Die Funktion askColor() hat einen Parameter für den Text in der Titelzeile und für die Farbe, die als Standardwert ausgewählt ist. Die Funktion gibt beim Klicken des OK-Buttons die ausgewählte Farbe und beim Klicken des Abbrechen-Buttons den speziellen Wert None zurück. Du kannst mit einer if-Anweisung auf diesen Wert testen und die repeat-Schleife mit break abbrechen.

Eine Variable oder einen Parameter, der die Werte True oder False annehmen kann, nennt man eine boolesche Variable bzw. einen booleschen Parameter [mehr... Der Name stammt vom Mathematiker George Boole, der den Logikkalkül erfunden hat]. Du kannst direkt mit if filled: auf den Wert testen, es ist also nicht nötig (und wenig elegant) if filled == True: zu schreiben.

 

 

AUFGABEN

 

1.

In einer Dialogbox fragst du den Benutzer, wie gross die Seitenlänge eines Quadrats sein soll. Falls sie kleiner ist als 50, wird ein rotes Quadrat mit dieser Seitenlänge gezeichnet, sonst ein grünes.

 


2.

Die Turtle soll mir repeat 10 eine Treppe mit 10 Stufen zeichnen, wobei die ersten 5 Stufen blau und die restlichen rot sind (Abbildung a).


(a)
(b)


Die Turtle soll eine Spirale zeichnen und dabei zuerst die grüne, dann die roten und am Schluss die schwarze Farbe verwenden (Abbildung b).