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.
  1. Schreiben Sie eine Funktion input_sentences in einem Modul text_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>
    
  2. 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.
  3. Schreiben Sie eine Funktion split_sentences(lst), die eine Liste solcher Sätze bekommt und eine Liste von Wortlisten zurückliefert, wobei die übergebene Liste lst 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:
    1. Ersetze zuerst alle Satzzeichen hintereinander durch Leerzeichen. Verwende dazu die replace Methode des Typs str.
    2. Trenne (splitte) danach den String in die einzelnen Wörter mittels der Methode split des Typs str.
    Für die obigen Daten sieht das Ergebnis dieses Funktionsaufrufes folgendermaßen aus:
    >>> 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.
  4. 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
    Die übergebene Liste lst soll direkt manipuliert und auch zurückgeliefert werden:
    >>> 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.
  5. 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}
    

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

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

  8. 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)]
    

  9. Probieren Sie aus:
    1. "abcdef".index("c")
    2. "abcdef".index("g")
    3. "abcdef".index("de")
    4. "c" in "abcdef"
    5. "g" in "abcdef"
    6. "de" in "abcdef"
    7. "abcdef"[2:4]
    8. "abcdef"[2:]
    9. "abcdef"[-1]
    10. "abcdef"[2:-1]
    11. [1, 2, 3, 4, 5].index(3)
    12. [1, 2, 3, 4, 5].index(9)
    13. [1, 2, 3, 4, 5][5]
    14. [1, 2, 3, 4, 5][2:4]
    15. [1, 2, 3, 4, 5][-2]
    16. [1, 2, 3, 4, 5][5:9]
    17. [1, 2, 3, 4, 5][4:]
    18. len("abc") + len(range(3)) + len({1, 2, 3}) + len({1: 2, 2: 3})

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

  11. 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: , ,


Kommentare:

Kommentar veröffentlichen

Abonnieren Kommentare zum Post [Atom]





<< Startseite

This page is powered by Blogger. Isn't yours?

Abonnieren Posts [Atom]