sum
.Bitte anschauen: Begrüßungsvideo
In vorigen Lektionen hast du bereits Listen kennengelernt. Heute wirst du neben einigen Funktionen für Listen insbesondere list comprehension kennenlernen, eine elegante Methode zur Definition von Listen. Die Vermittlung dieser Inhalte wird vor allem durch Lern-Videos (inklusive kleiner Aufgaben) geschehen.
Danach gibt es als Lernkontrolle einige Aufgaben zum Text von Goethes Faust - dieser Text wird dir als Liste zur Verfügung gestellt. Beispielsweise wirst du herausfinden, wie viele Wörter welcher Länge in Goethes Faust vorkommen und wie man dieses Ergebnis in einem Säulendiagramm graphisch darstellen kann.
Außerdem wirst du herausfinden, dass es im gesamten Faust nur 23 Palindrome (= Wörter, die von vorne wie von hinten gelesen vorkommen) gibt.
Wir nehmen an, dass du
Nützlich, aber nicht zwingend erforderlich ist es, wenn du mit Visual Studio Code (= VS Code) vertraut bist:
Ctrl+F5
).
Erstelle ein neues Verzeichnis namens list-comprehension
für deine heutigen Python-Programme.
Öffne dieses Verzeichnis mit VS Code und öffne darin eine neue, leere Datei mit dem Namen faust-analyse.py
. Kopiere den folgenden Python-Code in diese Datei und speichere sie ab. Hinweis: Durch Anklicken des “Clipboard-Symbols” rechts oben im Fenster um den Code kannst du den Python-Code direkt in die Zwischenablage kopieren.
eingabeDatei = open("faust-1-und-2.txt", encoding='utf-8') # Die Angabe des Encodings ist unter Windows nötig. wortliste = eingabeDatei.read().splitlines() eingabeDatei.close() print("Berühmte Passage:") print(wortliste[2454:2470])
Die folgende Datei enthält alle Wörter aus Goethes Faust (Teil I und Teil II) in der richtigen Reihenfolge. Speichere sie in deinem neu erstellten Verzeichnis ab, indem du sie mit der rechten Maustaste anklickst und “Speichern unter”/“Save as” auswählst.
Führe das Python-Programm aus (per Ctrl-F5
in VS Code) - wenn du alles richtig gemacht hast, wird eine berühmte Passage aus Faust (als Liste von Strings) ausgegeben.
Falls es wider Erwarten nicht mit dem Einlesen der Wörter aus der Datei klappt:
Im folgenden Python-Programm ist die faustsche Wörterliste explizit in der ersten (sehr langen) Zeile angegeben: faust-analyse-wortliste-explizit.py
Speichere diese Datei (per Anklicken mit der rechten Maustaste) ab und führe sie aus. Arbeite im Folgenden mit dem Python-Programm faust-analyse-wortliste-explizit.py
statt mit faust-analyse.py
.
Alle folgenden Aufgaben zur Analyse des Faust-Textes starten mit dem Programm faust-analyse.py
als Grundgerüst.
Ergänze das Programm faust-analyse.py
so (bei den ersten drei Teilaufgaben genügt jeweils eine neue Zeile am Ende des Python-Programms), dass
Wenn du willst, kannst du das Programm unter einem beliebigen Namen deiner Wahl (etwa aufgabe-1.py
) abspeichern.
Schau nun das hier verlinkte Erklärvideo an.
Darin werden die fünf Listen-Funktionen1) len
, max
, min
, sorted
, reversed
und die drei Listen-Methoden append
, count
, index
erklärt; das Video endet mit einer Übungsaufgabe dazu.
Die Bezeichnung “list comprehension” ist historisch bedingt und nicht besonders glücklich gewählt. Es geht darum, neue Listen mit möglichst leicht verständlicher Syntax zu definieren.
List comprehension wird in dem hier verlinkten Video erklärt.2)
Erklärt werden “list comprehension-Ausdrücke” wie etwa [i**2 for i in range(1, 101)]
oder [i**2 for i in range(1, 101) if i**2 <= 1000]
als Vereinfachungen des sukzessiven Listenaufbaus mit for
-Schleifen (mit Bedingung). Diese Notation ähnelt der mathematischen “Set-builder notation” $\{x^2 \mid x \in \{1, 2, 3, \dots, 100\} \text{ mit } x^2 \leq 100\}$.
Ergänze das Programm faust-analyse.py
(aus Aufgabe 0: Vorbereitung) so, dass
Hexe
in Goethes Faust vorkommt; Hexe
zum ersten Mal auftaucht;Hexe
ausgegeben wird; dieser “Kontext” soll als Liste von 21 Wörtern um dieses Wort herum mit dem Wort Hexe
in der Mitte ausgegeben werden.Hexe
erscheint.
Starte wieder mit dem Programm faust-analyse.py
(aus Aufgabe 0: Vorbereitung).
wortlaengen
, deren Einträge die Längen der Wörter aus Goethes Faust sind: Der nullte Eintrag ist die Länge des nullten Worts, der erste Eintrag die Länge des zweiten Worts usw.maxLaenge
und gib diese Variable aus.anzahlBeiLaenge
, deren Einträge angeben, wie viele Wörter einer gegebenen Länge vorkommen: Der nullte Eintrag ist Null (= die Anzahl aller Wörter der Länge Null), der erste Eintrag ist die Anzahl aller Wörter der Länge eins, der zweite Eintrag die Anzahl aller Wörter der Länge zwei usw.Gib diese Liste aus.
Mit der Python-Bibliotheken matplotlib
(für “Library for mathematical plots) ist es einfach, das Ergebnis der Text-Analyse in Aufgabe 3 graphisch als Säulendiagramm darzustellen: Kopiere den folgenden Code-Block ans Ende deines Programms und führe das Programm aus (falls dies nicht funktioniert, musst du vermutlich die Bibliothek matplotlib
installieren, siehe die “gelbe” Glühbirnen-Box unter der folgenden Code-Box).
from matplotlib import pyplot as plt def zeichneSaeulendiagramm(xWerte, yWerte, titel, xBeschriftung, yBeschriftung): # xWerte: Liste der Werte auf der horizontalen Achse # yWerte: Liste der zugehörigen Funktionswerte # titel: Titel der Graphik # xBeschriftung: Text unter der horizontalen Achse # yBeschriftung: Text links der vertikalen Achse plt.figure("Säulendiagramm-Fenster") plt.title(titel) plt.xlabel(xBeschriftung) plt.ylabel(yBeschriftung) plt.bar(xWerte, yWerte, color='blue') plt.xticks(xWerte, xWerte, rotation='horizontal') plt.tight_layout() plt.show() zeichneSaeulendiagramm(range(maxLaenge + 1), anzahlBeiLaenge, 'Anzahl der Wörter gegebener Länge', 'Wortlänge', 'Anzahl der Wörter')
Eventuell musst du die Bibliothek matplotlib
installieren. Dies geht (unter Windows) mit dem Programm “Befehlszeile”/“Command prompt” wie folgt: Gib die beiden folgenden Zeilen dort ein, jeweils gefolgt von Return
.
python -m pip install -U pip python -m pip install -U matplotlib
Der erste Befehl installiert pip
bzw. führt ein Upgrade davon durch. Die eigentliche Installation der Bibliothek ist dann der zweite Befehl.
Hier stellt sich etwa die “Forschungsfrage”: Kann man einen Autor (bzw. eine Sprache) anhand der Buchstabenhäufigkeiten erkennen?
Palindrome sind Wörter (und manchmal auch Sätze), die von vorne wie von hinten gelesen dasselbe Wort liefern, vgl. https://de.wikipedia.org/wiki/Palindrom.
Starte wieder mit dem Programm faust-analyse.py
.
Die Liste wortliste
enthält viele Wörter mehrfach; beispielsweise taucht das Wort “aber” mehrfach auf - überdies taucht es großgeschrieben als “Aber” auf.
Ergänze das Programm am Ende um die Code-Zeile
wortlisteOhneWiederholungen = list({x.lower() for x in wortliste})
Die Liste wortlisteOhneWiederholungen
enthält dann alle Wörter aus Goethes Faust in Kleinschreibung ohne Wiederholungen.3)
Ergänze das Programm so, dass
Siehe Bonusmaterial.
sum
.{x.lower() for x in wortliste}
liefert die Menge aller Wörter (wobei Großbuchstaben durch Kleinbuchstaben ersetzt wurden). Diese Menge wird mit dem Befehl list(…)
in eine Liste verwandelt.