Donnerstag, 6. September 2012
Wiederholung Python (POS1: 2BHIF)
Abgabename: 2012_2bhif_aufgabe1_Name_Vorname.tgz
Die folgenden Aufgaben ermöglichen Ihnen einen Wiedereinstieg in das Programmieren mit Python. Das Rüstzeug zu Lösung sollten Sie in der ersten Klasse bekommen haben.
Googlen Sie nach 'python "reference card"' und suchen Sie eine passende Kurzreferenz.
Die folgenden Aufgaben ermöglichen Ihnen einen Wiedereinstieg in das Programmieren mit Python. Das Rüstzeug zu Lösung sollten Sie in der ersten Klasse bekommen haben.
Googlen Sie nach 'python "reference card"' und suchen Sie eine passende Kurzreferenz.
- Schreiben Sie eine Funktion
input_sentences
in einem Modultext_analyzer
, die den Benutzer nach beliebigen Sätzen fragt, diese in einer Liste abspeichert und danach zurückliefert. Das könnte also so aussehen:Bitte geben Sie die zu analysierenden Sätze ein (CTRL-D bricht ab): Satz: Maxi und Mini verliefen sich im Wald, aber bald. Satz: 10 alte Fledermäuse flogen im Wald Satz: Hat die alte Meisterhexe... Satz: Seid's gewesen. Denn als Geister... Satz: Erst hervor der alte Meister. Satz: <ctrl-d>
- Fügen Sie dazu in diesem Modul einen Aufruf dieser Funktion ein, sodass das Modul sowohl als Modul als auch als Programm verwendet werden kann.
-
Schreiben Sie eine Funktion
split_sentences(lst)
, die eine Liste solcher Sätze bekommt und eine Liste von Wortlisten zurückliefert, wobei die übergebene Listelst
direkt verändert werden soll.
Die Wortlisten entstehen indem man die Sätze an den Whitespace Zeichen und den Satzzeichen("',;.:-)
trennt. Die Satzzeichen werden nicht benötigt.
Gehen Sie dazu folgendermaßen vor:- Ersetze zuerst alle Satzzeichen hintereinander durch Leerzeichen. Verwende dazu die
replace
Methode des Typsstr
. - Trenne (splitte) danach den String in die einzelnen Wörter mittels der Methode
split
des Typsstr
.
>>> lst = ['Maxi und Mini verliefen sich im Wald, aber bald.', ... '10 alte Fledermäuse flogen im Wald', ... 'Hat die alte Meisterhexe...', ... "Seid's gewesen. Denn als Geister...", ... 'Erst hervor der alte Meister.'] >>> split_sentences(lst) [['Maxi', 'und', 'Mini', 'verliefen', 'sich', 'im', 'Wald',\ 'aber', 'bald'], ['10', 'alte', 'Fledermäuse', 'flogen', 'im', 'Wald'],\ ['Hat', 'die', 'alte', 'Meisterhexe'], ['Seid', 's', 'gewesen', 'Denn',\ 'als', 'Geister'], ['Erst', 'hervor', 'der', 'alte', 'Meister']] >>> lst [['Maxi', 'und', 'Mini', 'verliefen', 'sich', 'im', 'Wald',\ 'aber', 'bald'], ['10', 'alte', 'Fledermäuse', 'flogen', 'im', 'Wald'],\ ['Hat', 'die', 'alte', 'Meisterhexe'], ['Seid', 's', 'gewesen', 'Denn',\ 'als', 'Geister'], ['Erst', 'hervor', 'der', 'alte', 'Meister']]
Bei der obigen Ausgabe wurden zur besseren Lesbarkeit die Zeilen manuell umgebrochen und der Zeilenumbruch jeweils mit einem \ gekennzeichnet.
Baue diese Funktion in das Hauptprogramm ein.
- Ersetze zuerst alle Satzzeichen hintereinander durch Leerzeichen. Verwende dazu die
- Schreiben Sie eine Funktion
purge_bad_words(lst)
, die eine Liste von Listen von Wörtern erhält und alle diejenigen herauslöscht, die- weniger als 2 Zeichen lang sind oder
- nicht alphabetische Zeichen enthalten
>>> purge_bad_words(lst) [['Maxi', 'und', 'Mini', 'verliefen', 'sich', 'im', 'Wald', 'aber',\ 'bald'], ['alte', 'Fledermäuse', 'flogen', 'im', 'Wald'], ['Hat',\ 'die', 'alte', 'Meisterhexe'], ['Seid', 'gewesen', 'Denn', 'als',\ 'Geister'], ['Erst', 'hervor', 'der', 'alte', 'Meister']]
Wie leicht zu sehen sind sind die zu kurzen Wörter und die Wörter, die nicht-alphabetische Zeichen enthalten entfernt worden.
- Schreiben Sie eine Funktion
analyze_words(lst)
, die eine Liste wie aus dem vorhergehenden Punkt als Argument bekommt und ein Dictionary mit allen Worten als Keys und deren Häufigkeiten als Values zurückliefert, wobei aber alle Wörter nur klein geschrieben gezählt werden:>>> analyze_words(lst) {'wald': 2, 'mini': 1, 'aber': 1, 'gewesen': 1, 'flogen': 1, 'im': 2,\ 'hervor': 1, 'als': 1, 'verliefen': 1, 'maxi': 1, 'sich': 1,\ 'meister': 1, 'hat': 1, 'bald': 1, 'meisterhexe': 1, 'erst': 1,\ 'fledermäuse': 1, 'geister': 1, 'die': 1, 'alte': 3, 'und': 1,\ 'denn': 1, 'seid': 1, 'der': 1}
- Schreiben Sie eine Funktion
analyze_letters(lst)
, die wiederum eine Liste der Liste der Wörter bekommt und ein Dictionary mit Buchstaben als Keys und deren Häufigkeiten als Values zurückliefert. Wiederum werden alle Buchstaben als Kleinbuchstaben betrachtet:>>> analyze_letters(lst) {'a': 10, 'c': 1, 'b': 2, 'e': 28, 'd': 9, 'g': 3, 'f': 3, 'i': 12,\ 'h': 4, 'm': 7, 'l': 10, 'o': 2, 'n': 7, 's': 9, 'r': 10, 'u': 2,\ 't': 8, 'w': 3, 'v': 2, 'x': 2, 'ä': 1}
- Schreiben Sie nun eine Funktion
purge_analyzed_letters(dic)
, die alle Umlaute (ä, ü, ö) aus dem Dictionary (des vorhergehenden Punktes) entfernt:>>> purge_analyzed_letters(dic) {'a': 10, 'c': 1, 'b': 2, 'e': 28, 'd': 9, 'g': 3, 'f': 3, 'i': 12,\ 'h': 4, 'm': 7, 'l': 10, 'o': 2, 'n': 7, 's': 9, 'r': 10, 'u': 2,\ 't': 8, 'w': 3, 'v': 2, 'x': 2}
- Entwicklen Sie eine Funktion
sort_letters(dic)
, die ein Dictionary wie aus dem vorhergehenden Punkt bekommt und eine absteigend sortierte Liste von Tupel mit Buchstabe und Häufigkeit zurückliefert:>>> sort_letters(dic) [('e', 28), ('i', 12), ('a', 10), ('l', 10), ('r', 10), ('d', 9),\ ('s', 9), ('t', 8), ('m', 7), ('n', 7), ('h', 4), ('g', 3), ('f', 3),\ ('w', 3), ('b', 2), ('o', 2), ('u', 2), ('v', 2), ('x', 2), ('c', 1)]
- Probieren Sie aus:
"abcdef".index("c")
"abcdef".index("g")
"abcdef".index("de")
"c" in "abcdef"
"g" in "abcdef"
"de" in "abcdef"
"abcdef"[2:4]
"abcdef"[2:]
"abcdef"[-1]
"abcdef"[2:-1]
[1, 2, 3, 4, 5].index(3)
[1, 2, 3, 4, 5].index(9)
[1, 2, 3, 4, 5][5]
[1, 2, 3, 4, 5][2:4]
[1, 2, 3, 4, 5][-2]
[1, 2, 3, 4, 5][5:9]
[1, 2, 3, 4, 5][4:]
len("abc") + len(range(3)) + len({1, 2, 3}) + len({1: 2, 2: 3})
- Bauen Sie in ihr Main Testaufrufe aller Funktionen mit einer fixen Liste auf (Kommentieren Sie den Aufruf von
input_sentences()
aus). Es soll jedes Stadium der Verarbeitung der Liste ausgegeben werden. Bauen Sie die Aufrufe aus obigem Punkt (Probieren Sie aus) ein und geben Sie das Ergebnis aus. Man muss den Programmcode (print()
verwenden) sehen und das Ergebnis.
- Geben Sie das Beispiel ab, indem Sie
text_analyzer.py
per Mail an mich senden.
Das Original zu dieser Aufgabe stammt von Dr. Kolousek.
Labels: Aufgabe, POS1-2, Python
Abonnieren Posts [Atom]
Kommentar veröffentlichen