TigerJython4Kids
HomeTurtlegrafikRobotikDatenbanken
if-else

9. IF-ELSE

 

 

DU LERNST HIER...

 

wie man vorgehen muss, damit Programmblöcke nur unter gewissen Bedingungen ausgeführt werden. Du lernst auch, wie man Bedingungen negiert  und wie man sie mit Und-, sowie Oder-Operatoren kombiniert.

 

 

MUSTERBEISPIEL

 

In deinem Programm lässt du die Turtle mit dem Befehl setRandomPos(400, 400) an einen zufälligen Ort innerhalb des Quadrats mit den Seitenlängen 400 und Zentrum in der Mitte des Turtlefensters springen. Dort zeichnest einen rotern Punkt, wenn siche die Turtel innerhalb des Kreises mit dem Radius 200 befindet, sonst einen grauen Punkt. Diesen Vorgang wiederhollst du 10 000 mal. Häufig wird dies auch als Zufallsregen bezeichnet.

Befindet sich die Turtle innerhalb des Kreises, so gilt nach dem Satz von Pythagoras, dass ihr Abstandsquadrat rsquare zum Ursprung kleiner als 200 * 200 = 40000 ist.

Umgangssprachlich würdest du sagen:

"Falls das Radiusquadrat kleiner als 40000 ist, zeichne einen roten Punkt, sonst zeichne einen grauen Punkt."

Dies drückst du mit dem Keyword if bedingung: aus und  rückst den nachfolgenden Programmblock ein. Dabei darfst du den Doppelpunkt nicht vergessen! Falls die Bedingung nicht erfüllt ist, wird der Programmblock ausgeführt, der unter der Zeile mit else: (wieder mit Doppelpunkt) steht.

 


from gturtle import *

makeTurtle()
hideTurtle()
openDot(400)

repeat 10000:
    setRandomPos(400, 400)
    rsquare = getX() * getX() + getY() * getY()
    if rsquare < 40000:
       setPenColor("red")
       dot(4)
    else:
       setPenColor("gray")
       dot(3)
► In Zwischenablage kopieren

 

 

MERKE DIR...

 

Statt zu sagen, dass eine Bedingung erfüllt oder nicht erfüllt ist, sagt man auch, die Bedingung sei wahr oder falsch. Sollen die grauen Punkte nicht gezeichnet werden, kannst du den else-Teil auch weglassen. Versuche es!

 

 

 

BEDINGUNGEN MIT UND VERKNÜPFEN

 

Wie auch in der Umgangssprache üblich, kannst du zwei Bedingungen mit und (and) verknüpfen. Die so kombinierte Bedingung ist nur dann wahr, wenn beide Teilbedingungen wahr sind. Hier zeichnest du dann rote Punkte, wenn die x-Koordinate der Turtle grösser als -50 und kleiner als 50 ist. Es entsteht offenbar ein vertikaler roter Streifen.

 


from gturtle import *

makeTurtle()
hideTurtle()

repeat 10000:
    setRandomPos(400, 400)
    x = getX()
    y = getY()
    if x > -50 and x < 50:
       setPenColor("red")
       dot(4)
    else:
       setPenColor("gray")
       dot(3)
► In Zwischenablage kopieren

 

 

 

BEDINGUNGEN MIT ODER VERKNÜPFEN

 

Ein horizontaler roter Streifen genügt der Bedingung y > -50 and y < 50. Punkte, die entweder im vertikalen oder horizontalen oder in beiden Gebieten liegen, erfüllen beide Bedingungen. Umgangssprachlich sagst du, dass sie im vertikalen oder (auch) horizontalen Streifen liegen. Du verknüpfst die beiden Bedingungen mit oder (or).

 


from gturtle import *

makeTurtle()
hideTurtle()

repeat 10000:
    setRandomPos(400, 400)
    x = getX()
    y = getY()
    if (x > -50 and x < 50) or (y > -50 and y < 50):
       setPenColor("red")
       dot(4)
    else:
       setPenColor("gray")
       dot(3)
► In Zwischenablage kopieren

 

 

 

EINE BEDINGUNG NEGIEREN

 

Mit dem Keyword not kannst du eine Bedingung negieren, das heisst, ihren Wahrheitswert umkehren. Punkte, die nicht im vertikalen Streifen liegen, genügen der Bedingung not (x > -50 and x < 50), wie das folgende Programm zeigt:

 


from gturtle import *

makeTurtle()
hideTurtle()

repeat 10000:
    setRandomPos(400, 400)
    x = getX()
    y = getY()
    if not (x > -50 and x < 50):
       setPenColor("red")
       dot(4)
    else:
       setPenColor("gray")
       dot(3)
► In Zwischenablage kopieren

 

 

MERKE DIR...

 

