Spielerisch-chaotische Einführung in Python
Chaos-Spiel − der springende Punkt
(eventuell Würfel mitnehmen…)
Das Chaos-Spiel geht wie folgt:
Seien $A$, $B$, $C$ die Ecken eines gleichseitigen Dreiecks auf der Tafel.
Wähle zufällig einen weiteren Punkt $P$. Wir lassen diesen Punkt „springen“, indem wir die folgenden Anweisungen unendlich oft wiederholen:
- Wähle zufällig einen der Eckpunkte $A$, $B$, $C$, etwa mit Hilfe eines Würfels:
- $A$ falls der Würfel 1 oder 2 zeigt;
- $B$ falls er 3 oder 4 zeigt;
- $C$ falls er 5 oder 6 zeigt.
- Der „neue“ Punkt $P$ sei der Mittelpunkt zwischen dem „alten“ Punkt $P$ und dem erwürfelten Eckpunkt.
- Markiere diesen neuen Punkt $P$.
Aufgabe 1
Spiele das Chaos-Spiel auf einem Blatt Papier. Kannst Du erraten, welche geometrische Figur herauskommt?
Die Antwort wirst du sehen, sobald du das nachfolgende Python-Programm auf deinem Rechner zum Laufen gebracht hast.
Aufgabe 2: Python-Programm zum Chaos-Spiel verstehen
Lies das nachfolgende Python-Programm chaos-game.py
und versuche, es zu verstehen!
Testfragen:
- Wo wird der zufällige Punkt $P=(x,y)$ erzeugt?
- Im Programm wird mit einem “Würfel” mit drei Seiten gewürfelt. In welcher Zeile wird mit diesem Würfel gewürfelt?
- Wo “springt” der Punkt $P$?
- Kannst du erraten, was die Befehlszeile
for i in range(0, iterationen):
bewirkt? (englisch range = Bereich)
Wenn du diese oder zumindest einige dieser Fragen beantworten kannst (und dir somit grob klar ist, was das Programm macht): Bringe das Programm auf deinem Rechner zum Laufen, wie in der nächsten Aufgabe beschrieben.
Wer noch kein Python kann, wird beim ersten Lesen nichts oder nur wenig verstehen - der Sinn ist aber, dass ihr ähnlich wie beim äusserst effektiven frühkindlichen Erlernen der Muttersprache nun einer neuen Programmiersprache in einer nicht-trivialen Situation ausgesetzt werdet und durch Nachfragen und Erklärungen meinerseits mit der Zeit ein gewisses Verständnis entwickelt.
Python-Programm zum Chaos-Spiel
- chaos-game.py
import pygame from random import * breite = 500 hoehe = 433 # ungefähr sqrt(3)/2 * breite; sqrt = square root = Quadratwurzel iterationen = 10000 weiss = (255, 255, 255) # Ein Tupel aus drei Zahlen, kodiert die Farbe Weiss im RGB-Modell, das wir später kennenlernen werden. # Koordinaten des Punkts A xA = 0 yA = hoehe # Koordinaten des Punkts B xB = breite yB = hoehe # Koordinaten des Punkts C xC = int(breite / 2) # Der Befehl "int" macht eine Kommazahl (= reelle Zahl = real number) durch Abschneiden der Nachkommastellen zu einer ganzen Zahl (= integer). yC = 0 pygame.init() pygame.display.set_caption("Das Chaos-Spiel") leinwand = pygame.display.set_mode((breite + 1, hoehe + 1)) pygame.draw.line(leinwand, weiss, (xA, yA), (xB, yB)) pygame.draw.line(leinwand, weiss, (xB, yB), (xC, yC)) pygame.draw.line(leinwand, weiss, (xC, yC), (xA, yA)) pygame.display.update() x = randint(0, breite) y = randint(0, hoehe) for i in range(0, iterationen): zufall = randint(1, 3) if zufall == 1: x = x + 0.5 * (xA - x) y = y + 0.5 * (yA - y) if zufall == 2: x = x + 0.5 * (xB - x) y = y + 0.5 * (yB - y) if zufall == 3: x = x + 0.5 * (xC - x) y = y + 0.5 * (yC - y) leinwand.set_at((round(x),round(y)), weiss) # Zeichnet ein Pixel am Punkt (x,y) bzw. genauer an den gerundeten Koordinaten. pygame.display.update((round(x), round(y), 1, 1)) # denn das ist deutlich schneller als # pygame.display.update() pygame.time.delay(1) if i % 1000 == 0: # "Prozent-Division" liefert den Rest der Division. print(i) print("Fertig! Das Fenster wird in 5 Sekunden geschlossen.") # Ausgabe der Zeichenkette (= string) zwischen den Anführungszeichen. print(f"Insgesamt wurden {iterationen} Punkte gezeichnet.") # f-string = formatted string pygame.time.delay(5000) # Pause in Millisekunden pygame.quit()
Derselbe Python-Code sehr ausführlich kommentiert (eine Art Musterlösung zu Aufgabe 2)
Aufgabe 3: Python (inklusive pygame) installieren und das obige Programm zum Laufen bringen (zuerst in VS Code)
1. Installiere Python auf deinem Rechner. Am einfachsten geht dies über den Windows App Store.1) (Man kann die App “Python” starten und dann direkt in der “Python-Shell” Python-Befehle eingeben. Das brauchen wir aber heute nicht.)
2. Speichere das obige Python-Programm chaos-game.py
in deinem Verzeichnis C:\Users\Vorname.Nachname\informatik\python
(durch Anklicken des Programm-Namens mit der RECHTEN Maustaste, Save as
/Speichern unter
).
3. Öffne das Programm chaos-game.py
mit VS-Code (etwa über das Menü per File
→Open File
). Versuche, es dort zum Laufen zu bringen (über das Menü per Run
→Run without debugging
(oder deutsch Ausführen
→Ausführen ohne Debugging
) oder schneller mit dem ShortkeyCtrl+F5
). - Vermutlich klappt das nicht: Du musst die Library pygame
installieren wie im folgenden 4. Punkt beschrieben (dies ist eine Bibliothek von Befehlen, die das Programmieren von Spielen erleichtern (pygame = python game library); wir verwenden sie, da sie sich auch gut zum Erstellen von Zeichnungen eignet):
4. Öffne die Anwendung/App “Eingabeaufforderung” (= “command prompt” = “Befehlszeile”, auf manchen Schul-Windows-Rechnern muss man “cmd” suchen). Gib dort den Befehl pip install pygame
ein, gefolgt von Enter
: (pip
ist ein Paketverwaltungsprogramm für Python; pip ist ein Akronym für “pip installs packages”, vgl. https://de.wikipedia.org/wiki/Pip_(Python))
(Falls das Probleme macht, vielleicht klappt das Folgende (nicht getestet): Probiere es mit python -m pip install pygame
.)
5. Nun solltest du das Programm in VS-Code starten können (so wie im Punkt 3 beschrieben).
Ordnung im Chaos: Mehr Infos zum Chaos-Spiel
Die Figur, die das Chaos-Spiel produziert, heisst Sierpiński-Dreieck. Weitere Infos zum Chaos-Spiel findest du unter Wikipedia - Chaos game.
Aufgabe 4: Python-Extensions installieren (da VS Code gerade offen ist)
Installiere die beiden Extensions “Python” und “Pylance” in VS Code wie im Folgenden erklärt (eventuell wurde dir dies bereits von VS Code vorgeschlagen und du hast diese Aufgabe bereits erledigt). Sie erleichtern das Programmieren in Python.
Aufgabe 5: Programm per Eingabeaufforderung zum Laufen bringen
Du kannst das Programm auch ohne den Editor/die Entwicklungsumgebung VS-Code ablaufen lassen:
Verwende wieder die App “Eingabeaufforderung” und gib die folgenden Befehle ein (wenn deine Verzeichnisse anders heissen, musst du die Befehle in naheliegender Weise anpassen; z. B. musst du etwas wie cd “OneDrive - Kt. SG BLD”
eingeben, um wenn du deine Informatik-Dateien unter OneDrive gespeichert hast).2)
cd informatik
+Enter
(Erklärung:cd
steht für “change directory”)cd python
+Enter
(nun bist du hoffentlich in dem Verzeichnis, in dem du das Programmchaos-game.py
abgespeichert hast)python chaos-game.py
+Enter
(dies bewirkt, dass das Programmchaos-game.py
ausgeführt wird))
Dein Screen sollte ungefähr wie folgt aussehen und das Programm sollte starten:
Alternativen:
- In der “Eingabeaufforderung” kannst du auch direkt sinngemäss
python C:\Users\Olaf.Schnuerer\informatik\python\chaos-game.py
eingeben (to be tested). - Du kannst das Programm auch in der “Python-Shell” aufrufen. Starte die App “Python”. Gib dort sinngemäss
exec(open(“chaos-game.py”).read())
ein, wenn du im richtigen Verzeichnis bist; sonst musst du entweder zuerst in das richtige Verzeichnis wechseln oder zusätzlich den Pfad ähnlich wie oben angeben. Die Python-Shell kannst du übrigens mitexit()
per Tastatur beenden. - Du kannst das Python-Programm direkt aus dem Explorer laufen lassen: Je nach Einstellungen, direkt per
Doppelklick
oder perRechtsklick
+“Open with” und dort Python auswählen. (Was beim Doppelklick auf eine Datei eines gegebenen Typs passiert (Dateinamenserweiterung), kann man einstellen per Rechtsklick auf die Datei→“Properties”→“Opens with”.)
Wichtige Begriffe, die du kennen solltest
Erklärung wichtiger Begriffe: Algorithmus, Implementierung, IDE:
- Eine Folge von Handlungsanweisungen (wie unsere erste Erklärung des Chaos-Spiels oben) nennt man einen Algorithmus3). Jedes Kochrezept oder jede Bastelanleitung oder jede Spielanleitung ist ein Beispiel für einen Algorithmus.
- Das oben angegebene Python-Programm ist eine Implementierung des Chaos-Spiel-Algorithmus - wir sagen dem Computer also mit Hilfe der Programmiersprache Python in präziser, computerverständlicher Form, was er tun soll.
- Computerprogramme schreibt man in Editoren. Meist verwendet man Editoren, die das Programmieren sinnvoll unterstützen. Solche Editoren heissen Entwicklungsumgebungen (= integrierte Entwicklungsumgebungen = integrated development environment, kurz IDE). Wir arbeiten mit der IDE “Visual Studio Code”. In ihr kann man Python-Programm direkt ausführen (per
Ctrl+F5
).
Bonus-Aufgabe 1 (relativ einfach)
Verändere den Programm-Code so, dass 1'000'000 Punkte gezeichnet werden und dass nach dem Zeichnen eines Punktes keine Pause von einer Millisekunde gemacht wird. (Ich habe diese Pause oben eingeführt, damit das Bild nicht “sofort” da ist; lösche den entsprechenden Befehl oder kommentiere ihn mit #
aus.)
Bonus-Aufgabe 2 (wenn du den Programm-Code ziemlich gut verstehst)
Passe das Python-Programm so an, dass einige der Bilder in https://en.wikipedia.org/wiki/Chaos_game#Jumps_other_than_1/2 entstehen. Wenn du zum Beispiel das “Vicsek fractal” zeichnen willst:
- Sorge dafür, dass die Leinwand quadratisch ist (also Höhe = Breite).
- Definiere fünf Punkte $A$, $B$, $C$, $D$, $E$.
- Statt des Faktors 0.5 in den Programmzeilen, wo der Punkt springt, verwende den Faktor
2/3
.
Du darfst natürlich kreativ sein und andere Punktekonstellationen und Faktoren ausprobieren.