Willkommen beim Python-Kurs in Tübingen!

Mein Name ist Martin Reiche und ich bin euer Kursleiter. Ihr könnt mich zu allen Fragen rund um den Kurs per E-Mail erreichen unter ed.xmg|ykspeut#ed.xmg|ykspeut

Python ist eine leistungsfähige, vielseitige und seit langem populäre Programmiersprache. Glaubt man diesem Video, ist Python aktuell die beliebteste Sprache überhaupt. Ihre Grundlagen sind schnell erlernt. Damit eignet sich Python ideal zum Einstieg sowohl für angehende Informatiker als auch für Gelegenheitsprogrammierer.
Nach der Teilnahme des Kurses - und ggf. etwas Heimarbeit - werdet ihr in der Lage sein, Programme mit grafischer Benutzeroberfläche sowie einfache Spiele zu programmieren.

Der Kurs richtet sich an alle, die sich mit der Programmierung im Allgemeinen oder der Sprache Python im Besonderen vertraut machen wollen. Für Schüler_innen, die Interesse an den MINT-Fächern haben, ist Python eine sehr lohnende Investition in die Zukunft, egal in welche Richtung sie sich entwickeln werden. Programmiert wird überall. (MINT steht für Mathematik, Informatik, Naturwissenschaft, Technik)

Neben den Python-Standardpaketen benutzen wir u.a. Tkinter und Pygame. Als Programmierumgebung kommt Thonny zum Einsatz. Alle diese Elemente können frei aus dem Netz geladen und benutzt werden.

Bitte bringt einen USB-Stick mit, damit ihr die während des Unterrichts erstellten Programme auch mit nach Hause nehmen könnt!

Projekte

Nach einigen grundlegenden Übungen in den ersten Stunden wollen wir uns an Projekte heran wagen.
Hier könnt ihr sehen, was ich vorbereitet habe. Aber ACHTUNG: Wegen der zeitlichen Beschränkung werden wir nur einige dieser Projekte bearbeiten können! Natürlich dürft ihr bestimmen, welches.

KFZ-Kennzeichen
Wir suchen in einem Datenbestand. Bitte ladet diese Datei herunter!

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

Benzin
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.

BenzinKlein.PNG

Mit der Verwendung von tkinter lernen wir die Programmierung von grafischen Benutzeroberflächen: Fenster, Knöpfe, Textuelle Ein-und Ausgabe, Layout.

Bahnhofsuhr

UhrKlein.PNG

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, fügt Zeitgeber, Wecker oder Stoppuhren hinzu, schaltet Zeitzonen um etc.

Neues von der Platte

DateisucheKlein.PNG

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

Snake

SnakeKlein.PNG

Die Schlange (grün) frißt 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.

Katzenleben

KatzenlebenKlein.PNG

(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, Wolknäuel, Schmetterlinge) einsammeln. Die Sprites gibt's hier.

Game of Life

GofWikidotKlein.PNG

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. Siehe hier.
Das Game Of Life ist ein seltsamer 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

Mandelbrot-Menge
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.

Mandelbrot-2.png

Memory

MemoryKlein.PNG

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 Zügen 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, wird das jeweils zugehörige Bild gezeigt und 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.
Die Schilder kann man hier herunterladen

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

SokobanKlein.png

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!

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

TetrisKlein.PNG

Corona SIR
"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 Computersituationen können uns helfen, die Dynamik des Infektionsgeschehens zu verstehen.

CoronaSIR-klein.PNG

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 Matpoltlib 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
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.

ErfassteGesichterKlein.png

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
Wer erkennt die 10 Unterschiede in den folgenden beiden Bildern?

BunteHäuser1klein.PNG
BunteHäuser2klein.PNG

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
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.

BoidsKlein.png

Navigation
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.

TubeKlein.png

Internet-Ressourcen

Python:

tkinter: http://effbot.org/tkinterbook/
Thonny: http://thonny.org/

Literatur

Python 3
von Michael Weigend

  • Einführung in alle Sprachgrundlagen: Klassen, Objekte, Vererbung, Dictionaries
  • Benutzungsoberflächen und Multimediaanwendungen mit PyQt, Datenbanken, XML und Internet-Programmierung
  • Wissenschaftliches Rechnen mit NumPy, parallele Verarbeitung großer Datenmengen, Datenvisualisierung mit Matplotlib

Einstieg in Python: Programmieren lernen für Anfänger…
von Thomas Theis

100% Python für Einsteiger:

  • Schritt für Schritt eigene Programme entwickeln
  • Mit vielen Beispielen und Übungsaufgaben
  • GUI, OOP, Datenbank- und Internetanwendungen u.v.m.

Einführung in Python 3: Für Ein- und Umsteiger
von Bernd Klein

Als idealer Einstieg für Programmieranfänger wie für Umsteiger behandelt dieses Buch alle grundlegenden Sprachelemente von Python 3. Aber auch Python-Kennern bietet das Buch viele weiterführende Themen wie Systemprogrammierung, Threads, Forks, Ausnahmehandlungen und Modultests.

Routineaufgaben mit Python automatisieren: Praktische Programmierlösungen für Einsteiger
von Al Sweigart

