Zufall 🎲
Beim Programmieren (und bei Algorithmen) haben wir die Dinge meistens gern deterministisch: Wir möchten, dass die gleiche Eingabe jedes Mal zum gleichen Ergebnis führt.
Manchmal kann es aber auch nützlich oder interessant sein, wenn wir gewisse Elemente vom Zufall abhängig machen. Dazu können wir in Python Zufallszahlen verwenden.
Schauen wir uns beispielsweise folgendes Turtle-Programm an:
from turtle import *
shape('turtle')
radius = 50
circle(radius)
Wir können dieses Programm interessanter machen, indem wir den Wert der Variable radius
nicht einfach fix auf 50
festlegen, sondern durch eine Zufallszahl ersetzen. Dazu können wir folgenden Befehl verwenden:
randint(min, max)
Hier ersetzen wir min
mit der niedrigsten und max
mit der höchsten gewünschten Zahl. So generiert folgender Befehl beispielsweise eine zufällige Ganzzahl1 zwischen 1 und 6 (wie ein Würfel):
randint(1, 6)
Und damit der Wert nicht einfach geniert und gleich wieder vergessen wird, müssen wir ihn in einer Variable speichern. Wir schreiben also beispielsweise:
meine_zufallszahl = randint(1, 6)
Aber damit wir diesen Befehl verwenden können, müssen wir zuerst das Modul random
importieren – genau so, wie wir für Turtle-Programme immer das Modul turtle
importieren müssen. Wir schreiben dazu:
from random import *
Bisher haben wir Python nur in Zusammenhang mit der Turtle verwendet. Man kann mit Python aber natürlich auch ganz andere Dinge machen, die nichts mit zeichnenden Schildkröten zu tun haben! Das werden Sie bald selbst sehen.
Der Befehl randint(min, max)
gehört nicht zum Modul turtle
, sondern eben zum Modul random
. Er hat also eigentlich nichts mit der Turtle zu tun und kann somit auch dann verwendet werden, wenn wir mal nicht mehr mit der Turtle arbeiten.
Unser ursprüngliches Turtle-Programm können wir nun wie folgt anpassen:
from turtle import *
from random import *
shape('turtle')
radius = randint(20, 100)
circle(radius)
Jedes Mal, wenn wir dieses Programm ausführen, wird auf Zeile 6 eine neue Zufallszahl generiert. Das Programm zeichnet also einen Kreis mit einem zufällig gewählten Radius von mindestens 20 und höchstens 100 Pixel. Das Ergebnis sieht demnach jedes Mal ein Bisschen anders aus.
Aufgaben
Zeichnen Sie mit der Turtle ein Quadrat, dessen Seitenlänge jedes Mal zufällige festgelegt wird. Die Seitenlänge soll immer mindestens 15 Pixel und höchstens 200 Pixel betragen.
Entwickeln Sie ein Programm, das ein n-Eck mit einer zufälligen Anzahl Ecken zeichnet. Es soll mindestens 3 und höchstens 20 Ecken haben. Die Seitenlänge soll fix 50 Pixel betragen. Einmal zeichnet Ihr Programm also z.B. ein Fünfeck, dann einmal ein Dreieck, einmal ein 13-Eck, und so weiter...
So etwas Ähnliches haben Sie bereits gemacht: Bei einer früheren Aufgabe mussten Sie mal ein beliebiges n-Eck zeichnen 😉.
Schreiben Sie ein Turtle-Programm, das einen solchen zufällig generierten "Sternenhimmel" zeichnet.
Das heisst:
- schwarzer Hintergrund
- gelbe Punkte
- zufällige Anzahl Punkte, zwischen 30 und 100 Stück
- zufällige Grösse für jeden Punkt (also zufälliger Wert für
d
im Befehldot(d)
), jeweils zwischen 5 und 15 Pixel - zufällige Position der Punkte im Turtle-Fenster
- Nutzen Sie den Befehl
goto(x, y)
um die Turtle an einen bestimmten Punkt im Turtle-Fenster zu bewegen. - Wählen Sie für die - und -Position jeweils Werte zwischen und .
- Beim Befehl
randint(min, max)
sind auch negative Zahlen erlaubt. - Mit dem Befehl
speed(9)
oderspeed(0)
können Sie das Zeichnen beschleunigen.
Gehen Sie nochmal durch die bisherigen Programmieraufgaben durch und suchen Sie sich mindestens eine Turtle-Zeichnung aus, die Sie mithilfe von Zufallszahlen interessanter machen könnten.
Alternativ können Sie kreativ werden und sich ein eigenes zufällig generiertes Kunstwerk ausenken.
Für diese Aufgabe müssen wir ein Wenig vorgreifen: Wir können mehrere Werte zu einer sogenannten Liste zusammenfassen. In diesem Beispiel enthält die Variable farben
eine Liste von sechs "Farben" (sechs Werte von Datentyp str
). Die Variable selbst hat in dem Fall den Datentyp list
(den Sie bisher noch nicht kennen):
farben = ['red', 'green', 'blue', 'cyan', 'magenta', 'yellow']
Wichtig sind dabei die eckigen Klammern ([...]
) und die Kommata zwischen den Werten.
Mit dem Befehl choice(liste)
(der ebenfalls im Modul random
enthalten ist) können Sie nun ein zufälliges Element aus einer Liste auswählen.
Das folgende Programm zeichnet also ein Quadrat in einer zufälligen Farbe:
from turtle import *
from random import *
farben = ['red', 'green', 'blue', 'cyan', 'magenta', 'yellow']
zufaellige_farbe = choice(farben)
pencolor(zufaellige_farbe)
for i in range(4):
forward(100)
right(90)
Zeichnen Sie mit diesem Wissen nun die unten stehende Figur, die Sie in einer früheren Aufgabe schon einmal gezeichnet haben. Sorgen Sie diesmal aber dafür, dass für jeden Punkt eine zufällige Farbe gewählt wird. Verwenden Sie dazu eine for
-Schleife.
Es lässt sich dabei (vorerst) nicht vermeiden, dass ab und zu die gleiche Farbe mehrfach vorkommt.

Oben im Aufgabe 2 haben Sie ein n-Eck mit einer zufälligen Anzahl Seiten gezeichnet. Kopieren Sie nun dieses Programm zuerst mal unten hin.
Passen Sie es dann so an, dass alles dem Zufall überlassen wird: also die Anzahl Seiten, die Seitenlänge und die Farbe für jede einzelne Seite.
Jetzt haben Sie sich nochmal ein neues Werkzeug erarbeitet: Sie können zufällige Farben verwenden.
Werden Sie jetzt wieder kreativ: Gehen Sie durch die bisherigen Übungen und suchen Sie sich mindestens eine Aufgabe aus, die Sie mithilfe von zufällige gewählten Farben interessanter gestalten könnten.
Alternativ können Sie sich auch hier stattdessen ein eigenes Kunstwerk ausdenken.
Footnotes
-
Dieser Befehl generiert einen Wert von Datentyp
int
(Ganzzahl). Deshalb heisst errandint(min, max)
– für random integer: zufällige Ganzzahl. ↩