Logische Operatoren

Einführung

Verzweigungen sind ein guter Weg um im Programm Entscheidungen zu treffen, indem geprüft wird ob etwas True ist oder nicht. Aber häufig reicht eine Bedingung allein nicht aus. Vielleicht möchtest Du auch das Gegenteil Deines Ergebnisses prüfen. Oder falls Du eine Entscheidung aufgrund von turtle.xcor() und turtle.ycor() treffen möchtest, musst Du beide verknüpfen. Das kannst Du mit logischen Operatoren erreichen.

Verneinung eines Ausdrucks

Wenn wir möchten, dass etwas False ist, können wir den logischen Operator not verwenden:

x = False
if not x :
    print("condition met")
else:
    print("condition not met")

Übung

Die Schildkröte enthält eine nützliche Funktion die sagt ob grade gezeichnet wird oder nicht; turtle.isdown(). Diese Funktion liefert True falls die Schildkröte im Zeichenmodus ist. Wie wir bereits gesehen haben, schalten die Funktionen turtle.penup() und turtle.pendown() zwischen dem Modus zum Zeichnen beim Bewegen und dem Bewegungsmodus ohne Zeichnen hin und her.

Können wir eine Funktion schreiben die nur vorwärts geht falls die Schildkröte nicht im Zeichenmodus ist?

Lösung

def stealthed_forward(distance):
    if not turtle.isdown():
        turtle.forward(distance)

Dies und jenes oder etwas anderes

Zwei einfach zu verstehende Operatoren sind and und or. Sie tun genau das wonach sie sich anhören::

if 1 < 2 and 4 > 2:
    print("condition met")

if 1 > 2 and 4 < 10:
    print("condition not met")

if 4 < 10 or 1 < 2:
    print("condition met")

Du bist nicht darauf angewiesen nur einen logischen Operator zu verwenden. Du kannst so viele miteinander kombinieren wie Du möchtest.

Übung

Weiter oben haben wir die Schildkröte in einem kreisförmigen Gefängnis eingesperrt. Diesmal werden wir ein Quadrat dazu verwenden. Falls die Schildkröte sich mehr als 100 Einheiten entlang der x- oder y-Achse vom Mittelpunkt entfernt, drehen wir sie zurück zur Mitte um.

Lösung

def forward(distance):
    while distance > 0:
        if (turtle.xcor() > 100
            or turtle.xcor() < -100
            or turtle.ycor() > 100
            or turtle.ycor() < -100):
            turtle.setheading(turtle.towards(0,0))
        turtle.forward(1)
        distance = distance - 1