From 656a2e0ff8a8e7b7908728d63e901abeeb3643a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20J=C3=A4schke?= <jaeschke@l3s.de> Date: Fri, 9 Mar 2018 09:59:55 +0100 Subject: [PATCH] +fertig --- notebooks/seminar09.ipynb | 94 ++++++++++++++++++++++++++++++++------- 1 file changed, 78 insertions(+), 16 deletions(-) diff --git a/notebooks/seminar09.ipynb b/notebooks/seminar09.ipynb index 71afa76..7470755 100644 --- a/notebooks/seminar09.ipynb +++ b/notebooks/seminar09.ipynb @@ -10,7 +10,33 @@ "\n", "In dieser Rubrik, die immer am Anfang eines Kapitels steht, möchte ich Ihnen zeigen, wofür ich Python nutze und warum ich es mag. Sie werden vielleicht noch nicht verstehen, was ich genau mache, aber Sie sehen damit schon einmal die Möglichkeiten von Python und können später darauf zurückgreifen. Da dies auch ein Exkurs ist, können Sie diese Rubrik gerne auch erst einmal überspringen.\n", "\n", - "Text-Statistik ist ganz einfach machbar - mit dem Wissen aus diesem Kapitel können wir z.B. n-Gramme berechnen. Hier ein Beispiel, welches automatisch eine Webseite herunterlädt und die häufigsten 6-Gramme berechnet. " + "Das [Modul os](https://docs.python.org/3/library/os.html) stellt Funktionen bereit, um Funktionalitäten des Betriebssystems zu nutzen. Beispielsweise können wir damit Verzeichnis-Inhalte auflisten, durch Verzeichnisse navigieren, Informationen zu Dateien bekommen und Dateieigenschaften verändern. Das folgende Programm gibt eine Liste aller Jupyter-Notebooks im aktuellen Verzeichnis zusammen mit der Dateigröße aus und berechnet die Gesamtgröße der Dateien:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# Tabellenkopf ausgeben\n", + "print(\"Bytes\\tName\")\n", + "print(\"--------------------------------------------------------------\")\n", + "\n", + "# Gesamtgröße in Bytes\n", + "bytes_sum = 0\n", + "\n", + "# Inhalt des aktuellen Verzeichnisses durchlaufen\n", + "for entry in os.scandir():\n", + " if entry.is_file() and entry.name.endswith(\".ipynb\"):\n", + " size = entry.stat().st_size\n", + " bytes_sum +=size\n", + " print(\"{:5d}\".format(size), entry.name, sep='\\t')\n", + " \n", + "print(\"--------------------------------------------------------------\")\n", + "print(bytes_sum, \"bytes =\", bytes_sum/1000, \"kilobytes =\", bytes_sum/1000000, \"Megabytes\")" ] }, { @@ -38,10 +64,10 @@ "source": [ "fin = open('top10000de.txt', encoding=\"latin1\")\n", "# Hinweis: der Parameter encoding gibt an, in welcher Zeichenkodierung\n", - "# die Datei verfasst ist. I.A. sollten heute Datein in Unicode verwendet\n", - "# werden, bei diesen ist in Python3 diese Angabe nicht notwendig.\n", - "# Leider ist die Datei vom Wortschatz-Projekt aber in Latin1-Kodierung,\n", - "# so dass wir dies Python mitteilen müssen." + "# die Datei verfasst ist. I.A. sollten Dateien heute in Unicode codiert\n", + "# sein, bei diesen ist in Python3 diese Angabe nicht notwendig.\n", + "# Leider ist die Datei vom Wortschatz-Projekt aber noch in der\n", + "# Latin1-Kodierung, so dass wir dies Python mitteilen müssen." ] }, { @@ -115,6 +141,17 @@ " print(word)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Diese Schleife können Sie leicht nutzen, um nach Wörtern mit bestimmten Eigenschaften zu suchen. Gibt es im Deutschen Wörtern, die auf \"gry\" enden? Oder zumindest auf \"ry\"?\n", + "\n", + "\n", + "\n", + "[Words that end in GRY](https://xkcd.com/169/), Randall Munroe" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -184,7 +221,8 @@ "metadata": {}, "outputs": [], "source": [ - "# Implementieren Sie hier Ihr Programm" + "# Implementieren Sie hier Ihr Programm\n", + "\n" ] }, { @@ -212,7 +250,7 @@ "source": [ "*Hinweis: mit der Methode `lower` können Sie eine Zeichenkette in Kleinbuchstaben umwandeln. `word.lower()` enthält also die gleichen Buchstaben wie `word`, nur halt als Kleinbuchstaben*\n", "\n", - "Verändern Sie Ihr Programm von Aufgabe 2, so dass Sie zunächst den Nutzer bitten, die verbotenen Buchstaben einzugeben und dann drucken Sie die Anzahl der Wörter aus, die keine der Buchstaben enthalten." + "Verändern Sie Ihr Programm von Aufgabe 2, so dass Sie zunächst die Nutzerin bitten, die verbotenen Buchstaben einzugeben und dann drucken Sie die Anzahl der Wörter aus, die keine der Buchstaben enthalten." ] }, { @@ -308,7 +346,7 @@ "\n", "#### Aufgabe 6\n", "\n", - "Schreiben Sie eine Funktion `is_abecedarian` die `True` zurückgiobt, wenn die Buchstaben in einem Wort in alphabetischer Reihenfolge auftauchen (doppelte Buchstaben sind erlaubt). " + "Schreiben Sie eine Funktion `is_abecedarian` die `True` zurückgibt, wenn die Buchstaben in einem Wort in alphabetischer Reihenfolge auftauchen (doppelte Buchstaben sind erlaubt). " ] }, { @@ -341,13 +379,19 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "*(Das längst Wort mit dieser Eigenschaft in der Liste ist `beginnt`.)*" + "*(Das längste Wort mit dieser Eigenschaft in der Liste ist `beginnt`.)*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ + "\n", + "\n", + "[State Word Map](https://xkcd.com/1845/), Randall Munroe\n", + "\n", + "Die Wortliste erlaubt uns viele interessante Fragestellungen zu beantworten. Welches ist beispielsweise das längste Wort in der Wortliste? [Wikipedia zu den längsten Wörtern im Deutschen](https://en.wikipedia.org/wiki/Longest_words#German)\n", + "\n", "### 9.3 Suche\n", "\n", "Alle Beispiele im vorherigen Abschnitt haben eines gemeinsam: sie können mit dem Suchmuster gelöst werden, welches wir in [Abschnitt 8.6](seminar08.ipynb#8.6-Suche) kennengelernt haben. Das einfachste Beispiel ist:" @@ -508,10 +552,8 @@ ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ "Eine weitere Option ist eine `while`-Schleife:" ] @@ -539,9 +581,9 @@ "\n", "Wenn das nächste Zeichen (alphabetisch) kleiner als das aktuelle Zeichen ist, dann haben wir eine Verletzung der alphabetischen Reihenfolge entdeckt und geben `False` zurück.\n", "\n", - "Wenn wir das Ende der Schleife erreichen, ohne eine solche Verletzung zu finden, dann hat das Wort unseren test bestanden. Überlegen Sie sich den Ablauf für das Wort \"Beginn\", um sich von der Richtigkeit der Schleife zu überzeugen. Die Länge des Wortes ist 6, so dass `i` beim letzten Schleifendurchlauf den Wert 4 hat, was der Index des vorletzten Zeichens ist. In der letzten Iteration wird das vorletzte mit dem letzten Zeichen verglichen - was genau das ist, was wir brauchen.\n", + "Wenn wir das Ende der Schleife erreichen, ohne eine solche Verletzung zu finden, dann hat das Wort unseren Test bestanden. Überlegen Sie sich den Ablauf für das Wort \"Beginn\", um sich von der Richtigkeit der Schleife zu überzeugen. Die Länge des Wortes ist 6, so dass `i` beim letzten Schleifendurchlauf den Wert 4 hat, was der Index des vorletzten Zeichens ist. In der letzten Iteration wird das vorletzte mit dem letzten Zeichen verglichen - was genau das ist, was wir brauchen.\n", "\n", - "Hier ist eine Variante von `is_palindrom` (siehe [Abschnitt 6](seminar06.ipynb#Aufgabe-3), die zwei Indizes verwendet. Einer startet am Anfang und wird nach oben gezählt, der andere startet am Ende und wird nach unten gezählt." + "Hier ist eine Variante von `is_palindrome` (siehe [Abschnitt 6](seminar06.ipynb#Aufgabe-3), die zwei Indizes verwendet. Einer startet am Anfang und wird nach oben gezählt, der andere startet am Ende und wird nach unten gezählt." ] }, { @@ -649,6 +691,26 @@ "# Implementieren Sie hier das Programm" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ein ähnliches Problem:\n", + "\n", + "\n", + "\n", + "[Consecutive Vowels](https://xkcd.com/853/), Randall Munroe\n", + "\n", + "Schreiben Sie ein Programm, welches das Wort mit den meisten hintereinander auftauchenden Vokalen in unserer Wortliste findet." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "markdown", "metadata": {}, @@ -710,9 +772,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "\n", + "\n", "\n", - "Herzlichen Glückwunsch! Sie haben das 8. Kapitel geschafft. Weiter geht es in [9: Wortspiele](seminar09.ipynb)." + "Herzlichen Glückwunsch! Sie haben das 9. Kapitel geschafft. Weiter geht es in [10: Listen](seminar10.ipynb)." ] } ], -- GitLab