232
Der Zufall und bedingte Schleifen
Kapitel
9
Diese
for
-Schleife mit 20 Aufrufen des Zufallsgenerators
randint(1,6)
liefert gerade die Ergebnisse von 20 Mal würfeln. Kann durchaus sein, dass
20 Mal keine 1 dabei ist. Oder auch keine 6.
Die Funktion
randint(a, b)
aus dem Modul
random
liefert eine ganze
Zufallszahl aus dem Bereich
a..b
. (Die Randwerte
a
und
b
gehören zum
Bereich dazu.)
Wenn wir Zufallszahlen im Bereich 1 bis 100 erzeugen wollen, müssen wir
also
random.randint(1,100)
aufrufen. Ebenso lassen sich Bereiche
nutzen, die negative Zahlen enthalten:
>>> for i in range(20):
print(random.randint(-10,10), end=
" ")
-10 9 9 3 -2 0 -6 -9 -1 0 8 -9 5 8 9 -7 -8 -5 5 -9
To r k e l n
Die Idee ist ziemlich einfach: jedes Mal, bevor die Turtle ein Stück vorwärts
geht, wählt sie zufällig die Richtungsänderung vor diesem Schritt aus ei-
nem gegebenen Bereich aus.
>
Mach mit!
>>> from turtle import *
>>> reset(); pensize(3)
>>> winkel = random.randint(-30,30)
>>> left(winkel); forward(15)
>>> winkel = random.randint(-30,30)
>>> left(winkel); forward(15)
>>> winkel = random.randint(-30,30)
… und noch ein paar Mal. Tatsächlich: die Turtle torkelt!
>
Wenn du Lust hast, kannst du nun noch mit anderen Winkelbereichen
und Schrittgrößen experimentieren.
Wir wollen jetzt ein erstes Programm schreiben, das unsere Turtle auf sol-
chen Zufallswegen wandern lässt. Für derartige Spaziergänge gibt es im
Englischen einen Spezialausdruck, den wir hier verwenden wollen: »random
walk«. Im Deutschen sagt man auch »Irrfahrten«.
233
To r k e l n
>
Öffne ein neues Editor-Fenster, schreibe einen Kopfkommentar für das
Skript
randomwalk_arbeit.py
und speichere die Datei im Ordner
c:\py4kids\kap09
ab.
Wir beginnen ganz einfach. Wir schreiben eine Funktion
zufalls
schritt()
und eine Schleife, die die Turtle einige solche Zufallsschritte
machen lässt. Das Ganze ergänzen wir mit etwas Code für die Herstellung
der richtigen Anfangssituation.
from turtle import *
import random
def zufallsschritt():
winkel = random.randint(-30,30)
left(winkel)
forward(15)
setup(400,400)
penup()
home()
pendown()
pensize(3)
startwinkel = random.randint(0,359)
right(startwinkel)
for n in range(10):
zufallsschritt()
Wenn wir dieses Programm mehrere Male ausführen,
wird die Turtle mehrere Zufallswege ins Grafik-Fenster
zeichnen. Damit diese nicht alle in die gleiche Richtung
starten, wird auch die Startrichtung zufällig ausgewählt.
Jeder Schritt der torkelnden Turtle beginnt mit einer
Drehung um einen zufälligen »Torkelwinkel« im Bereich
von -30° bis 30°. Nach neun Programmläufen sah das
bei mir einmal so aus:
>
Speichere eine Kopie dieses Programms als
randomwalk01.py
.
Du wirst dir sicherlich denken, dass dieses Programm
noch sehr verbesserungsfähig ist. Richtig! Arbeiten wir
ein, was wir bisher schon alles gelernt haben.
234
Der Zufall und bedingte Schleifen
Kapitel
9
>
Bei
zufallsschritt()
spielen der maximale Torkelwinkel (hier:
30
)
und die Schrittgröße (hier:
15
) eine Rolle. Baue diese beiden Größen
als Parameter der Funktion ein. Dann hast du eine viel flexiblere
Funktion
zufallsschritt()
.
Wie du gesehen hast, ist es interessant, mehrere solcher Zufallswege zu
zeichnen. Erstelle daher eine Funktion
zufallsweg()
, die die Turtle einen
solchen Zufallsweg – das sind mehrere Zufallsschritte – zurücklegen lässt.
Als Parameter drängt sich die Anzahl der Zufallsschritte auf, und Torkel-
winkel und Schrittgröße werden sicher auch gebraucht, da ja im Funktions-
körper von
zufallsweg()
die Funktion
zufallsschritt()
aufgerufen
wird.
>
Schreibe entsprechend dieser Beschreibung die Funktion
zufallsweg()
.
>
Die übrigen Anweisungen gehören zum Teil in die Funktion
zufallsweg()
und zum Teil in den Anweisungsblock einer
if __name__ == '__main__':-
Anweisung. Schreibe das »Haupt-
programm« so, dass die Turtle zehn Zufallswege mit je zehn Zufalls-
schritten erzeugt.
>
Teste dein Programm, und wenn es fertig gestellt ist, speichere eine
Kopie davon als
randomwalk02.py
ab.
Bei der Ausführung der obigen Schritte hast du einiges an Freiheiten, wie
z.
B. die Wahl der Variablennamen, in gewissen Grenzen die Reihenfolge der
Anweisungen usw. Es folgt hier eine mögliche Lösung, als Hilfestellung und
zum Vergleich. Deine wird naturgemäß davon abweichen, doch sie sollte
etwa die gleiche Grafik erzeugen. (Du findest meine Lösung, wie immer,
auch auf der Buch-CD).
from turtle import *
import random
def zufallsschritt(laenge, maxwinkel):
winkel = random.randint(-maxwinkel,maxwinkel)
left(winkel)
forward(laenge)
def zufallsweg(schritt_anzahl, schrittlaenge, torkelwinkel):
pu(); home(); pd()
startwinkel = random.randint(0,359)

Get Python für Kids now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.