Zum Inhalt springen

Projekte: Unterschied zwischen den Versionen

Aus Martins Wiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 4: Zeile 4:
Der Umfang der Programme für die Projekte ist jeweils zu Beginn mit "LOC xx" angegeben, dabei steht LOC für "lines of code". Das gibt eine grobe Einschätzung des Zeitaufwandes für eine Behandlung im Kurs. Allerdings benötigen die komplexeren Programme noch Vorübungen zum Einstieg. Deren Umfang wurden nicht mitgezählt. Außerdem sind nicht alle Programmzeilen gleichermaßen bedeutungsvoll. Die gute Nachricht ist aber, dass Python-Programme generell recht kompakt daherkommen. Mit 100 Zeilen lässt sich schon eine Menge Funktionalität erzielen!
Der Umfang der Programme für die Projekte ist jeweils zu Beginn mit "LOC xx" angegeben, dabei steht LOC für "lines of code". Das gibt eine grobe Einschätzung des Zeitaufwandes für eine Behandlung im Kurs. Allerdings benötigen die komplexeren Programme noch Vorübungen zum Einstieg. Deren Umfang wurden nicht mitgezählt. Außerdem sind nicht alle Programmzeilen gleichermaßen bedeutungsvoll. Die gute Nachricht ist aber, dass Python-Programme generell recht kompakt daherkommen. Mit 100 Zeilen lässt sich schon eine Menge Funktionalität erzielen!


=== KFZ-Kennzeichen ===
== KFZ-Kennzeichen ==
LOC 51. Wir suchen in einem Datenbestand. Bitte ladet [[Media:KfzKennzeichen.txt|diese Datei]] herunter!
LOC 51. Wir suchen in einem Datenbestand. Bitte ladet [[Media:KfzKennzeichen.txt|diese Datei]] herunter!


Zeile 13: Zeile 13:
  Bitte das Orts-Kennzeichen eingeben: <span style="color:red">...</span>
  Bitte das Orts-Kennzeichen eingeben: <span style="color:red">...</span>


