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

Damit wir im Vorfeld und während des Kurses leicht Informationen austauschen können, habe ich eine Telegram-Gruppe mit dem folgenden Link eingerichtet: https://t.me/joinchat/F-DG9MIzX8MTpq26.
Wenn ihr Telegram auf eurem Smartphone installiert habt, könnt ihr dort der Gruppe "Python Tübingen" beitreten.

Einführung

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!

Der vorstehende Satz macht natürlich nur Sinn, falls der Unterricht in den Räumen der VHS stattfindet. Falls wir uns online treffen, bitte ich euch um folgende Vorbereitungen:

1) Installiert auf eurem PC / Laptop sowohl Zoom als auch Thonny
2) Während des Unterrichts solltet ihr zwei Bildschirminhalte sehen können:

  • Die Präsentation in Zoom (Würde in der VHS den Beamer steuern)
  • Euer Thonny-Fenster

Falls ihr nicht über 2 Bildschirme verfügt (Wer hat das schon?), solltet ihr klären, wie man schnell zwischen diesen Fenstern hin- und herschaltet. Unter Windows ist dies die Tastenkombination Alt+Tab, bei MacOs und Linux sieht das anders aus. Bitte übt diese schnelle Umschaltung, damit alles glatt läuft.
3) Schaut nach, wo sich auf eurer Tastatur die für Python wichtigen Zeichen befinden:

  • ' " Einfache und doppelte Anführungszeichen
  • ( ) Runde Klammern
  • [ ] Eckige Klammern
  • { } Geschweifte Klammern
  • \ Rückwärts-Schrägstrich (backslash, seltener benötigt)
  • Tabulator zur Einrückung

4) Haltet Papier und Schreiber bereit!

Projekte

Nach einigen grundlegenden Übungen in den ersten Stunden wollen wir uns an Projekte heran wagen.
Weiter unten 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.
Im Rahmen dieser Projekte kommen die verschiedenen Python-Sprachelemente zum Einsatz und wir lernen, wie man sich grundsätzlich einer Programmieraufgabe stellt.

Die Bearbeitung eines Projektes während der Unterrichtsstunden sieht in etwa so aus:

  • Klärung der Aufgabe: Was muss das Programm leisten?
  • Klärung des Lösungsansatzes: Was sind die Kernideen für das Programm-Design?
  • Klärung des weiteren Ablaufs: In welchen Schritten arbeiten wir an der Lösung?
  • Die Implementierung der Lösung für die erste Teilproblematik wird vom Kursleiter erläutert, von ihm schrittweise eingegeben und getestet und ist mittels Beamer für alle sichtbar.
  • Nach wenigen Minuten hat jede Teilnehmerin für sich ein lauffähiges Python-Programm auf ihrem PC eingetippt. Sie kann der vorgegebenen Lösung folgen, muss aber nicht.
  • Schrittweise Erweiterung der Lösung bis zu geplanten Vollausabau. Alle Zwischenlösungen stellen lauffähige Programme dar und werden separat gespeichert. So kann man im Problemfall jederzeit zurück zur letzten Stufe gehen.

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 lässt 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) 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.

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

Proteinsynthese

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.

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

Rekursive Programmierung

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.

TreeKlein.png

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.

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

Sudoku

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 Zaubeworte 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 funktionert.
Wenn wir uns sicher fühlen, setzen wir zum Abschluss noch mit Tkinter eine grafische Oberfläche darauf.

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

siehe hier