Bedingte Schleifen sind ein Weg etwas zu wiederholen, solange eine bestimmte Bedingung erfüllt, oder True, ist. Falls die Bedingung immer erfüllt ist (also nie False wird), läuft die Schleife endlos weiter. Falls die Bedingung schon anfänglich falsch ist, wird der Code in der Schleife niemals ausgeführt! In Python werden bedingte Schleifen mit der while
-Anweisung definiert:
word = ''
sentence = ''
print('Please enter some words.')
print('Include a period (.) when you are finished.')
while '.' not in word:
word = input('next word: ')
sentence = word + ' ' + sentence
print()
print('Aha! You said:')
print(sentence)
Wir nennen diesen Teil des Quelltextes die ‘Bedingung’: '.' not in word
Ob die Bedingung wahr (True) zurückgibt oder nicht entscheidet, ob der Quelltext innerhalb der while
-Schleife ausgeführt wird.
Lies den obigen Quellcode und schau, ob du im Kopf herleiten kannst, was er tut (und was die endgültige Ausgabe sein wird).
Dann kopier ihn in eine Datei, sagen wir satz.py
, und führe ihn aus – schau genau, was er tut. Trifft das, was du dir gedacht hast, zu?
Bemerkung
Falls du Python 2 benutzt, wirst du input``mit ``raw_input
ersetzen müssen, um das Programm korrekt auszuführen.
The turtle has been up to its usual tricks again, robbing liquor stores and building up huge gambling debts. It’s time for turtle to be put into a cell that it can’t get out of.
Lass uns eine neue Version von forward()
bauen. Eine, die die Schildkröte herumdreht, falls sie versucht, sich weiter als 100 von ihrem Ursprung zu entfernen. Wir brauchen eine while
-Schleife und einige neue turtle-Funktionen:
turtle.distance(0, 0)
- Entfernung der Schildkröte vom Ursprung
turtle.towards(0, 0)
- Der Winkel, der zurück zum Ursprungspunkt führt
turtle.setheading(Winkel)
- Lege die Ausrichtung der Schildkröte direkt fest
Du kannst, wenn du magst, versuchen, mit der turtle in einem Interpreter herumzuspielen und die Funktionen zu benutzen, um genau zu sehen, was sie tut.
Jetzt wirst du die Gefängnislogik implementieren müssen, indem du die turtle-Funktionen, vielleicht eine while
-Schleife und ein bisschen bedingte Logik, verwendest. Es ist ein bisschen haarig, aber bleib dran! Scheue nicht davor zurück, deine Idee mit einem Coach oder einem anderen Lernenden durchzusprechen.
def forward(distance):
while distance > 0:
if turtle.distance(0,0) > 100:
angle = turtle.towards(0,0)
turtle.setheading(angle)
turtle.forward(1)
distance = distance - 1
Schleifen können mit der break
-Anweisung unterbrochen werden. Das ist besonders nützlich, wenn du eine Endlosschleife schreibst, welches eine Schleife ist, deren Bedingung immer wahr (True) ist.
Schreibe eine while
-Schleife mit einer Bedingung, die immer wahr (True) ist, um eine Spirale zu malen. Unterbrich die Schleife, wenn die turtle eine gewisse Distanz zum Mittelpunkt erreicht hat. Benutze die Funktion turtle.distance(x, y)
, um die Entfernung der Schildkröte zu dem durch die x
- und y
-Koordinaten bestimmten Punkt zu errechnen.
Um das zu tun, brauchst Du die Funktionen turtle.xcor()
und turtle.ycor()
, welche die Position der Schildkröte auf der X- und Y-Achse zurückgeben.
Bemerkung
Um eine Spirale zu zeichnen, muss die Schildkröte um einen konstanten Winkel gedreht werden und dabei um eine anwachsende Strecke vorwärts bewegt werden.
def draw_spiral(radius):
original_xcor = turtle.xcor()
original_ycor = turtle.ycor()
speed = 1
while True:
turtle.forward(speed)
turtle.left(10)
speed += 0.1
if turtle.distance(original_xcor, original_ycor) > radius:
break
Kannst du eine Bedingung für die Schleife formulieren, so dass du du keine Endlosschleife while True
oder die break
-Anweisung benötigst? Welche Version findest du einfacher zu verstehen?