=== Plotter ===
== Plotter ==
LOC 20. Mit wenig eigenem Code ermöglicht uns die [https://de.wikipedia.org/wiki/Matplotlib Matplotlib], Kurvenverläufe zu zeichnen. Ladet hierzu [[Media:GlobalWarming.txt|diese Datei]] herunter!
LOC 20. Mit wenig eigenem Code ermöglicht uns die [https://de.wikipedia.org/wiki/Matplotlib Matplotlib], Kurvenverläufe zu zeichnen. Ladet hierzu [[Media:GlobalWarming.txt|diese Datei]] herunter!
[[File:GlobalWarming.PNG|center]]
[[File:GlobalWarming.PNG|center]]


=== Geheim ===
== Geheim ==
LOC 66. Einfache Verfahren zum Verschlüsseln von Text sind schnell verstanden und programmiert. [https://de.wikipedia.org/wiki/Caesar-Verschl%C3%BCsselung Caesar] lässt grüßen: "joky oyz kot zkdz, jkx atzkx qkotkt asyzätjkt hkqgttz ckxjkt jgxl"
LOC 66. Einfache Verfahren zum Verschlüsseln von Text sind schnell verstanden und programmiert. [https://de.wikipedia.org/wiki/Caesar-Verschl%C3%BCsselung Caesar] lässt grüßen: "joky oyz kot zkdz, jkx atzkx qkotkt asyzätjkt hkqgttz ckxjkt jgxl"


Zeile 31: Zeile 31:
Mache Gebrauch von der [https://de.wikipedia.org/wiki/Division_mit_Rest#Modulo Modulo]-Funktion (%), wenn du bei der Verschiebung über die Ränder gerätst! (Möglicherweise musst du vorher die Länge des Alphabets addieren.)
Mache Gebrauch von der [https://de.wikipedia.org/wiki/Division_mit_Rest#Modulo Modulo]-Funktion (%), wenn du bei der Verschiebung über die Ränder gerätst! (Möglicherweise musst du vorher die Länge des Alphabets addieren.)


=== Ballonjagd ===
== Ballonjagd ==
LOC 64. Mit gut 60 Zeilen Code programmieren wir unser erstes Spiel auf einer grafischen Oberfläche ([https://de.wikipedia.org/wiki/Grafische_Benutzeroberfl%C3%A4che GUI]). Wer kann innerhalb von 20 Sekunden die meisten roten Ballons mit der Maus abstechen?
LOC 64. Mit gut 60 Zeilen Code programmieren wir unser erstes Spiel auf einer grafischen Oberfläche ([https://de.wikipedia.org/wiki/Grafische_Benutzeroberfl%C3%A4che GUI]). Wer kann innerhalb von 20 Sekunden die meisten roten Ballons mit der Maus abstechen?
[[File:Ballonjagd.PNG|center]]
[[File:Ballonjagd.PNG|center]]


=== Benzin ===
== Benzin ==
LOC 80. Ich habe nach 830 km Fahrt 53 Liter getankt. Was war mein durchschnittlicher Verbrauch auf 100 km? Unser Programm gibt die Antwort. Aber es kann noch mehr: Es berechnet den Verbrauch bzw. Strecke und Volumen anhand der jeweils anderen 2 Werte.
LOC 80. Ich habe nach 830 km Fahrt 53 Liter getankt. Was war mein durchschnittlicher Verbrauch auf 100 km? Unser Programm gibt die Antwort. Aber es kann noch mehr: Es berechnet den Verbrauch bzw. Strecke und Volumen anhand der jeweils anderen 2 Werte.
[[File:BenzinKlein.PNG|center]]
[[File:BenzinKlein.PNG|center]]
Zeile 41: Zeile 41:
[[Media:BenzinStarterSet.zip|Hier]] kannst du ein StarterSet herunterladen und mit der eigenen Entwicklung starten!
[[Media:BenzinStarterSet.zip|Hier]] kannst du ein StarterSet herunterladen und mit der eigenen Entwicklung starten!


=== Symmetrie ===
== Symmetrie ==
LOC 52. Mit diesem Malprogramm gelingen exakt symmetrische Figuren, wie man sieht:
LOC 52. Mit diesem Malprogramm gelingen exakt symmetrische Figuren, wie man sieht:
[[File:Symm300.PNG|center]]
[[File:Symm300.PNG|center]]


=== Bahnhofsuhr ===
== Bahnhofsuhr ==
[[File:UhrKlein.PNG|center]]
[[File:UhrKlein.PNG|center]]
LOC 98. Alles geht im Kreis. Eine einzige Funktion macht die Grafik: Sinus und Kosinus lassen grüßen! Hat man dieses Programm verstanden, steht der eigenen Uhrmacherei nichts mehr im Wege. Man baut Zifferblätter und Zeiger nach eigenen Ideen oder Vorlagen, schaltet Zeitzonen um oder zeigt die Zeit mehrerer Zeitzonen nebeneinander.
LOC 98. Alles geht im Kreis. Eine einzige Funktion macht die Grafik: Sinus und Kosinus lassen grüßen! Hat man dieses Programm verstanden, steht der eigenen Uhrmacherei nichts mehr im Wege. Man baut Zifferblätter und Zeiger nach eigenen Ideen oder Vorlagen, schaltet Zeitzonen um oder zeigt die Zeit mehrerer Zeitzonen nebeneinander.


=== Neues von der Platte ===
== Neues von der Platte ==
[[File:DateisucheKlein.PNG|center]]
[[File:DateisucheKlein.PNG|center]]
LOC 73. Welche Daten habe ich (oder jemand anderes) auf dieser Festplatte oder jenem Stick in letzter Zeit neu erzeugt oder modifiziert? Dieses Programm gibt Auskunft!
LOC 73. Welche Daten habe ich (oder jemand anderes) auf dieser Festplatte oder jenem Stick in letzter Zeit neu erzeugt oder modifiziert? Dieses Programm gibt Auskunft!


=== Turtle ===
== Turtle ==
[[File:TurtlesKlein.png|center]]
[[File:TurtlesKlein.png|center]]
LOC 17-60. Mit einfachen Befehlen eine Schildkröte (engl. "turtle") über die Zeichenfläche zu bewegen stellt einen ganz besonders anschaulichen Zugang zur Programmierung dar. Die Schildkröte hinterlässt dabei Spuren und formt Figuren. Nicht nur, dass es Spaß macht, sich eigene Muster auszudenken oder spielerisch zu erforschen - nein, man bekommt auch ein gutes Gefühl für die Wirksamkeit der Python-Sprachelemente. Und lernt anschaulich, geometrische Zusammenhänge zu nutzen oder auch in Koordinaten zu denken. In der Thonny-Programmierumgebung kann man auf Knopfdruck umschalten zwischen Befehlseingabe und Ausführung, was zum Ausprobieren und experimentieren einlädt. Und [https://en.wikipedia.org/wiki/Turtle_graphics Turtles] können noch viel mehr...
LOC 17-60. Mit einfachen Befehlen eine Schildkröte (engl. "turtle") über die Zeichenfläche zu bewegen stellt einen ganz besonders anschaulichen Zugang zur Programmierung dar. Die Schildkröte hinterlässt dabei Spuren und formt Figuren. Nicht nur, dass es Spaß macht, sich eigene Muster auszudenken oder spielerisch zu erforschen - nein, man bekommt auch ein gutes Gefühl für die Wirksamkeit der Python-Sprachelemente. Und lernt anschaulich, geometrische Zusammenhänge zu nutzen oder auch in Koordinaten zu denken. In der Thonny-Programmierumgebung kann man auf Knopfdruck umschalten zwischen Befehlseingabe und Ausführung, was zum Ausprobieren und experimentieren einlädt. Und [https://en.wikipedia.org/wiki/Turtle_graphics Turtles] können noch viel mehr...


=== Snake ===
== Snake ==
[[File:SnakeKlein.PNG|center]]
[[File:SnakeKlein.PNG|center]]
LOC 104. Die Schlange (grün) frisst eine Beute nach der anderen (rot) und wird dabei immer länger. Somit wächst die Gefahr für die Schlange, sich auf dem Spielfeld selbst im Wege zu liegen. Dies muss der Spieler vermeiden, denn sonst ist es vorbei - Game Over! Sieger ist, wer die meisten Beutestücke erwischen konnte.
LOC 104. Die Schlange (grün) frisst eine Beute nach der anderen (rot) und wird dabei immer länger. Somit wächst die Gefahr für die Schlange, sich auf dem Spielfeld selbst im Wege zu liegen. Dies muss der Spieler vermeiden, denn sonst ist es vorbei - Game Over! Sieger ist, wer die meisten Beutestücke erwischen konnte.


=== Datenanalyse ===
== Datenanalyse ==
LOC 45. Die Pakete [https://de.wikipedia.org/wiki/Matplotlib Matplotlib] und [https://de.wikipedia.org/wiki/SciPy SciPy] ermöglichen eine professionelle Datenanalyse und Darstellung im Handumdrehen. Fragt man sich z.B., wie in den deutschen Bundesländern die Corona-Impfquoten, -Inzidenzen, und -Todesfälle zusammenhängen, findet man die Daten leicht bei [https://de.statista.com/ Statista]. Lädt man sie herunter und wertet sie mit einem Ptython-Skript aus, entstehen Grafiken wie diese (Stand November 2021):
LOC 45. Die Pakete [https://de.wikipedia.org/wiki/Matplotlib Matplotlib] und [https://de.wikipedia.org/wiki/SciPy SciPy] ermöglichen eine professionelle Datenanalyse und Darstellung im Handumdrehen. Fragt man sich z.B., wie in den deutschen Bundesländern die Corona-Impfquoten, -Inzidenzen, und -Todesfälle zusammenhängen, findet man die Daten leicht bei [https://de.statista.com/ Statista]. Lädt man sie herunter und wertet sie mit einem Ptython-Skript aus, entstehen Grafiken wie diese (Stand November 2021):
[[File:Korrelation.png|center]]
[[File:Korrelation.png|center]]
Die Rohdaten liegen [[Media:Korrelation.zip|hier]] bereit. Zum Thema [https://de.wikipedia.org/wiki/Korrelationskoeffizient Korrelationskoeffizient] siehe auch weiter unten!
Die Rohdaten liegen [[Media:Korrelation.zip|hier]] bereit. Zum Thema [https://de.wikipedia.org/wiki/Korrelationskoeffizient Korrelationskoeffizient] siehe auch weiter unten!


=== Pong! mit Sound-Effekt ===
== Pong! mit Sound-Effekt ==
[[File:Pong.png|center]]
[[File:Pong.png|center]]
LOC 101. Mit dem roten Schläger muss der gelbe Ball in der grünen Box gehalten werden, sonst...
LOC 101. Mit dem roten Schläger muss der gelbe Ball in der grünen Box gehalten werden, sonst...
Zeile 85: Zeile 85:
Bei passender Gelegenheit in deinem Code kannst du sie jeweils abspielen mit pong_wave.play(), wall_wave.play() und drown_wave.play()
Bei passender Gelegenheit in deinem Code kannst du sie jeweils abspielen mit pong_wave.play(), wall_wave.play() und drown_wave.play()


=== Triangles ===
== Triangles ==
[[File:triangles.gif|center]]
[[File:triangles.gif|center]]
LOC 78. Hier programmieren wir die Komposition (d.h. das Zusammenfügen) in objektorientierter Weise, also mit Klassen: Die animierte Grafik enthält viele Dreiecke. Jedes davon besteht aus drei beweglichen Punkten. Jeder Punkt wird - für Ort und Geschwindigkeit - durch zwei Vektoren definiert, wobei jeder Vektor wiederum über eine x-Komponente und eine y-Komponente verfügt. Alles ist also ineinander verschachtelt. Deswegen - und nicht trotzdem! - bleibt das Programm übersichtlich.
LOC 78. Hier programmieren wir die Komposition (d.h. das Zusammenfügen) in objektorientierter Weise, also mit Klassen: Die animierte Grafik enthält viele Dreiecke. Jedes davon besteht aus drei beweglichen Punkten. Jeder Punkt wird - für Ort und Geschwindigkeit - durch zwei Vektoren definiert, wobei jeder Vektor wiederum über eine x-Komponente und eine y-Komponente verfügt. Alles ist also ineinander verschachtelt. Deswegen - und nicht trotzdem! - bleibt das Programm übersichtlich.


=== Fontäne ===
== Fontäne ==
[[File:fountain.gif|center]]
[[File:fountain.gif|center]]
LOC 64. Wenn wir mehrere Bälle in die Luft schießen und etwas Gravitation hinzufügen, dann ergibt sich eine (auf Wunsch gepulste) Fontäne - nun, so ungefähr...
LOC 64. Wenn wir mehrere Bälle in die Luft schießen und etwas Gravitation hinzufügen, dann ergibt sich eine (auf Wunsch gepulste) Fontäne - nun, so ungefähr...


=== Katzenleben  ===
== Katzenleben  ==
[[File:KatzenlebenKlein.PNG|center]]
[[File:KatzenlebenKlein.PNG|center]]
LOC 121. ([https://www.heise.de/select/ct/2018/17/1534471668916778 Quelle]) Dieses Spiel mit PyGame basiert weitgehend auf einem Programm von Pit Noack, das 2018 in der Zeitschrift c't veröffentlicht wurde. Die vom Spieler gesteuerte Katze muss den unangenehmen Dingen (Wasser, Hunden, Lärm) ausweichen und die geliebten Dinge (Mäuse, Wollknäuel, Schmetterlinge) einsammeln. Die Sprites gibt's [[Media:Katzenleben.zip|hier]].
LOC 121. ([https://www.heise.de/select/ct/2018/17/1534471668916778 Quelle]) Dieses Spiel mit PyGame basiert weitgehend auf einem Programm von Pit Noack, das 2018 in der Zeitschrift c't veröffentlicht wurde. Die vom Spieler gesteuerte Katze muss den unangenehmen Dingen (Wasser, Hunden, Lärm) ausweichen und die geliebten Dinge (Mäuse, Wollknäuel, Schmetterlinge) einsammeln. Die Sprites gibt's [[Media:Katzenleben.zip|hier]].


=== Proteinsynthese ===
== Proteinsynthese ==
LOC 85. Ausgehend von der [https://de.wikipedia.org/wiki/Desoxyribonukleins%C3%A4ure DNA] Sequenz, die das [https://de.wikipedia.org/wiki/Gen Gen] zur Produktion von [https://de.wikipedia.org/wiki/Lactase Laktase] beinhaltet, wollen wir die resultierende Aminosäure-Folge bestimmen. Sie verkörpert letztlich das [https://de.wikipedia.org/wiki/Proteinbiosynthese Protein] namens Laktase.
LOC 85. Ausgehend von der [https://de.wikipedia.org/wiki/Desoxyribonukleins%C3%A4ure DNA] Sequenz, die das [https://de.wikipedia.org/wiki/Gen Gen] zur Produktion von [https://de.wikipedia.org/wiki/Lactase Laktase] beinhaltet, wollen wir die resultierende Aminosäure-Folge bestimmen. Sie verkörpert letztlich das [https://de.wikipedia.org/wiki/Proteinbiosynthese Protein] namens Laktase.


Zeile 114: Zeile 114:
* Für die Bearbeitung von DNA-Sequenzen existiert ein spezielles Package namens [https://en.wikipedia.org/wiki/Biopython Biopython]. Professionelle Programmierer benutzen dieses Package, anstatt – so wie hier – auf die Basis-Funktionen von Python zurückzugreifen.
* Für die Bearbeitung von DNA-Sequenzen existiert ein spezielles Package namens [https://en.wikipedia.org/wiki/Biopython Biopython]. Professionelle Programmierer benutzen dieses Package, anstatt – so wie hier – auf die Basis-Funktionen von Python zurückzugreifen.


=== Tunnelblick ===
== Tunnelblick ==
[[File:tunnel.gif|center]]
[[File:tunnel.gif|center]]
LOC 48. Mit Pygame lässt sich aus wenigen Zeilen Code der Eindruck erwecken, als fliege man in einen unendlichen Tunnel.
LOC 48. Mit Pygame lässt sich aus wenigen Zeilen Code der Eindruck erwecken, als fliege man in einen unendlichen Tunnel.
Zeile 120: Zeile 120:
LOC 63. Färbt man die Kreise ein, ergeben sich [https://de.wikipedia.org/wiki/Psychedelische_Kunst psychedelische] Effekte, mit denen man durch Mausbewegungen herumspielen kann.
LOC 63. Färbt man die Kreise ein, ergeben sich [https://de.wikipedia.org/wiki/Psychedelische_Kunst psychedelische] Effekte, mit denen man durch Mausbewegungen herumspielen kann.


=== Eins tanzt aus der Reihe ===
== Eins tanzt aus der Reihe ==
[[File:rotating_squares.gif|center]]
[[File:rotating_squares.gif|center]]
LOC 109. Alle Quadrate drehen sich links herum, außer dem roten. Wir lernen, wie man mit Pygame einfache Animationen programmiert, sodass ihr leicht eigene Ideen umsetzen könnt. Im vorliegenden Fall definieren wir eine Quadrat-Klasse und eine Unterklasse für den aus-der-Reihe-Tänzer. Da ist Vererbung und das Überschreiben von Methoden angesagt - sowie Translation und Rotation mit der Drehmatrix.
LOC 109. Alle Quadrate drehen sich links herum, außer dem roten. Wir lernen, wie man mit Pygame einfache Animationen programmiert, sodass ihr leicht eigene Ideen umsetzen könnt. Im vorliegenden Fall definieren wir eine Quadrat-Klasse und eine Unterklasse für den aus-der-Reihe-Tänzer. Da ist Vererbung und das Überschreiben von Methoden angesagt - sowie Translation und Rotation mit der Drehmatrix.
Zeile 129: Zeile 129:
# Färbt man den Hintergrund mit 'lightblue', so drehen sich anscheinend nur die jeweils vom Blick [https://de.wikipedia.org/wiki/Fixation_(Auge) fixierten] Quadrate sowie das rote.
# Färbt man den Hintergrund mit 'lightblue', so drehen sich anscheinend nur die jeweils vom Blick [https://de.wikipedia.org/wiki/Fixation_(Auge) fixierten] Quadrate sowie das rote.


=== Wo ist die ISS? ===
== Wo ist die ISS? ==
LOC 20. Die aktuelle Position der internationalen Raumstation [https://de.wikipedia.org/wiki/Internationale_Raumstation ISS] lässt sich leicht von einem Webserver wie [http://open-notify.org/Open-Notify-API/ISS-Location-Now Open Notify] abfragen. Und das Grafik-Paket [https://plotly.com/python Plotly] bietet vielfältige und großartige Möglichkeiten, Daten zu visualisieren. In unserem Falle wollen wir die Position der Raumstation in eine Weltkarte zeichnen:
LOC 20. Die aktuelle Position der internationalen Raumstation [https://de.wikipedia.org/wiki/Internationale_Raumstation ISS] lässt sich leicht von einem Webserver wie [http://open-notify.org/Open-Notify-API/ISS-Location-Now Open Notify] abfragen. Und das Grafik-Paket [https://plotly.com/python Plotly] bietet vielfältige und großartige Möglichkeiten, Daten zu visualisieren. In unserem Falle wollen wir die Position der Raumstation in eine Weltkarte zeichnen:
[[File:ISS.PNG|center]]
[[File:ISS.PNG|center]]
In der Summe braucht man keine 20 Zeilen Python-Code, den "Rest" (= das Meiste) erledigen die Pakete Plotly und [https://pandas.pydata.org Pandas].  
In der Summe braucht man keine 20 Zeilen Python-Code, den "Rest" (= das Meiste) erledigen die Pakete Plotly und [https://pandas.pydata.org Pandas].  


=== Mandelbrot-Menge ===
== Mandelbrot-Menge ==
LOC 91. Die [https://de.wikipedia.org/wiki/Mandelbrot-Menge Mandelbrot-Menge] ist ein fraktales Gebilde, dessen Strukturen im Kleinen aussehen wie im Großen. Mithilfe eines dynamischen Auswahlfensters können wir in die Tiefe zoomen. Dabei zeigen sich die Performance-Grenzen von Python: Der Bildaufbau wird immer langsamer. [https://www.youtube.com/watch?v=5TzqfheD3rQ Dieses Video] von Edmund Weitz erläutert die mathematischen Hintergründe.
LOC 91. Die [https://de.wikipedia.org/wiki/Mandelbrot-Menge Mandelbrot-Menge] ist ein fraktales Gebilde, dessen Strukturen im Kleinen aussehen wie im Großen. Mithilfe eines dynamischen Auswahlfensters können wir in die Tiefe zoomen. Dabei zeigen sich die Performance-Grenzen von Python: Der Bildaufbau wird immer langsamer. [https://www.youtube.com/watch?v=5TzqfheD3rQ Dieses Video] von Edmund Weitz erläutert die mathematischen Hintergründe.
[[File:Mandelbrot-2.png|center]]
[[File:Mandelbrot-2.png|center]]


=== Das Doppelhaus vom Nikolaus ===
== Das Doppelhaus vom Nikolaus ==
LOC 39. Wir untersuchen mit Python, wie viele Möglichkeiten es gibt, das [https://de.wikipedia.org/wiki/Haus_vom_Nikolaus Haus vom Nikolaus] zu zeichnen. Das sind nicht wenige! Dazu müssen wir aber die Figur erst einmal in Datenstrukturen transformieren auf denen wir dann operieren können.
LOC 39. Wir untersuchen mit Python, wie viele Möglichkeiten es gibt, das [https://de.wikipedia.org/wiki/Haus_vom_Nikolaus Haus vom Nikolaus] zu zeichnen. Das sind nicht wenige! Dazu müssen wir aber die Figur erst einmal in Datenstrukturen transformieren auf denen wir dann operieren können.
[[File:HausVomNikolaus.PNG|center]]
[[File:HausVomNikolaus.PNG|center]]
Anschließend nehmen wir sein Doppelhaus ins Visier. Wieviel Möglichkeiten gibt's da wohl? Wenn wir ein bisschen Theorie verstanden haben, können wir schnell die richtige Antwort geben.
Anschließend nehmen wir sein Doppelhaus ins Visier. Wieviel Möglichkeiten gibt's da wohl? Wenn wir ein bisschen Theorie verstanden haben, können wir schnell die richtige Antwort geben.


=== Memory ===
== Memory ==
[[File:MemoryKlein.PNG|right]]
[[File:MemoryKlein.PNG|right]]
LOC 100. Hier kann man sein Kurzzeitgedächtnis trainieren: Karten werden zufällig gelegt, aufgedeckt, wieder zugedeckt - und bei Erfolg abgeräumt. Wer benötigt die wenigsten Versuche?
LOC 100. Hier kann man sein Kurzzeitgedächtnis trainieren: Karten werden zufällig gelegt, aufgedeckt, wieder zugedeckt - und bei Erfolg abgeräumt. Wer benötigt die wenigsten Versuche?
Zeile 156: Zeile 156:
[[Media:MemoryStarterSet.zip|Hier]] kannst du ein StarterSet herunterladen und mit der eigenen Entwicklung starten!
[[Media:MemoryStarterSet.zip|Hier]] kannst du ein StarterSet herunterladen und mit der eigenen Entwicklung starten!


=== Mondlandung ===
== Mondlandung ==
LOC 134. Wer schafft es, wie einst [https://de.wikipedia.org/wiki/Neil_Armstrong  Neil Armstrong], die Mondfähre am richtigen Ort weich zu landen, ohne zu viel Treibstoff zu verbrauchen? Wir programmieren diese Aufgabe als Geschicklichkeitsspiel: Man muss gleichzeitig die Position, die Flugrichtung, die Geschwindigkeit und den Treibstoffvorrat im Auge behalten. Aber anders als Neil sitzen wir nicht in der Landefähre und können mehrmals üben. (Vermutlich konnte Neil das früher auch schon. Wer mag es recherchieren?)
LOC 134. Wer schafft es, wie einst [https://de.wikipedia.org/wiki/Neil_Armstrong  Neil Armstrong], die Mondfähre am richtigen Ort weich zu landen, ohne zu viel Treibstoff zu verbrauchen? Wir programmieren diese Aufgabe als Geschicklichkeitsspiel: Man muss gleichzeitig die Position, die Flugrichtung, die Geschwindigkeit und den Treibstoffvorrat im Auge behalten. Aber anders als Neil sitzen wir nicht in der Landefähre und können mehrmals üben. (Vermutlich konnte Neil das früher auch schon. Wer mag es recherchieren?)
[[File:Mondlandung.png|center]]
[[File:Mondlandung.png|center]]
In diesem [https://youtu.be/J22hKd8SZp8?si=GtFKf10J7vwg87h4&t=156 Video] ist der Abstieg (= descent) der Apollo 15 Mondlandefähre dokumentiert. Der Pilot berichtet wiederholt über Abstiegsgeschwindigkeit (z.B. "minus eleven"), Höhe über Grund (z.B. "120 feet") und Treibstoffvorrat (z.B. "Nine percent fuel") bis zum "contact", also dem Aufsetzen.
In diesem [https://youtu.be/J22hKd8SZp8?si=GtFKf10J7vwg87h4&t=156 Video] ist der Abstieg (= descent) der Apollo 15 Mondlandefähre dokumentiert. Der Pilot berichtet wiederholt über Abstiegsgeschwindigkeit (z.B. "minus eleven"), Höhe über Grund (z.B. "120 feet") und Treibstoffvorrat (z.B. "Nine percent fuel") bis zum "contact", also dem Aufsetzen.


=== Moonshot ===
== Moonshot ==
LOC 92. Die Reise von [https://de.wikipedia.org/wiki/Apollo_11 Apollo 11] zum Mond im Jahre 1969 verlief anfangs auf einer [https://de.wikipedia.org/wiki/Freie_R%C3%BCckkehrbahn freien Rückkehrbahn], um im Falle eines Versagens der Raketentriebwerke oder sonstiger Pannen das Raumschiff automatisch zur Erde zurück zu bringen. Diesen Ablauf simulieren wir, indem wir die physikalischen Gesetze zur Bewegung von Körpern im Schwerefeld anwenden. Das bedeutet, dass wir die entsprechenden Differentialgleichungen integrieren, um sowohl die Mondbahn im Schwerefeld der Erde als auch die Flugbahn des Raumschiffs im kombinierten Erde-Mond-Schwerefeld zu berechnen.  
LOC 92. Die Reise von [https://de.wikipedia.org/wiki/Apollo_11 Apollo 11] zum Mond im Jahre 1969 verlief anfangs auf einer [https://de.wikipedia.org/wiki/Freie_R%C3%BCckkehrbahn freien Rückkehrbahn], um im Falle eines Versagens der Raketentriebwerke oder sonstiger Pannen das Raumschiff automatisch zur Erde zurück zu bringen. Diesen Ablauf simulieren wir, indem wir die physikalischen Gesetze zur Bewegung von Körpern im Schwerefeld anwenden. Das bedeutet, dass wir die entsprechenden Differentialgleichungen integrieren, um sowohl die Mondbahn im Schwerefeld der Erde als auch die Flugbahn des Raumschiffs im kombinierten Erde-Mond-Schwerefeld zu berechnen.  
Anfangs befindet sich das Raumschiff auf einer kreisförmigen Umlaufbahn um die Erde (rechte Grafik), dann wird der Raketenmotor in Flugrichtung gezündet (Boost). Wenn man den Zeitpunkt zur Zündung und die Brenndauer des Raketenmotors exakt trifft, gelingt das Manöver, wie im Bild festgehalten. Wer sich genauer informieren möchte, kann sich zum Beispiel in [http://www.vxphysics.com/Space%20Program/Analysis%20&%20Simulation%20of%20the%20Trajectory%20of%20the%20Apollo%2011%20Flight%20to%20Moon.pdf dieses Papier] vertiefen. Aber keine Sorge, unser Programm ist sehr viel übersichtlicher.
Anfangs befindet sich das Raumschiff auf einer kreisförmigen Umlaufbahn um die Erde (rechte Grafik), dann wird der Raketenmotor in Flugrichtung gezündet (Boost). Wenn man den Zeitpunkt zur Zündung und die Brenndauer des Raketenmotors exakt trifft, gelingt das Manöver, wie im Bild festgehalten. Wer sich genauer informieren möchte, kann sich zum Beispiel in [http://www.vxphysics.com/Space%20Program/Analysis%20&%20Simulation%20of%20the%20Trajectory%20of%20the%20Apollo%2011%20Flight%20to%20Moon.pdf dieses Papier] vertiefen. Aber keine Sorge, unser Programm ist sehr viel übersichtlicher.
[[File:MoonshotDuo.PNG|center]]
[[File:MoonshotDuo.PNG|center]]


=== Rekursive Programmierung ===
== Rekursive Programmierung ==
LOC 50. Ein Unterprogramm, das sich selbst aufruft - da muss man sein Hirn schon verbiegen, um zu verstehen, was passiert bzw. wie dieser Baum auf eigentlich ganz simple Art zustande kommt.
LOC 50. Ein Unterprogramm, das sich selbst aufruft - da muss man sein Hirn schon verbiegen, um zu verstehen, was passiert bzw. wie dieser Baum auf eigentlich ganz simple Art zustande kommt.
[[File:TreeKlein.png|center]]
[[File:TreeKlein.png|center]]
Nebenbei lernen wir einiges über Vektoren. Ohne die kommt kaum eine Computergrafik aus. Damit Leben ins Spiel kommt, kann man mit der Maus die Form des Baumes "live" in weiten Grenzen variieren.
Nebenbei lernen wir einiges über Vektoren. Ohne die kommt kaum eine Computergrafik aus. Damit Leben ins Spiel kommt, kann man mit der Maus die Form des Baumes "live" in weiten Grenzen variieren.


=== Korrelator ===
== Korrelator ==
LOC 91. Wie variieren paarweise zusammenhängende Größen wie z.B. die Intelligenz und der Notendurchschnitt von Schülerinnen? Oder die jeweiligen Lebensalter von Ehepartnern? Der sogenannte [https://de.wikipedia.org/wiki/Korrelationskoeffizient Korrelationskoeffizient] gibt uns dafür ein objektives Maß. Wir wollen die zugehörige Formel
LOC 91. Wie variieren paarweise zusammenhängende Größen wie z.B. die Intelligenz und der Notendurchschnitt von Schülerinnen? Oder die jeweiligen Lebensalter von Ehepartnern? Der sogenannte [https://de.wikipedia.org/wiki/Korrelationskoeffizient Korrelationskoeffizient] gibt uns dafür ein objektives Maß. Wir wollen die zugehörige Formel
[[File:r-formel.png|center]]
[[File:r-formel.png|center]]
Zeile 178: Zeile 178:
Und bei dieser Gelegenheit erkennen wir auch, warum die Formel "funktioniert".
Und bei dieser Gelegenheit erkennen wir auch, warum die Formel "funktioniert".


=== Lissajous ===
== Lissajous ==
[[File:lissajous.gif|center]]
[[File:lissajous.gif|center]]
LOC 133. Herr [https://de.wikipedia.org/wiki/Jules_Antoine_Lissajous Lissajous] hat im 19. Jahrhundert die nach ihm benannten Figuren beschrieben. Sie entstehen, wenn man Sinus-Schwingungen rechtwinklig gegeneinander aufträgt. Neben der GUI-Programmierung machen wir also Bekanntschaft mit den Konzepten von Amplitude, Frequenz, Phase und Dämpfung. Unser Programm kann eine Vielzahl statischer und bewegter Bilder verschlungener Pfade darstellen und lädt zum Spielen ein!
LOC 133. Herr [https://de.wikipedia.org/wiki/Jules_Antoine_Lissajous Lissajous] hat im 19. Jahrhundert die nach ihm benannten Figuren beschrieben. Sie entstehen, wenn man Sinus-Schwingungen rechtwinklig gegeneinander aufträgt. Neben der GUI-Programmierung machen wir also Bekanntschaft mit den Konzepten von Amplitude, Frequenz, Phase und Dämpfung. Unser Programm kann eine Vielzahl statischer und bewegter Bilder verschlungener Pfade darstellen und lädt zum Spielen ein!


=== Einparktrainer ===
== Einparktrainer ==
[[File:Lenkung700.png|center]]
[[File:Lenkung700.png|center]]
[[File:Einparktrainer500.png|center]]
[[File:Einparktrainer500.png|center]]
Zeile 189: Zeile 189:
Schwieriger ist es, ein [https://de.wikipedia.org/wiki/Gespann Gespann] z.B. aus PKW und Wohnwagen rückwärts zu führen. Sicherlich beherrschen nur Profis das Rückwärtsfahren eines LKW mit zweiachsigem Anhänger.
Schwieriger ist es, ein [https://de.wikipedia.org/wiki/Gespann Gespann] z.B. aus PKW und Wohnwagen rückwärts zu führen. Sicherlich beherrschen nur Profis das Rückwärtsfahren eines LKW mit zweiachsigem Anhänger.


=== Game of Life ===
== Game of Life ==
[[File:GofWikidotKlein.PNG|center]]
[[File:GofWikidotKlein.PNG|center]]
LOC 162. Dieses Muster entwickelt sich aus einem Balken von 8 lebenden Zellen nach 42 Generationen. Wie geht es weiter? Diesen [https://de.wikipedia.org/wiki/Conways_Spiel_des_Lebens Klassiker] sollte jeder Programmierer einmal in Code gegossen haben. Das Game Of Life ist ein unendlicher, bizarrer Kosmos! Wer tiefer in ihn schauen möchte: Siehe [https://www.youtube.com/watch?v=sIuaxVE0PXk hier], [https://www.youtube.com/watch?v=3NDAZ5g4EuU hier], [https://www.youtube.com/watch?v=C2vgICfQawE hier] und [https://www.youtube.com/watch?v=xP5-iIeKXE8 hier]!
LOC 162. Dieses Muster entwickelt sich aus einem Balken von 8 lebenden Zellen nach 42 Generationen. Wie geht es weiter? Diesen [https://de.wikipedia.org/wiki/Conways_Spiel_des_Lebens Klassiker] sollte jeder Programmierer einmal in Code gegossen haben. Das Game Of Life ist ein unendlicher, bizarrer Kosmos! Wer tiefer in ihn schauen möchte: Siehe [https://www.youtube.com/watch?v=sIuaxVE0PXk hier], [https://www.youtube.com/watch?v=3NDAZ5g4EuU hier], [https://www.youtube.com/watch?v=C2vgICfQawE hier] und [https://www.youtube.com/watch?v=xP5-iIeKXE8 hier]!
Eine leistungsfähige Software für (u.a.) das Game Of Life ist [https://en.wikipedia.org/wiki/Golly_(program) Golly]
Eine leistungsfähige Software für (u.a.) das Game Of Life ist [https://en.wikipedia.org/wiki/Golly_(program) Golly]


=== Bügeleisen ===
== Bügeleisen ==
[[File:Bügeleisen.PNG|center]]
[[File:Bügeleisen.PNG|center]]
LOC 182. Was geschieht im Inneren eines herkömmlichen Bügeleisens? Wir simulieren die physikalischen Zusammenhänge und lernen die Bedeutung von elektrischer Leistung, Wärmekapazität, Wärmeleitung, Wärmeströmung und Wärmestrahlung kennen. Was ist ein Bimetall-Schalter, eine Hysterese oder ein Zweipunktregler?
LOC 182. Was geschieht im Inneren eines herkömmlichen Bügeleisens? Wir simulieren die physikalischen Zusammenhänge und lernen die Bedeutung von elektrischer Leistung, Wärmekapazität, Wärmeleitung, Wärmeströmung und Wärmestrahlung kennen. Was ist ein Bimetall-Schalter, eine Hysterese oder ein Zweipunktregler?
Die beschreibende Differentialgleichung integrieren  wir mit dem Eulerschen Verfahren und stellen den Temperaturverlauf mithilfe von Tkinter grafisch dar. Hört sich etwas wüst an, ist aber halb so schlimm. Ist ja schließlich nur ein Bügeleisen :-)
Die beschreibende Differentialgleichung integrieren  wir mit dem Eulerschen Verfahren und stellen den Temperaturverlauf mithilfe von Tkinter grafisch dar. Hört sich etwas wüst an, ist aber halb so schlimm. Ist ja schließlich nur ein Bügeleisen :-)


=== Sokoban ===
== Sokoban ==
LOC 217. Ein [https://de.wikipedia.org/wiki/Sokoban Klassiker] der 80er Jahre. Der fleißige Lagerarbeiter fordert unsere Konzentration: In welcher Reihenfolge muss er vorgehen?
LOC 217. Ein [https://de.wikipedia.org/wiki/Sokoban Klassiker] der 80er Jahre. Der fleißige Lagerarbeiter fordert unsere Konzentration: In welcher Reihenfolge muss er vorgehen?
[[File:SokobanKlein.png|center]]
[[File:SokobanKlein.png|center]]
Zeile 205: Zeile 205:
[[Media:SokobanStarterSet.zip|Hier]] kannst du ein StarterSet herunterladen und mit der eigenen Entwicklung beginnen!
[[Media:SokobanStarterSet.zip|Hier]] kannst du ein StarterSet herunterladen und mit der eigenen Entwicklung beginnen!


=== Orbit ===
== Orbit ==
LOC 213. Von einem hohen Turm wird ein Ball waagerecht nach rechts weggeschleudert. Seine Wurfbahn beschreibt eine Parabel, wenn er zu Boden fällt. Was aber passiert, wenn man dem Ball eine immer größere Anfangsgeschwindigkeit verpasst? Auf einer idealen Erdkugel ohne Luft und Berge wird er immer weiter fliegen, bis er sich schließlich ... im Orbit d.h. auf einer Umlaufbahn um die Erde wiederfindet, also gar nicht mehr zu Boden fällt. Unser Programm zeigt diesen Übergang mit einer Zoom-Funktion, die vom Mausrad angetrieben wird. Das Programm baut auf den Funktionen des Projektes Moonshot auf, was die Simulation von Körpern im Schwerefeld angeht.
LOC 213. Von einem hohen Turm wird ein Ball waagerecht nach rechts weggeschleudert. Seine Wurfbahn beschreibt eine Parabel, wenn er zu Boden fällt. Was aber passiert, wenn man dem Ball eine immer größere Anfangsgeschwindigkeit verpasst? Auf einer idealen Erdkugel ohne Luft und Berge wird er immer weiter fliegen, bis er sich schließlich ... im Orbit d.h. auf einer Umlaufbahn um die Erde wiederfindet, also gar nicht mehr zu Boden fällt. Unser Programm zeigt diesen Übergang mit einer Zoom-Funktion, die vom Mausrad angetrieben wird. Das Programm baut auf den Funktionen des Projektes Moonshot auf, was die Simulation von Körpern im Schwerefeld angeht.
[[File:orbit-1-2.jpg|center]]
[[File:orbit-1-2.jpg|center]]


=== Raycasting ===
== Raycasting ==
[[File:raycasting-visibility.png|center]]
[[File:raycasting-visibility.png|center]]
LOC 110. Von einer Lampe gehen rundum Lichtstrahlen aus, bis sie auf ein Hindernis stoßen. Mit unserem [https://de.wikipedia.org/wiki/Raycasting Raycasting]-Programm können wir die Lampe beliebig bewegen und feststellen, welche Teile eines Raums beleuchtet werden und welche dunkel bleiben.  
LOC 110. Von einer Lampe gehen rundum Lichtstrahlen aus, bis sie auf ein Hindernis stoßen. Mit unserem [https://de.wikipedia.org/wiki/Raycasting Raycasting]-Programm können wir die Lampe beliebig bewegen und feststellen, welche Teile eines Raums beleuchtet werden und welche dunkel bleiben.  
Andersherum betrachtet wird so offenbar, welche Teile des Raums von diesem Punkt aus eingesehen werden können und welche nicht. Im Prinzip genauso funktionieren [https://www.redblobgames.com/articles/visibility/ diese] animierten Bilder. Klicke mit der Maus auf den gelben Punkt und bewege ihn mit gedrückter Maustaste!
Andersherum betrachtet wird so offenbar, welche Teile des Raums von diesem Punkt aus eingesehen werden können und welche nicht. Im Prinzip genauso funktionieren [https://www.redblobgames.com/articles/visibility/ diese] animierten Bilder. Klicke mit der Maus auf den gelben Punkt und bewege ihn mit gedrückter Maustaste!
   
   
=== 3D-Raycasting ===
== 3D-Raycasting ==
[[File:raycasting-3d.png|center]]
[[File:raycasting-3d.png|center]]
LOC 230. Vom Raycasting des vorigen Projekts ist es nicht mehr weit bis zur Darstellung einer einfachen 3-D-Welt, so wie sie in den Anfangszeiten der 3-D-Spiele z.B. bei [https://de.wikipedia.org/wiki/Doom_(1993) Doom] zu sehen waren. In unserer Welt können wir beliebig herumfahren und alle Objekte aus jeder Perspektive betrachten - nicht mehr, nicht weniger. Einfache Spielideen lassen sich aber auch damit schon realisieren. Hier ist eure Kreativität gefragt!
LOC 230. Vom Raycasting des vorigen Projekts ist es nicht mehr weit bis zur Darstellung einer einfachen 3-D-Welt, so wie sie in den Anfangszeiten der 3-D-Spiele z.B. bei [https://de.wikipedia.org/wiki/Doom_(1993) Doom] zu sehen waren. In unserer Welt können wir beliebig herumfahren und alle Objekte aus jeder Perspektive betrachten - nicht mehr, nicht weniger. Einfache Spielideen lassen sich aber auch damit schon realisieren. Hier ist eure Kreativität gefragt!


=== Raytracing ===
== Raytracing ==
[[File:3ballsRedBlueMetallic500.jpg|center]]
[[File:3ballsRedBlueMetallic500.jpg|center]]
LOC 200. Was muss man wohl programmieren, um solch ein Bild zu produzieren? Man nennt es [https://de.wikipedia.org/wiki/Raytracing Raytracing]. Mehr Details gibt es [https://martin-reiche.de/raytracing/ hier]!
LOC 200. Was muss man wohl programmieren, um solch ein Bild zu produzieren? Man nennt es [https://de.wikipedia.org/wiki/Raytracing Raytracing]. Mehr Details gibt es [https://martin-reiche.de/raytracing/ hier]!
Zeile 225: Zeile 225:
Ray-Tracing für die Unterhaltungsindustrie wird heutzutage mit großem Aufwand betrieben, siehe [https://www.youtube.com/watch?v=iOlehM5kNSk dieses Video]. Während wir alle Pixel einzeln und nacheinander mit Python Basis-Funktionen berechnen, sind uns moderne Grafikkarten zillionenfach überlegen, wie [https://www.youtube.com/watch?v=C8YtdC8mxTU dieses Video] eindrücklich zeigt!
Ray-Tracing für die Unterhaltungsindustrie wird heutzutage mit großem Aufwand betrieben, siehe [https://www.youtube.com/watch?v=iOlehM5kNSk dieses Video]. Während wir alle Pixel einzeln und nacheinander mit Python Basis-Funktionen berechnen, sind uns moderne Grafikkarten zillionenfach überlegen, wie [https://www.youtube.com/watch?v=C8YtdC8mxTU dieses Video] eindrücklich zeigt!


=== Tetris ===
== Tetris ==
LOC 205. Der Vater vieler Klötzchenspiele - da ist Übersicht und schnelle Reaktion gefragt. Allerdings auch etwas aufwändiger in der Programmierung. Siehe [https://www.youtube.com/watch?v=SgCY7rf7a_M hier]
LOC 205. Der Vater vieler Klötzchenspiele - da ist Übersicht und schnelle Reaktion gefragt. Allerdings auch etwas aufwändiger in der Programmierung. Siehe [https://www.youtube.com/watch?v=SgCY7rf7a_M hier]
[[File:TetrisKlein.PNG|center]]
[[File:TetrisKlein.PNG|center]]


=== Corona SIR ===
== Corona SIR ==
LOC 88. "Keep the curve flat!" - Haltet die Kurve flach, damit die Gesundheitssysteme nicht überlastet werden! So hieß es in den Anfangszeiten der Corona-Epidemie. Mathematische Modelle und Computersimulationen können uns helfen, die Dynamik des Infektionsgeschehens zu verstehen.
LOC 88. "Keep the curve flat!" - Haltet die Kurve flach, damit die Gesundheitssysteme nicht überlastet werden! So hieß es in den Anfangszeiten der Corona-Epidemie. Mathematische Modelle und Computersimulationen können uns helfen, die Dynamik des Infektionsgeschehens zu verstehen.
[[File:CoronaSIR-klein.PNG|center]]
[[File:CoronaSIR-klein.PNG|center]]
Etwas Schulmathematik und ein paar Zeilen Python-Code bringen uns erkenntnisreiche Ergebnisse - und wir können viele Varianten durchspielen. Begriffe wie Ansteckungsgefahr, Verdopplungszeit, R0  und Herdenimmunität werden greifbar. Nebenbei lernen wir etwas über die numerische Lösung von (gekoppelten) Differentialgleichungen sowie über die famose Matplotlib zur grafischen Darstellung. Keine Sorge, es wird nicht zu schwierig; alles wird haarklein besprochen. Wer sich schon ein wenig Appetit holen möchte, schaue sich [https://www.youtube.com/watch?v=YGeX2Q7D5BU dieses Video] an, von ihm habe ich nämlich die Anregung (und den Namen) für dieses Projekt. Danke an [https://de.wikipedia.org/wiki/Edmund_Weitz Edmund Weitz]!
Etwas Schulmathematik und ein paar Zeilen Python-Code bringen uns erkenntnisreiche Ergebnisse - und wir können viele Varianten durchspielen. Begriffe wie Ansteckungsgefahr, Verdopplungszeit, R0  und Herdenimmunität werden greifbar. Nebenbei lernen wir etwas über die numerische Lösung von (gekoppelten) Differentialgleichungen sowie über die famose Matplotlib zur grafischen Darstellung. Keine Sorge, es wird nicht zu schwierig; alles wird haarklein besprochen. Wer sich schon ein wenig Appetit holen möchte, schaue sich [https://www.youtube.com/watch?v=YGeX2Q7D5BU dieses Video] an, von ihm habe ich nämlich die Anregung (und den Namen) für dieses Projekt. Danke an [https://de.wikipedia.org/wiki/Edmund_Weitz Edmund Weitz]!


=== Gesichtserkennung ===
== Gesichtserkennung ==
LOC 35. Eigentlich sollte man von Gesichtserfassung sprechen, denn es werden hier keine Personen mit ihren Gesichtern assoziiert. Es geht lediglich darum, Gesichter als solche im Foto aufzuspüren.  
LOC 35. Eigentlich sollte man von Gesichtserfassung sprechen, denn es werden hier keine Personen mit ihren Gesichtern assoziiert. Es geht lediglich darum, Gesichter als solche im Foto aufzuspüren.  
[[File:ErfassteGesichterKlein.png|center]]
[[File:ErfassteGesichterKlein.png|center]]
Mit Python ist dies sehr einfach: Die [https://de.wikipedia.org/wiki/OpenCV OpenCV] Anbindung serviert das [https://de.wikipedia.org/wiki/Viola-Jones-Methode Viola-Jones-Verfahren] gebrauchsfertig. (Ich habe die Gesichter meiner indischen Kollegen hier aus Datenschutzgründen unkenntlich gemacht).
Mit Python ist dies sehr einfach: Die [https://de.wikipedia.org/wiki/OpenCV OpenCV] Anbindung serviert das [https://de.wikipedia.org/wiki/Viola-Jones-Methode Viola-Jones-Verfahren] gebrauchsfertig. (Ich habe die Gesichter meiner indischen Kollegen hier aus Datenschutzgründen unkenntlich gemacht).


=== Original und Fälschung ===
== Original und Fälschung ==
LOC 75. Wer erkennt die 10 Unterschiede in den folgenden beiden Bildern?
LOC 75. Wer erkennt die 10 Unterschiede in den folgenden beiden Bildern?
[[File:BunteHäuser1klein.PNG|center]]
[[File:BunteHäuser1klein.PNG|center]]
Zeile 245: Zeile 245:
Einem Computer sollte diese Aufgabe eigentlich nicht schwer fallen. Wäre das nicht eine interessante Programmieraufgabe? Wir lösen sie mithilfe von [https://de.wikipedia.org/wiki/NumPy NumPy] und anderen Paketen.
Einem Computer sollte diese Aufgabe eigentlich nicht schwer fallen. Wäre das nicht eine interessante Programmieraufgabe? Wir lösen sie mithilfe von [https://de.wikipedia.org/wiki/NumPy NumPy] und anderen Paketen.


=== Boids ===
== Boids ==
LOC 317. Dieser [https://www.red3d.com/cwr/boids Klassiker] im Bereich autonomer Agenten demonstriert, wie die Schwarmbildung bei Vögeln und Fischen durch einfache Verhaltensmuster der einzelnen Tiere erklärt werden kann. Wir programmieren das Zusammenspiel der Kräfte und erleben die sich daraus ergebenden d.h. [https://de.wikipedia.org/wiki/Emergenz emergenten] Strukturen.
LOC 317. Dieser [https://www.red3d.com/cwr/boids Klassiker] im Bereich autonomer Agenten demonstriert, wie die Schwarmbildung bei Vögeln und Fischen durch einfache Verhaltensmuster der einzelnen Tiere erklärt werden kann. Wir programmieren das Zusammenspiel der Kräfte und erleben die sich daraus ergebenden d.h. [https://de.wikipedia.org/wiki/Emergenz emergenten] Strukturen.
[[File:BoidsKlein.png|center]]
[[File:BoidsKlein.png|center]]


=== Navigation ===
== Navigation ==
LOC 180. Wie schafft es ein Navi, uns den nächsten Weg zum Ziel zu zeigen? Dazu müssen wir das Straßennetz auf Datenstrukturen abbilden, in denen dann Algorithmen den optimalen Weg finden. Wir programmieren den Dijkstra- und den A*-Algorithmus als wichtige Vertreter ihrer Zunft. Dann wir können die Programme auf das Londoner U-Bahn-Netz loslassen, um uns den schnellsten Weg z.B. von Upminster nach Kenton raussuchen zu lassen.
LOC 180. Wie schafft es ein Navi, uns den nächsten Weg zum Ziel zu zeigen? Dazu müssen wir das Straßennetz auf Datenstrukturen abbilden, in denen dann Algorithmen den optimalen Weg finden. Wir programmieren den Dijkstra- und den A*-Algorithmus als wichtige Vertreter ihrer Zunft. Dann wir können die Programme auf das Londoner U-Bahn-Netz loslassen, um uns den schnellsten Weg z.B. von Upminster nach Kenton raussuchen zu lassen.
[[File:TubeKlein.png|center]]
[[File:TubeKlein.png|center]]


=== Sudoku ===
== Sudoku ==
LOC 449. Diese Sorte [https://de.wikipedia.org/wiki/Sudoku Rätsel] verlangt von uns mitunter eine große Konzentrationsfähigkeit und einen scharfen Bick. Aber halt, ist nicht ein Computer besser geeignet, die Lösung ausknobeln? Eigentlich ja, aber wie muss man ihn programmieren? Die Zauberworte heißen [https://de.wikipedia.org/wiki/Rekursion Rekursion] und [https://de.wikipedia.org/wiki/Backtracking Backtracking]. Diese Programmierkonzepte werden wir mit Python realisieren. Außerdem bietet sich hier an, das [https://de.wikipedia.org/wiki/Modultest unittest] Framework einzusetzen, um jederzeit prüfen zu können, dass unser Programm als Ganzes richtig funktioniert.
LOC 449. Diese Sorte [https://de.wikipedia.org/wiki/Sudoku Rätsel] verlangt von uns mitunter eine große Konzentrationsfähigkeit und einen scharfen Bick. Aber halt, ist nicht ein Computer besser geeignet, die Lösung ausknobeln? Eigentlich ja, aber wie muss man ihn programmieren? Die Zauberworte heißen [https://de.wikipedia.org/wiki/Rekursion Rekursion] und [https://de.wikipedia.org/wiki/Backtracking Backtracking]. Diese Programmierkonzepte werden wir mit Python realisieren. Außerdem bietet sich hier an, das [https://de.wikipedia.org/wiki/Modultest unittest] Framework einzusetzen, um jederzeit prüfen zu können, dass unser Programm als Ganzes richtig funktioniert.
Wenn wir uns sicher fühlen, setzen wir zum Abschluss noch mit [https://de.wikipedia.org/wiki/Tkinter Tkinter] eine grafische Oberfläche darauf.
Wenn wir uns sicher fühlen, setzen wir zum Abschluss noch mit [https://de.wikipedia.org/wiki/Tkinter Tkinter] eine grafische Oberfläche darauf.
[[File:SudokuWikipedia.PNG|center]]
[[File:SudokuWikipedia.PNG|center]]


=== Blattsalat ===
== Blattsalat ==
[[File:SevenLeaves800.jpg|center]]
[[File:SevenLeaves800.jpg|center]]
LOC 1129. Wie schafft es ein Computer, eine Menge von Blättern zu sortieren, die zu verschiedenen Pflanzen gehören - ohne, dass man ihm vorgibt, von wieviel Pflanzenarten genau sie stammen? Wir programmieren zwei berühmte Machine-Learning-Algorithmen: [https://de.wikipedia.org/wiki/K-Means-Algorithmus K-Means] und [https://de.wikipedia.org/wiki/N%C3%A4chste-Nachbarn-Klassifikation K-Nearest-Neighbor]. Mehr Info gibt's [https://martin-reiche.de/folio/ hier]!
LOC 1129. Wie schafft es ein Computer, eine Menge von Blättern zu sortieren, die zu verschiedenen Pflanzen gehören - ohne, dass man ihm vorgibt, von wieviel Pflanzenarten genau sie stammen? Wir programmieren zwei berühmte Machine-Learning-Algorithmen: [https://de.wikipedia.org/wiki/K-Means-Algorithmus K-Means] und [https://de.wikipedia.org/wiki/N%C3%A4chste-Nachbarn-Klassifikation K-Nearest-Neighbor]. Mehr Info gibt's [https://martin-reiche.de/folio/ hier]!


=== Particle Life ===
== Particle Life ==
[[File:BunteRaupe.png|center]]
[[File:BunteRaupe.png|center]]
LOC 140. Wem [https://youtu.be/p4YirERTVF0 dieses Video] gefällt, so wie es mich beeindruckt hat, die oder der sollte sich einmal selbst in die Welt der [https://de.wikipedia.org/wiki/Selbstorganisation Selbstorganisation] und [https://de.wikipedia.org/wiki/Emergenz Emergenz] hineinprogrammieren. Auch wenn mit Python die Performance des Videos nicht erreicht werden kann, so macht es doch Spaß, mit den Parametern zu spielen, vor allem mit der Attraktionsmatrix :-)
LOC 140. Wem [https://youtu.be/p4YirERTVF0 dieses Video] gefällt, so wie es mich beeindruckt hat, die oder der sollte sich einmal selbst in die Welt der [https://de.wikipedia.org/wiki/Selbstorganisation Selbstorganisation] und [https://de.wikipedia.org/wiki/Emergenz Emergenz] hineinprogrammieren. Auch wenn mit Python die Performance des Videos nicht erreicht werden kann, so macht es doch Spaß, mit den Parametern zu spielen, vor allem mit der Attraktionsmatrix :-)


=== Perzeptron  ===
== Perzeptron  ==
LOC 90. Angenommen, bei einer Pandemie sterben viele Menschen. Zwar ist bekannt, wie man die Erkrankung stoppen kann, doch es fehlen Medikamente. Eine statistische Untersuchung zeigt nun, dass man allein aus dem Alter und der Höhe des Fiebers  bestimmen kann, ob ein Patient von allein wieder gesund wird oder nicht, wer also das Medikament wirklich braucht:
LOC 90. Angenommen, bei einer Pandemie sterben viele Menschen. Zwar ist bekannt, wie man die Erkrankung stoppen kann, doch es fehlen Medikamente. Eine statistische Untersuchung zeigt nun, dass man allein aus dem Alter und der Höhe des Fiebers  bestimmen kann, ob ein Patient von allein wieder gesund wird oder nicht, wer also das Medikament wirklich braucht:
[[File:Perzeptron1.PNG|center]]
[[File:Perzeptron1.PNG|center]]
Zeile 273: Zeile 273:
In praktischen Anwendungen wird man nicht nur zwei Messgrößen, sondern einige Dutzend davon erfassen. Dann erkennt man als Mensch nicht mehr so leicht die Zusammenhänge. Dann reicht auch nicht mehr 1 Neuron, sondern man schaltet hunderte von ihnen zusammen. Perzeptrons sind die Vorläufer derjenigen künstlichen Neuronen, die heute in [https://de.wikipedia.org/wiki/K%C3%BCnstliches_neuronales_Netz künstlichen neuronalen Netzen] wie [https://de.wikipedia.org/wiki/ChatGPT ChatGPT] so erstaunliche Leistungen vollbringen.
In praktischen Anwendungen wird man nicht nur zwei Messgrößen, sondern einige Dutzend davon erfassen. Dann erkennt man als Mensch nicht mehr so leicht die Zusammenhänge. Dann reicht auch nicht mehr 1 Neuron, sondern man schaltet hunderte von ihnen zusammen. Perzeptrons sind die Vorläufer derjenigen künstlichen Neuronen, die heute in [https://de.wikipedia.org/wiki/K%C3%BCnstliches_neuronales_Netz künstlichen neuronalen Netzen] wie [https://de.wikipedia.org/wiki/ChatGPT ChatGPT] so erstaunliche Leistungen vollbringen.


=== Bézier-Kurven ===
== Bézier-Kurven ==
LOC 125: Wer sich von diesem [https://www.youtube.com/watch?v=aVwxzDHniEw wunderbaren Video] inspirieren lässt, möchte sicher auch gerne einmal solche Kurven programmieren.
LOC 125: Wer sich von diesem [https://www.youtube.com/watch?v=aVwxzDHniEw wunderbaren Video] inspirieren lässt, möchte sicher auch gerne einmal solche Kurven programmieren.
[[File:py_cubic_500.jpg|center]]
[[File:py_cubic_500.jpg|center]]
Zeile 283: Zeile 283:
Dass wir hier nur Grundlagen bearbeiten, sieht man an [https://www.youtube.com/watch?v=SO83KQuuZvg diesem Video] eines echten Experten. Das mag abschrecken, aber so kompliziert kann die Praxis sein!
Dass wir hier nur Grundlagen bearbeiten, sieht man an [https://www.youtube.com/watch?v=SO83KQuuZvg diesem Video] eines echten Experten. Das mag abschrecken, aber so kompliziert kann die Praxis sein!


=== Kleingeld ===
== Kleingeld ==
[[File:EuroCent_500.jpg|center]]
[[File:EuroCent_500.jpg|center]]
LOC 143: Wieviel Geld liegt hier auf dem Tisch? Ganz ohne KI liefert unser Programm die Antwort: 7 Euro und 76 Cent. Die aufwändigen Bildoperationen übernimmt das [https://de.wikipedia.org/wiki/Scikit-image Scikit-Image] Paket. Darum bleibt unser Programm überschaubar.
LOC 143: Wieviel Geld liegt hier auf dem Tisch? Ganz ohne KI liefert unser Programm die Antwort: 7 Euro und 76 Cent. Die aufwändigen Bildoperationen übernimmt das [https://de.wikipedia.org/wiki/Scikit-image Scikit-Image] Paket. Darum bleibt unser Programm überschaubar.
[[Media:KleingeldStarter.zip|Hier]] kannst du ein StarterSet herunterladen und mit der eigenen Entwicklung beginnen!
[[Media:KleingeldStarter.zip|Hier]] kannst du ein StarterSet herunterladen und mit der eigenen Entwicklung beginnen!


=== Verfolger ===
== Verfolger ==
[[File:agent.gif|center]]
[[File:agent.gif|center]]
LOC 105. Wenn man im Computer [https://de.wiktionary.org/wiki/Wesen Wesen] erschafft, die aufgrund ihrer eigenen Wahrnehmung selbständiges Verhalten zeigen, so nennt man sie ''Autonome Agenten''. Wir programmieren den Verfolger als Grundlage für vielfältige Anwendungen. Das Beispiel habe ich Daniel Shiffman’s Buch [https://natureofcode.com/autonomous-agents Nature of Code] entnommen,  
LOC 105. Wenn man im Computer [https://de.wiktionary.org/wiki/Wesen Wesen] erschafft, die aufgrund ihrer eigenen Wahrnehmung selbständiges Verhalten zeigen, so nennt man sie ''Autonome Agenten''. Wir programmieren den Verfolger als Grundlage für vielfältige Anwendungen. Das Beispiel habe ich Daniel Shiffman’s Buch [https://natureofcode.com/autonomous-agents Nature of Code] entnommen,  
Zeile 294: Zeile 294:
Das weiße Dreieck (der Agent) verfolgt selbständig den grünen Punkt, den ich mit der Maus gesteuert habe.
Das weiße Dreieck (der Agent) verfolgt selbständig den grünen Punkt, den ich mit der Maus gesteuert habe.


=== Sturz in die Parabel ===
== Sturz in die Parabel ==
[[File:parabola.gif|center]]
[[File:parabola.gif|center]]
LOC 130. Hier stand [https://www.youtube.com/watch?v=YoGmq0IdSxk dieses] und [https://www.youtube.com/watch?v=lf1PP6r8Ft4 dieses] Video Pate: Bälle fallen in ein offenes Gefäß, das die Form einer Parabel hat. Stoßen sie auf die Gefäßwand, werden sie reflektiert, wobei sie ihre Richtung ändern, ihre Geschwindigkeit aber beibehalten. Lässt man viele Bälle von benachbarten Positionen aus in die Parabel fallen, bleiben sie zunächst nahe beieinander, doch entfernen sich im Laufe der Zeit immer weiter voneinander. Obiges GIF zeigt 100 farbige Bälle. Aber auch das zweite Video mit 5000 Bällen lässt sich in Python überzeugend reproduzieren, von Performance-Schwächen keine Spur! Die Reflexion an gekrümmten Linien zu berechnen erfordert etwas analytische Geometrie, ist aber noch überschaubar...
LOC 130. Hier stand [https://www.youtube.com/watch?v=YoGmq0IdSxk dieses] und [https://www.youtube.com/watch?v=lf1PP6r8Ft4 dieses] Video Pate: Bälle fallen in ein offenes Gefäß, das die Form einer Parabel hat. Stoßen sie auf die Gefäßwand, werden sie reflektiert, wobei sie ihre Richtung ändern, ihre Geschwindigkeit aber beibehalten. Lässt man viele Bälle von benachbarten Positionen aus in die Parabel fallen, bleiben sie zunächst nahe beieinander, doch entfernen sich im Laufe der Zeit immer weiter voneinander. Obiges GIF zeigt 100 farbige Bälle. Aber auch das zweite Video mit 5000 Bällen lässt sich in Python überzeugend reproduzieren, von Performance-Schwächen keine Spur! Die Reflexion an gekrümmten Linien zu berechnen erfordert etwas analytische Geometrie, ist aber noch überschaubar...


=== Flackerwort ===
== Flackerwort ==
[[File:flackerwort.gif|center]]
[[File:flackerwort.gif|center]]
LOC 136. Wer nennt als Erster das (zufällig gewählte) Wort, das sich langsam aus dem Flackern schält? Für dieses Projekt braucht es keine Mathematik! Den Zeichensatz findet man im Internet und eine Liste mit 4-Buchstaben-Wörtern kann man selbst herstellen. Je länger die Liste, desto schwieriger wird's mit dem Raten!
LOC 136. Wer nennt als Erster das (zufällig gewählte) Wort, das sich langsam aus dem Flackern schält? Für dieses Projekt braucht es keine Mathematik! Den Zeichensatz findet man im Internet und eine Liste mit 4-Buchstaben-Wörtern kann man selbst herstellen. Je länger die Liste, desto schwieriger wird's mit dem Raten!
Ob ein gut trainiertes neuronales Netz hier schneller schaltet als der Mensch? Ich hab's noch nicht ausprobiert...
Ob ein gut trainiertes neuronales Netz hier schneller schaltet als der Mensch? Ich hab's noch nicht ausprobiert...


=== Modelleisenbahn ===
== Modelleisenbahn ==
[[File:PyBahn.gif|center]]
[[File:PyBahn.gif|center]]
LOC 740. Mit vergleichbar geringem Aufwand gelingt es mit Python und tkinter, eine einfache Eisenbahn-Simulation zu programmieren. Hier sieht man 3 Züge, die auf verschlungenen Gleisen fahren und sich dabei ständig in die Quere kommen. Dauernd werden die Weichen umgeschaltet, was einen chaotischen Verlauf provoziert. Das ist allerdings beabsichtigt, um Schwächen der Simulation aufzudecken.
LOC 740. Mit vergleichbar geringem Aufwand gelingt es mit Python und tkinter, eine einfache Eisenbahn-Simulation zu programmieren. Hier sieht man 3 Züge, die auf verschlungenen Gleisen fahren und sich dabei ständig in die Quere kommen. Dauernd werden die Weichen umgeschaltet, was einen chaotischen Verlauf provoziert. Das ist allerdings beabsichtigt, um Schwächen der Simulation aufzudecken.
Auch wenn die Simulation - vor allem die Grafik - zu komplex für eine Python-AG ist, so kann man doch auf dem Code aufbauen und komfortabel seine eigenen Ideen von Gleislaufplänen, Zugsteuerungen, Signalisierungen, Fahrplänen und Sicherungsvorkehrungen ausprobieren. Siehe auch [https://martin-reiche.de/modellbahn/ hier]
Auch wenn die Simulation - vor allem die Grafik - zu komplex für eine Python-AG ist, so kann man doch auf dem Code aufbauen und komfortabel seine eigenen Ideen von Gleislaufplänen, Zugsteuerungen, Signalisierungen, Fahrplänen und Sicherungsvorkehrungen ausprobieren. Siehe auch [https://martin-reiche.de/modellbahn/ hier]


=== Noch mehr... ===
== Noch mehr... ==
findet sich auf [https://martin-reiche.de/ meiner Homepage] unter "Projekte".
findet sich auf [https://martin-reiche.de/ meiner Homepage] unter "Projekte".

Version vom 15. August 2026, 17:38 Uhr

Achtung!

Diese Seite präsentiert Projekte passend für den Unterricht. Übungsprojekte, die für die Eigenarbeit gedacht sind, finden sich hier

Der Umfang der Programme für die Projekte ist jeweils zu Beginn mit "LOC xx" angegeben, dabei steht LOC für "lines of code". Das gibt eine grobe Einschätzung des Zeitaufwandes für eine Behandlung im Kurs. Allerdings benötigen die komplexeren Programme noch Vorübungen zum Einstieg. Deren Umfang wurden nicht mitgezählt. Außerdem sind nicht alle Programmzeilen gleichermaßen bedeutungsvoll. Die gute Nachricht ist aber, dass Python-Programme generell recht kompakt daherkommen. Mit 100 Zeilen lässt sich schon eine Menge Funktionalität erzielen!

KFZ-Kennzeichen

LOC 51. Wir suchen in einem Datenbestand. Bitte ladet diese Datei herunter!

Ein Dialog mit dem Programm könnte so aussehen (Benutzereingaben in rot):

Willkommen bei der KFZ-Kennzeichen-Auskunft!
Bitte das Orts-Kennzeichen eingeben: RT
RT steht für Reutlingen in Baden-Württemberg
Bitte das Orts-Kennzeichen eingeben: ...

Plotter

LOC 20. Mit wenig eigenem Code ermöglicht uns die Matplotlib, Kurvenverläufe zu zeichnen. Ladet hierzu diese Datei herunter!

Geheim

LOC 66. Einfache Verfahren zum Verschlüsseln von Text sind schnell verstanden und programmiert. Caesar lässt grüßen: "joky oyz kot zkdz, jkx atzkx qkotkt asyzätjkt hkqgttz ckxjkt jgxl"

Verschiebung für den Code-Buchstaben g:

Klarbuchstabe:           abcdefghijklmnopqrstuvwxyz
                         ||||||||||||||||||||||||||
Geheimbuchstabe:   abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
                         ^

Alternative Implementierung ohne Alphabet-String: Benutze die Tatsache, dass in Python die Buchstaben des Alphabets (wie in ASCII) aufsteigend codiert werden. Die Codierung erfährt man mit der ord-Funktion: ord('a') = 97, ord('z') = 122. Die Umkehrfunktion von ord lautet chr: chr(97) = 'a' und chr(122) = 'z'. Mache Gebrauch von der Modulo-Funktion (%), wenn du bei der Verschiebung über die Ränder gerätst! (Möglicherweise musst du vorher die Länge des Alphabets addieren.)

Ballonjagd

LOC 64. Mit gut 60 Zeilen Code programmieren wir unser erstes Spiel auf einer grafischen Oberfläche (GUI). Wer kann innerhalb von 20 Sekunden die meisten roten Ballons mit der Maus abstechen?

Benzin

LOC 80. Ich habe nach 830 km Fahrt 53 Liter getankt. Was war mein durchschnittlicher Verbrauch auf 100 km? Unser Programm gibt die Antwort. Aber es kann noch mehr: Es berechnet den Verbrauch bzw. Strecke und Volumen anhand der jeweils anderen 2 Werte.

Mit der Verwendung von tkinter lernen wir die Programmierung von grafischen Benutzeroberflächen: Fenster, Knöpfe, Textuelle Ein-und Ausgabe, Layout. Hier kannst du ein StarterSet herunterladen und mit der eigenen Entwicklung starten!

Symmetrie

LOC 52. Mit diesem Malprogramm gelingen exakt symmetrische Figuren, wie man sieht:

Bahnhofsuhr

LOC 98. Alles geht im Kreis. Eine einzige Funktion macht die Grafik: Sinus und Kosinus lassen grüßen! Hat man dieses Programm verstanden, steht der eigenen Uhrmacherei nichts mehr im Wege. Man baut Zifferblätter und Zeiger nach eigenen Ideen oder Vorlagen, schaltet Zeitzonen um oder zeigt die Zeit mehrerer Zeitzonen nebeneinander.

Neues von der Platte

LOC 73. Welche Daten habe ich (oder jemand anderes) auf dieser Festplatte oder jenem Stick in letzter Zeit neu erzeugt oder modifiziert? Dieses Programm gibt Auskunft!

Turtle

LOC 17-60. Mit einfachen Befehlen eine Schildkröte (engl. "turtle") über die Zeichenfläche zu bewegen stellt einen ganz besonders anschaulichen Zugang zur Programmierung dar. Die Schildkröte hinterlässt dabei Spuren und formt Figuren. Nicht nur, dass es Spaß macht, sich eigene Muster auszudenken oder spielerisch zu erforschen - nein, man bekommt auch ein gutes Gefühl für die Wirksamkeit der Python-Sprachelemente. Und lernt anschaulich, geometrische Zusammenhänge zu nutzen oder auch in Koordinaten zu denken. In der Thonny-Programmierumgebung kann man auf Knopfdruck umschalten zwischen Befehlseingabe und Ausführung, was zum Ausprobieren und experimentieren einlädt. Und Turtles können noch viel mehr...

Snake

LOC 104. Die Schlange (grün) frisst eine Beute nach der anderen (rot) und wird dabei immer länger. Somit wächst die Gefahr für die Schlange, sich auf dem Spielfeld selbst im Wege zu liegen. Dies muss der Spieler vermeiden, denn sonst ist es vorbei - Game Over! Sieger ist, wer die meisten Beutestücke erwischen konnte.

Datenanalyse

LOC 45. Die Pakete Matplotlib und SciPy ermöglichen eine professionelle Datenanalyse und Darstellung im Handumdrehen. Fragt man sich z.B., wie in den deutschen Bundesländern die Corona-Impfquoten, -Inzidenzen, und -Todesfälle zusammenhängen, findet man die Daten leicht bei Statista. Lädt man sie herunter und wertet sie mit einem Ptython-Skript aus, entstehen Grafiken wie diese (Stand November 2021):

Die Rohdaten liegen hier bereit. Zum Thema Korrelationskoeffizient siehe auch weiter unten!

Pong! mit Sound-Effekt

LOC 101. Mit dem roten Schläger muss der gelbe Ball in der grünen Box gehalten werden, sonst... Um die passenden Geräusche zu produzieren, gehe wie folgt vor: Kopiere diese drei Sound-Dateien in dein Programmverzeichnis:

Zu Beginn deine Programms lade sie mit den Befehlen

pong_wave = pygame.mixer.Sound('pong.wav')
wall_wave = pygame.mixer.Sound('blip.wav')
drown_wave = pygame.mixer.Sound('drown.wav')

Bei passender Gelegenheit in deinem Code kannst du sie jeweils abspielen mit pong_wave.play(), wall_wave.play() und drown_wave.play()

Triangles

LOC 78. Hier programmieren wir die Komposition (d.h. das Zusammenfügen) in objektorientierter Weise, also mit Klassen: Die animierte Grafik enthält viele Dreiecke. Jedes davon besteht aus drei beweglichen Punkten. Jeder Punkt wird - für Ort und Geschwindigkeit - durch zwei Vektoren definiert, wobei jeder Vektor wiederum über eine x-Komponente und eine y-Komponente verfügt. Alles ist also ineinander verschachtelt. Deswegen - und nicht trotzdem! - bleibt das Programm übersichtlich.

Fontäne

LOC 64. Wenn wir mehrere Bälle in die Luft schießen und etwas Gravitation hinzufügen, dann ergibt sich eine (auf Wunsch gepulste) Fontäne - nun, so ungefähr...

Katzenleben

LOC 121. (Quelle) Dieses Spiel mit PyGame basiert weitgehend auf einem Programm von Pit Noack, das 2018 in der Zeitschrift c't veröffentlicht wurde. Die vom Spieler gesteuerte Katze muss den unangenehmen Dingen (Wasser, Hunden, Lärm) ausweichen und die geliebten Dinge (Mäuse, Wollknäuel, Schmetterlinge) einsammeln. Die Sprites gibt's hier.

Proteinsynthese

LOC 85. Ausgehend von der DNA Sequenz, die das Gen zur Produktion von Laktase beinhaltet, wollen wir die resultierende Aminosäure-Folge bestimmen. Sie verkörpert letztlich das Protein namens Laktase.

Wir programmieren folgende Schritte:

  • Lade die benötigten Dateien aus dem Internet, falls noch nicht vorhanden.
  • Lese das Laktase-Gen als einzelne Zeichenkette.
  • Erzeuge aus der Tabelle des genetischen Codes ein Python dict.
  • Lese die Exon-Tabelle.
  • Finde die Start-Position der Protein-Codierung.
  • Spleiße die mRNA mithilfe der Exon-Tabelle aus dem Laktase-Gen.
  • Übersetze die mRNA in das Preprolactase-Protein mithilfe des genetischen Codes.
  • Schreibe die Aminosäure-Sequenz im Standardformat in eine Datei.

Achtung:

  • Obige Beschreibung ist zwar fachlich korrekt, aber sehr verkürzt. Wer mehr wissen will, schaue sich zum Thema DNA z.B. in der Wikipedia oder bei YouTube um.
  • Für die Bearbeitung von DNA-Sequenzen existiert ein spezielles Package namens Biopython. Professionelle Programmierer benutzen dieses Package, anstatt – so wie hier – auf die Basis-Funktionen von Python zurückzugreifen.

Tunnelblick

LOC 48. Mit Pygame lässt sich aus wenigen Zeilen Code der Eindruck erwecken, als fliege man in einen unendlichen Tunnel.

LOC 63. Färbt man die Kreise ein, ergeben sich psychedelische Effekte, mit denen man durch Mausbewegungen herumspielen kann.

Eins tanzt aus der Reihe

LOC 109. Alle Quadrate drehen sich links herum, außer dem roten. Wir lernen, wie man mit Pygame einfache Animationen programmiert, sodass ihr leicht eigene Ideen umsetzen könnt. Im vorliegenden Fall definieren wir eine Quadrat-Klasse und eine Unterklasse für den aus-der-Reihe-Tänzer. Da ist Vererbung und das Überschreiben von Methoden angesagt - sowie Translation und Rotation mit der Drehmatrix. Zu guter Letzt speichern wir die Bilder im animierten GIF-Format ab, wie oben zu sehen.

Zur Wahrnehmungspsychologie:

  1. Die Ecken der Quadrate erscheinen leicht gegen die Drehrichtung verbogen, was objektiv nicht der Fall ist.
  2. Färbt man den Hintergrund mit 'lightblue', so drehen sich anscheinend nur die jeweils vom Blick fixierten Quadrate sowie das rote.

Wo ist die ISS?

LOC 20. Die aktuelle Position der internationalen Raumstation ISS lässt sich leicht von einem Webserver wie Open Notify abfragen. Und das Grafik-Paket Plotly bietet vielfältige und großartige Möglichkeiten, Daten zu visualisieren. In unserem Falle wollen wir die Position der Raumstation in eine Weltkarte zeichnen:

In der Summe braucht man keine 20 Zeilen Python-Code, den "Rest" (= das Meiste) erledigen die Pakete Plotly und Pandas.

Mandelbrot-Menge

LOC 91. Die Mandelbrot-Menge ist ein fraktales Gebilde, dessen Strukturen im Kleinen aussehen wie im Großen. Mithilfe eines dynamischen Auswahlfensters können wir in die Tiefe zoomen. Dabei zeigen sich die Performance-Grenzen von Python: Der Bildaufbau wird immer langsamer. Dieses Video von Edmund Weitz erläutert die mathematischen Hintergründe.

Das Doppelhaus vom Nikolaus

LOC 39. Wir untersuchen mit Python, wie viele Möglichkeiten es gibt, das Haus vom Nikolaus zu zeichnen. Das sind nicht wenige! Dazu müssen wir aber die Figur erst einmal in Datenstrukturen transformieren auf denen wir dann operieren können.

Anschließend nehmen wir sein Doppelhaus ins Visier. Wieviel Möglichkeiten gibt's da wohl? Wenn wir ein bisschen Theorie verstanden haben, können wir schnell die richtige Antwort geben.

Memory

LOC 100. Hier kann man sein Kurzzeitgedächtnis trainieren: Karten werden zufällig gelegt, aufgedeckt, wieder zugedeckt - und bei Erfolg abgeräumt. Wer benötigt die wenigsten Versuche?

Vorbild für das Programm ist eine Art Solitär-Memory d.h. für einen einzelnen Spieler. Ziel des Spiels ist, mit möglichst wenigen Klicks alle Bildpaare zu finden. Am Anfang zeigt das Programm 4 Reihen mit je 5 Karten, von denen die Rückseite zu sehen ist. Klickt der Benutzer nacheinander auf zwei Karten, werden die jeweils zugehörigen Bilder gezeigt und die Karten nach 2 Sekunden

  • wieder "umgedreht", falls die Bilder verschieden waren, oder aber
  • abgeräumt, falls die Bilder gleich waren. Der Platz, an dem vorher eine Vor- oder Rückseite zu sehen war, ist dann leer.

Nach jedem dieser Züge wird eine Anzeige um eins erhöht. Am Ende oder zu jeder anderen Zeit kann der Benutzer einen „Neu“ Knopf drücken, um zur Startposition zurück zu gelangen. Die Karten liegen jedes Mal anders. Tipp: Man programmiert man keine Karten als Abstraktion, sondern Plätze, an denen Bilder gezeigt werden. Daher muss man an die Plätze (=canvas) zwei Informationen binden: Das zugehörige Bild und den Ansichts-Zustand: verdeckt, offen, leer. Hier kannst du ein StarterSet herunterladen und mit der eigenen Entwicklung starten!

Mondlandung

LOC 134. Wer schafft es, wie einst Neil Armstrong, die Mondfähre am richtigen Ort weich zu landen, ohne zu viel Treibstoff zu verbrauchen? Wir programmieren diese Aufgabe als Geschicklichkeitsspiel: Man muss gleichzeitig die Position, die Flugrichtung, die Geschwindigkeit und den Treibstoffvorrat im Auge behalten. Aber anders als Neil sitzen wir nicht in der Landefähre und können mehrmals üben. (Vermutlich konnte Neil das früher auch schon. Wer mag es recherchieren?)

In diesem Video ist der Abstieg (= descent) der Apollo 15 Mondlandefähre dokumentiert. Der Pilot berichtet wiederholt über Abstiegsgeschwindigkeit (z.B. "minus eleven"), Höhe über Grund (z.B. "120 feet") und Treibstoffvorrat (z.B. "Nine percent fuel") bis zum "contact", also dem Aufsetzen.

Moonshot

LOC 92. Die Reise von Apollo 11 zum Mond im Jahre 1969 verlief anfangs auf einer freien Rückkehrbahn, um im Falle eines Versagens der Raketentriebwerke oder sonstiger Pannen das Raumschiff automatisch zur Erde zurück zu bringen. Diesen Ablauf simulieren wir, indem wir die physikalischen Gesetze zur Bewegung von Körpern im Schwerefeld anwenden. Das bedeutet, dass wir die entsprechenden Differentialgleichungen integrieren, um sowohl die Mondbahn im Schwerefeld der Erde als auch die Flugbahn des Raumschiffs im kombinierten Erde-Mond-Schwerefeld zu berechnen. Anfangs befindet sich das Raumschiff auf einer kreisförmigen Umlaufbahn um die Erde (rechte Grafik), dann wird der Raketenmotor in Flugrichtung gezündet (Boost). Wenn man den Zeitpunkt zur Zündung und die Brenndauer des Raketenmotors exakt trifft, gelingt das Manöver, wie im Bild festgehalten. Wer sich genauer informieren möchte, kann sich zum Beispiel in dieses Papier vertiefen. Aber keine Sorge, unser Programm ist sehr viel übersichtlicher.

Rekursive Programmierung

LOC 50. Ein Unterprogramm, das sich selbst aufruft - da muss man sein Hirn schon verbiegen, um zu verstehen, was passiert bzw. wie dieser Baum auf eigentlich ganz simple Art zustande kommt.

Nebenbei lernen wir einiges über Vektoren. Ohne die kommt kaum eine Computergrafik aus. Damit Leben ins Spiel kommt, kann man mit der Maus die Form des Baumes "live" in weiten Grenzen variieren.

Korrelator

LOC 91. Wie variieren paarweise zusammenhängende Größen wie z.B. die Intelligenz und der Notendurchschnitt von Schülerinnen? Oder die jeweiligen Lebensalter von Ehepartnern? Der sogenannte Korrelationskoeffizient gibt uns dafür ein objektives Maß. Wir wollen die zugehörige Formel

zum Leben erwecken, indem wir ein interaktives Programm schreiben. Damit gewinnen wir ein Gefühl für diese Art der Datenanalyse: Wann liegt der Wert r nahe bei 1 oder -1? Wann schwankt er um die Null? Was lässt sich aus der Zahl r ableiten und was nicht?

Und bei dieser Gelegenheit erkennen wir auch, warum die Formel "funktioniert".

Lissajous

LOC 133. Herr Lissajous hat im 19. Jahrhundert die nach ihm benannten Figuren beschrieben. Sie entstehen, wenn man Sinus-Schwingungen rechtwinklig gegeneinander aufträgt. Neben der GUI-Programmierung machen wir also Bekanntschaft mit den Konzepten von Amplitude, Frequenz, Phase und Dämpfung. Unser Programm kann eine Vielzahl statischer und bewegter Bilder verschlungener Pfade darstellen und lädt zum Spielen ein!

Einparktrainer

LOC 176. Zunächst simulieren wir ein Fahrzeug mit Achsschenkellenkung mit Pygame. Das kinematische Modell ist ein Fall für die Analytische Geometrie. Somit winkt hier ein doppelter Lerngewinn und es macht Spaß, das Auto kreuz und quer herumfahren zu lassen! Anschließend verpacken wir das Ganze als einen Trainer für das Rückwärts-Einparken in einen Parklücke. Auch andere Geschicklichkeitstests mit automatischer Kollisionserkennung (collision detection) sind denkbar. Ebenso der Anschluss eines Joysticks. Das Rückwärtseinparken lässt sich automatisieren, viele PKW verfügen über eine Einparkhilfe. Diese ließe sich auch hier programmieren - und danach vielleicht übertragen an ein Mikrocontroller-gesteuertes Modellfahrzeug. Schwieriger ist es, ein Gespann z.B. aus PKW und Wohnwagen rückwärts zu führen. Sicherlich beherrschen nur Profis das Rückwärtsfahren eines LKW mit zweiachsigem Anhänger.

Game of Life

LOC 162. Dieses Muster entwickelt sich aus einem Balken von 8 lebenden Zellen nach 42 Generationen. Wie geht es weiter? Diesen Klassiker sollte jeder Programmierer einmal in Code gegossen haben. Das Game Of Life ist ein unendlicher, bizarrer Kosmos! Wer tiefer in ihn schauen möchte: Siehe hier, hier, hier und hier! Eine leistungsfähige Software für (u.a.) das Game Of Life ist Golly

Bügeleisen

LOC 182. Was geschieht im Inneren eines herkömmlichen Bügeleisens? Wir simulieren die physikalischen Zusammenhänge und lernen die Bedeutung von elektrischer Leistung, Wärmekapazität, Wärmeleitung, Wärmeströmung und Wärmestrahlung kennen. Was ist ein Bimetall-Schalter, eine Hysterese oder ein Zweipunktregler? Die beschreibende Differentialgleichung integrieren wir mit dem Eulerschen Verfahren und stellen den Temperaturverlauf mithilfe von Tkinter grafisch dar. Hört sich etwas wüst an, ist aber halb so schlimm. Ist ja schließlich nur ein Bügeleisen :-)

Sokoban

LOC 217. Ein Klassiker der 80er Jahre. Der fleißige Lagerarbeiter fordert unsere Konzentration: In welcher Reihenfolge muss er vorgehen?

Wir werden Sokoban so programmieren, dass es super easy ist, einen anderen Spielplan (Layout) zu implementieren oder gar einen ganzen Satz davon als "Levels" bereit zu stellen. Da sind eurer Fantasie keine Grenzen gesetzt! Hier kannst du ein StarterSet herunterladen und mit der eigenen Entwicklung beginnen!

Orbit

LOC 213. Von einem hohen Turm wird ein Ball waagerecht nach rechts weggeschleudert. Seine Wurfbahn beschreibt eine Parabel, wenn er zu Boden fällt. Was aber passiert, wenn man dem Ball eine immer größere Anfangsgeschwindigkeit verpasst? Auf einer idealen Erdkugel ohne Luft und Berge wird er immer weiter fliegen, bis er sich schließlich ... im Orbit d.h. auf einer Umlaufbahn um die Erde wiederfindet, also gar nicht mehr zu Boden fällt. Unser Programm zeigt diesen Übergang mit einer Zoom-Funktion, die vom Mausrad angetrieben wird. Das Programm baut auf den Funktionen des Projektes Moonshot auf, was die Simulation von Körpern im Schwerefeld angeht.

Raycasting

LOC 110. Von einer Lampe gehen rundum Lichtstrahlen aus, bis sie auf ein Hindernis stoßen. Mit unserem Raycasting-Programm können wir die Lampe beliebig bewegen und feststellen, welche Teile eines Raums beleuchtet werden und welche dunkel bleiben. Andersherum betrachtet wird so offenbar, welche Teile des Raums von diesem Punkt aus eingesehen werden können und welche nicht. Im Prinzip genauso funktionieren diese animierten Bilder. Klicke mit der Maus auf den gelben Punkt und bewege ihn mit gedrückter Maustaste!

3D-Raycasting

LOC 230. Vom Raycasting des vorigen Projekts ist es nicht mehr weit bis zur Darstellung einer einfachen 3-D-Welt, so wie sie in den Anfangszeiten der 3-D-Spiele z.B. bei Doom zu sehen waren. In unserer Welt können wir beliebig herumfahren und alle Objekte aus jeder Perspektive betrachten - nicht mehr, nicht weniger. Einfache Spielideen lassen sich aber auch damit schon realisieren. Hier ist eure Kreativität gefragt!

Raytracing

LOC 200. Was muss man wohl programmieren, um solch ein Bild zu produzieren? Man nennt es Raytracing. Mehr Details gibt es hier! … und animieren lässt sich das Ganze natürlich auch:

Ray-Tracing für die Unterhaltungsindustrie wird heutzutage mit großem Aufwand betrieben, siehe dieses Video. Während wir alle Pixel einzeln und nacheinander mit Python Basis-Funktionen berechnen, sind uns moderne Grafikkarten zillionenfach überlegen, wie dieses Video eindrücklich zeigt!

Tetris

LOC 205. Der Vater vieler Klötzchenspiele - da ist Übersicht und schnelle Reaktion gefragt. Allerdings auch etwas aufwändiger in der Programmierung. Siehe hier

Corona SIR

LOC 88. "Keep the curve flat!" - Haltet die Kurve flach, damit die Gesundheitssysteme nicht überlastet werden! So hieß es in den Anfangszeiten der Corona-Epidemie. Mathematische Modelle und Computersimulationen können uns helfen, die Dynamik des Infektionsgeschehens zu verstehen.

Etwas Schulmathematik und ein paar Zeilen Python-Code bringen uns erkenntnisreiche Ergebnisse - und wir können viele Varianten durchspielen. Begriffe wie Ansteckungsgefahr, Verdopplungszeit, R0 und Herdenimmunität werden greifbar. Nebenbei lernen wir etwas über die numerische Lösung von (gekoppelten) Differentialgleichungen sowie über die famose Matplotlib zur grafischen Darstellung. Keine Sorge, es wird nicht zu schwierig; alles wird haarklein besprochen. Wer sich schon ein wenig Appetit holen möchte, schaue sich dieses Video an, von ihm habe ich nämlich die Anregung (und den Namen) für dieses Projekt. Danke an Edmund Weitz!

Gesichtserkennung

LOC 35. Eigentlich sollte man von Gesichtserfassung sprechen, denn es werden hier keine Personen mit ihren Gesichtern assoziiert. Es geht lediglich darum, Gesichter als solche im Foto aufzuspüren.

Mit Python ist dies sehr einfach: Die OpenCV Anbindung serviert das Viola-Jones-Verfahren gebrauchsfertig. (Ich habe die Gesichter meiner indischen Kollegen hier aus Datenschutzgründen unkenntlich gemacht).

Original und Fälschung

LOC 75. Wer erkennt die 10 Unterschiede in den folgenden beiden Bildern?

Einem Computer sollte diese Aufgabe eigentlich nicht schwer fallen. Wäre das nicht eine interessante Programmieraufgabe? Wir lösen sie mithilfe von NumPy und anderen Paketen.

Boids

LOC 317. Dieser Klassiker im Bereich autonomer Agenten demonstriert, wie die Schwarmbildung bei Vögeln und Fischen durch einfache Verhaltensmuster der einzelnen Tiere erklärt werden kann. Wir programmieren das Zusammenspiel der Kräfte und erleben die sich daraus ergebenden d.h. emergenten Strukturen.

Navigation

LOC 180. Wie schafft es ein Navi, uns den nächsten Weg zum Ziel zu zeigen? Dazu müssen wir das Straßennetz auf Datenstrukturen abbilden, in denen dann Algorithmen den optimalen Weg finden. Wir programmieren den Dijkstra- und den A*-Algorithmus als wichtige Vertreter ihrer Zunft. Dann wir können die Programme auf das Londoner U-Bahn-Netz loslassen, um uns den schnellsten Weg z.B. von Upminster nach Kenton raussuchen zu lassen.

Sudoku

LOC 449. Diese Sorte Rätsel verlangt von uns mitunter eine große Konzentrationsfähigkeit und einen scharfen Bick. Aber halt, ist nicht ein Computer besser geeignet, die Lösung ausknobeln? Eigentlich ja, aber wie muss man ihn programmieren? Die Zauberworte heißen Rekursion und Backtracking. Diese Programmierkonzepte werden wir mit Python realisieren. Außerdem bietet sich hier an, das unittest Framework einzusetzen, um jederzeit prüfen zu können, dass unser Programm als Ganzes richtig funktioniert. Wenn wir uns sicher fühlen, setzen wir zum Abschluss noch mit Tkinter eine grafische Oberfläche darauf.

Blattsalat

LOC 1129. Wie schafft es ein Computer, eine Menge von Blättern zu sortieren, die zu verschiedenen Pflanzen gehören - ohne, dass man ihm vorgibt, von wieviel Pflanzenarten genau sie stammen? Wir programmieren zwei berühmte Machine-Learning-Algorithmen: K-Means und K-Nearest-Neighbor. Mehr Info gibt's hier!

Particle Life

LOC 140. Wem dieses Video gefällt, so wie es mich beeindruckt hat, die oder der sollte sich einmal selbst in die Welt der Selbstorganisation und Emergenz hineinprogrammieren. Auch wenn mit Python die Performance des Videos nicht erreicht werden kann, so macht es doch Spaß, mit den Parametern zu spielen, vor allem mit der Attraktionsmatrix :-)

Perzeptron

LOC 90. Angenommen, bei einer Pandemie sterben viele Menschen. Zwar ist bekannt, wie man die Erkrankung stoppen kann, doch es fehlen Medikamente. Eine statistische Untersuchung zeigt nun, dass man allein aus dem Alter und der Höhe des Fiebers bestimmen kann, ob ein Patient von allein wieder gesund wird oder nicht, wer also das Medikament wirklich braucht:

Das Perzeptron ist ein mathematisches Modell, das natürliche Nervenzellen nachbildet, die sogenannten Neuronen. Im Computer programmiert, kann man es trainieren, sodass es lernt, Eingangssignale zu unterscheiden. Wir trainieren ein Perzeptron mit den beobachteten Krankheitsverläufen. Danach kann es für neue Patienten eine gute Vorhersage treffen, um so mit den verfügbaren Medikamenten möglichst viele von ihnen zu retten. Die blaue Linie zeigt, wo das trainierte Perzeptron die (korrekte) Unterscheidung trifft:

In praktischen Anwendungen wird man nicht nur zwei Messgrößen, sondern einige Dutzend davon erfassen. Dann erkennt man als Mensch nicht mehr so leicht die Zusammenhänge. Dann reicht auch nicht mehr 1 Neuron, sondern man schaltet hunderte von ihnen zusammen. Perzeptrons sind die Vorläufer derjenigen künstlichen Neuronen, die heute in künstlichen neuronalen Netzen wie ChatGPT so erstaunliche Leistungen vollbringen.

Bézier-Kurven

LOC 125: Wer sich von diesem wunderbaren Video inspirieren lässt, möchte sicher auch gerne einmal solche Kurven programmieren.

Wir lernen, wie man mit Python und tkinter interaktive Grafiken programmiert, eine eigene Vektor-Klasse implementiert - und natürlich, wie man quadratische und kubische Bézier-Kurven auf Vektor-Basis berechnet.

Bézier-Kurven sind auch die perfekte Technik, um Schriftarten (Typefaces, Fonts) im Computer so festzulegen, dass man die einzelnen Zeichen auf beliebige Größen skalieren kann, ohne dass die Qualität bzw. Schärfe leidet. Das folgende Bild demonstriert, wie man aus nur 2 kubischen Bézier-Kurven die rechte Kontur des Buchstabens 'g' aus der Schriftart (Typeface) Comic Sans konstruieren kann.

Dass wir hier nur Grundlagen bearbeiten, sieht man an diesem Video eines echten Experten. Das mag abschrecken, aber so kompliziert kann die Praxis sein!

Kleingeld

LOC 143: Wieviel Geld liegt hier auf dem Tisch? Ganz ohne KI liefert unser Programm die Antwort: 7 Euro und 76 Cent. Die aufwändigen Bildoperationen übernimmt das Scikit-Image Paket. Darum bleibt unser Programm überschaubar. Hier kannst du ein StarterSet herunterladen und mit der eigenen Entwicklung beginnen!

Verfolger

LOC 105. Wenn man im Computer Wesen erschafft, die aufgrund ihrer eigenen Wahrnehmung selbständiges Verhalten zeigen, so nennt man sie Autonome Agenten. Wir programmieren den Verfolger als Grundlage für vielfältige Anwendungen. Das Beispiel habe ich Daniel Shiffman’s Buch Nature of Code entnommen, zu dem auch viele YouTube-Videos existieren. Das weiße Dreieck (der Agent) verfolgt selbständig den grünen Punkt, den ich mit der Maus gesteuert habe.

Sturz in die Parabel

LOC 130. Hier stand dieses und dieses Video Pate: Bälle fallen in ein offenes Gefäß, das die Form einer Parabel hat. Stoßen sie auf die Gefäßwand, werden sie reflektiert, wobei sie ihre Richtung ändern, ihre Geschwindigkeit aber beibehalten. Lässt man viele Bälle von benachbarten Positionen aus in die Parabel fallen, bleiben sie zunächst nahe beieinander, doch entfernen sich im Laufe der Zeit immer weiter voneinander. Obiges GIF zeigt 100 farbige Bälle. Aber auch das zweite Video mit 5000 Bällen lässt sich in Python überzeugend reproduzieren, von Performance-Schwächen keine Spur! Die Reflexion an gekrümmten Linien zu berechnen erfordert etwas analytische Geometrie, ist aber noch überschaubar...

Flackerwort

LOC 136. Wer nennt als Erster das (zufällig gewählte) Wort, das sich langsam aus dem Flackern schält? Für dieses Projekt braucht es keine Mathematik! Den Zeichensatz findet man im Internet und eine Liste mit 4-Buchstaben-Wörtern kann man selbst herstellen. Je länger die Liste, desto schwieriger wird's mit dem Raten! Ob ein gut trainiertes neuronales Netz hier schneller schaltet als der Mensch? Ich hab's noch nicht ausprobiert...

Modelleisenbahn

LOC 740. Mit vergleichbar geringem Aufwand gelingt es mit Python und tkinter, eine einfache Eisenbahn-Simulation zu programmieren. Hier sieht man 3 Züge, die auf verschlungenen Gleisen fahren und sich dabei ständig in die Quere kommen. Dauernd werden die Weichen umgeschaltet, was einen chaotischen Verlauf provoziert. Das ist allerdings beabsichtigt, um Schwächen der Simulation aufzudecken. Auch wenn die Simulation - vor allem die Grafik - zu komplex für eine Python-AG ist, so kann man doch auf dem Code aufbauen und komfortabel seine eigenen Ideen von Gleislaufplänen, Zugsteuerungen, Signalisierungen, Fahrplänen und Sicherungsvorkehrungen ausprobieren. Siehe auch hier

Noch mehr...

findet sich auf meiner Homepage unter "Projekte".