Dieses Buch liefert nach einer Einführung in Python allgemein eine Menge praktischer Anwendungen. So zeigt er, wie man Python-Programme entwickelt, die

  • Dateien auf dem Rechner suchen, lesen, nach Mustern durchforsten, auswerten, umformatieren, …
  • Dateien verschiedener Formate wie Microsoft Word & Excel, HTML, PDF,ZIP, Json, CSV lesen, modifizieren und erzeugen
  • Mails und SMS verschicken
  • JPEG Bilder bearbeiten
  • Aufgaben selbständig nach einem Zeitplan abarbeiten (z.B. stündlich Daten aus einer Website extrahieren)

Siehe auch diese Website. Eine kostenlose Kopie (in Englisch) habe ich hier heruntergeladen.

Konkrete Mathematik (nicht nur) für Informatiker
von Edmund Weitz

Für alle, denen die Mathematik zu trocken und unanschaulich daher kommt: Das etwas andere Mathe-Lehrbuch: Mathematik, die Informatiker (und nicht nur die!) wirklich brauchen, und die direkt am Computer umgesetzt wird in Form von kleinen Algorithmen, numerischen "Experimenten" und interaktiven Visualisierungen. Man lernt, wie man dem Computer das Rechnen überlässt, während man selbst den mathematischen Überblick behält, typische Fehler vermeidet und die Ergebnisse richtig interpretiert. (Und nebenbei lernt man noch die beliebte Programmiersprache Python sowie den Umgang mit einem Computeralgebrasystem.)

Eine kostenlose PDF-Version kann man hier herunterladen. Siehe auch Edmunds fantastischen YouTube-Kanal!

Übungen

Zahlenraten
a) Erweitere das Programm um einen Zähler für die Tipps, die der Benutzer benötigt und gib den Zählerstand am Ende aus.
b) Lege einen maximale Anzahl N von Tipps fest, nach deren Erreichen das Programm abbricht mit der Meldung: "Schade, du hast die Zahl x in N Versuchen nicht erraten!"

Bruchrechnen
Addiere zwei Brüche, deren Zähler und Nenner der Benutzer eingibt. Verwende den euklidischen Algorithmus, um den sich ergebenden Bruch zu kürzen. Beispielhafte Anzeige auf der Konsole:

Addition zweier Brüche (Bitte nur ganze Zahlen eingeben!)
Zähler der ersten Zahl: 12
Nenner der ersten Zahl: 18
Zähler der zweiten Zahl: 21
Nenner der zweiten Zahl: 14
12/18 + 21/14 = 13/6 = 2 1/6

Tipp: a/b + c/d = (a*d+c*b)/(b*d)

Babylonisches Wurzelziehen
Erweitere das Programm aus dem Kurs so, dass es mit allen Eingaben sinnvoll umgeht! In seiner einfachsten Version haben wir nur mit Zahlen größer eins gerechnet. Was sind die Sonderfälle und ungültige Eingaben?
Übrigens: Mit dem Befehl "exit(0)" kann man einen Programmlauf jederzeit beenden!

Benzinrechner
a) Füge dem Programm noch Felder für den Benzinpreis [EUR/Liter] sowie Rechnungsbetrag [EUR] hinzu. Jetzt soll es z.B. rechnen können: Wievel muss ich an der Tanke mindestens bezahlen, wenn ich 788 km bei einem Verbrauch von 6,1 l/100km fahren will und das Benzin 1,55 EUR/l kostet?
b) Stricke das Programm um für Autos mit batterie-elektrischem Antrieb! Jetzt kommen kW und kWh etc. ins Spiel. Auch kann man Ladeleistungen und Ladezeiten mit einbeziehen und fragen: Wie lange muss ich hier tanken, damit ich wieder 200 km fahren kann?

Zahlenleser
Mit den vier Python-Befehlen:

import simpleaudio as sa
wave_obj = sa.WaveObject.from_wave_file('eins.wav')
play_obj = wave_obj.play()
play_obj.wait_done()

kann man die Sound-Datei 'eins.wav' abspielen.
Schreibe ein Programm, welches eine Ziffernfolge, z.B. 135724680, entgegen nimmt und die Ziffern nacheinander 'ausspricht'. Zu diesem Zweck fertige dir z.B. mit Audacity entsprechende Sound-Dateien mit deiner Stimme an, für jede Ziffer eine.
Tipps:

  1. Ein Python Dictionary kann dir helfen!
  2. Beginne die Programmentwicklung ohne Töne und drucke für jede Ziffer das Zahlwort aus.
  3. Anschließend kannst du den Sound einbinden, die Logik funkioniert ja schon.

Wanderpunkt
Diesen Projektnamen habe ich mir ausgedacht, um das überraschende Ergebnis nicht vorweg zu nehmen.
Die Aufgabe ist einfach: Gegeben seien drei feste Punkte in der Ebene, welche typischerweise ein Dreieck definieren, also nicht auf einer Geraden liegen. Nun wählen wir einen beliebigen Punkt innerhalb oder außerhalb des Dreiecks als Startposition des Wanderpunktes. Eine einzige Regel bestimmt nun die Folge der Positionen des Wanderpunktes:

  • Wähle zufällig einen der drei festen Punkte.
  • Die neue Position liegt auf der Hälfte der Wegstrecke des festen Punktes und der aktuellen Position.
  • Fahre fort mit dem ersten Schnitt!

Schreibe ein Programm, mit dessen Hilfe man zunächst die drei festen Punkte in einem leeren Fenster durch Anklicken markiert und dann die Startposition des Wanderpunktes. Danach berechnet das Programm 50.000 Folgepunkte und zeichnet diese in das Fenster. Finde heraus, wie man die entstehende Figur nennt!