Die korrekte Klammerung bei Bedingungen ist sehr wichtig. Da not stärker bindet als and und or, musst du hier eine Klammer setzen. Am schwächsten bindet or.

Den grauen Streifen erhältst du logischerweise auch, wenn du verlangst, dass x <= -50 oder x >= 50 ist. Man kann also Bedingungen verschieden formulieren. Versuche es!

Für Zahlen gibt es folgende Vergleichsoperatoren:

  <   kleiner
  <=   kleiner oder gleich
  ==   gleich
  >=   grösser oder gleich
  >   grösser
  !=   verschieden

Du musst dich insbesondere an die Verdoppelung des Gleichheitszeichens bei der Gleichheitsbedingung gewöhnen. Diese ist nötig, damit der Computer zwischen der Zuweisung und der Gleichheitsbedingung unterscheiden kann.

 

 

 

MEHRFACH-AUSWAHL

 

Um mehr als zwei Fälle zu unterscheiden, musst du im else-Teil wieder eine if-Bedingung einfügen. In Python kann man kürzer elif verwenden und schreibt:

 
if bed1:
    ... 
elif bed2:
    ...
else:
    ...

Du siehst dies an folgendem Musterbeispiel, bei dem der Benutzer eines von 3 Spritebildern auswählen kann. Zudem werden illegale Eingaben mit einer Fehlermeldung "abgefangen".

 


from gturtle import *

n = inputInt("Welches Auto (1, 2, 3)")
if n == 1:
    makeTurtle("sprites/car0.png")
elif n == 2:
    makeTurtle("sprites/car1.png")
elif n == 3:
    makeTurtle("sprites/car2.png")
else:
    msgDlg("Illegale Eingabe") 

if n > 0 and n < 4:
    rightCircle(100)
► In Zwischenablage kopieren

 

 

ZUM SELBST LÖSEN

 
1.

Verwende gleich wie in den ersten Musterbeispielen den Befehl setRandomPost(400, 400), um Punkte an zufälligen Positionen zu zeichnen. Definiere mit Hilfe der if-else-Struktur die Bedingungen für x und y, damit die Punkte die richtige Farbe, gemäss den unten stehenden Skizzen, erhalten.

a)

b)

c*)

2.

Du hast gelernt, dass man mit folgendem Programm eine Spirale zeichnen kann.

from gturtle import *
makeTurtle()
hideTurtle()

s = 10
repeat 200:
    forward(s)
    right(90)
    s = s + 1

a)


Verwende die if-else-Struktur, um eine zweifarbige Spirale zu zeichnen.

 

b)

In der nebenstehenden Figur wird in der Spirale die erste Strecke grün, die zweite rot, die dritte grün usw. Alle ungeraden Strecken sind grün und die geraden sind rot. Die Modulo-Operation a%b liefert den Rest der ganzahligen Division a durch b, beispielsweise liefert 8%3 den Rest 2. Damit kannst du herausfinden, ob die natürliche Zahl s gerade oder ungerade ist: s%2 liefert nämlich 0, falls s gerade ist. Zeichne die nebenstehende Figur.

 

3.

Oft möchtest du dem Benutzer die Möglichkeit geben, eine Farbe selbst auszuwählen. Elegant  geht dies mit dem Farbwahl-Dialog askColor(title, farbe), wo title der Text in der Titelzeile und farbe eine Farbvorwahl ist. Klickt der Benutzer den OK-Button, so wird die gewählte Farbe zurückgegeben. Drückt er den Abbrechen- oder den Close-Button der Titelzeile, so hat der Rückgabewert den speziellen Wert None.

Mit dem folgenden Programm-Gerüst siehst du, wie man grundsätzlich ein Programm mit einem solchen Eingabedialog konzipiert.  Wie du siehst, wird in einer endlosen repeat-Schleife der Rückgabewert auf None getestet und die Schleife mit dem speziellen Keyword break verlassen. Mit dispose() wird zudem das Turtlefenster geschlossen.

from gturtle import *

makeTurtle()

repeat:
    color = askColor("Farbauswahl", "yellow")
    if color == None:
        break
    # hier color verwenden
dispose()    

Ersetze die Kommentarzeile mit dem # durch eigenen Code, der beispielsweise einen farbig gefüllten Stern zeichnet.

 

   

 

9-1
Didaktische Hinweise:

In diesem Kapitel  ergeben sich natürliche Bezüge zur Logik in der Alltagssprache, zur  Aussagenlogik und Mengenlehre, zur Booleschen Algebra und sogar zu Logikschaltungen. Wie weit diese ausgebaut werden, ist von der Schulstufe und den Vorkenntnissen, aber auch den Vorlieben der Lehrperson abhängig.

9-2
Didaktische Hinweise:

Man beachte, dass im täglichen Leben entweder-oder und oder-auch nicht konsequent verwendet werden. In der Informatik bewirkt der or-Operator immer ein oder-auch.