lehrkraefte:snr:informatik:fachdidaktik:bonusmaterial

Bonusmaterial (Aufgaben, weitere Ideen, nachfolgende Themen)

Schreibe ein Programm, das zählt, wie häufig (in Prozent) jeder der 26+3+1 Buchstaben (a-z, Umlaute, scharfes s) im Faust vorkommt und stelle das Ergebnis durch ein Säulendiagramm dar.

Hinweis 0

Hinweis 0

Orientiere dich an Aufgabe 3 inklusive der danach gegebenen Anleitung zum Zeichnen des Säulendiagramms.

Genaueres wird in den folgenden Hinweisen erklärt.

Hinweis 1

Hinweis 1

Erzeuge zuerst eine Liste aller Buchstaben im Faust.

Das geht so per list comprehension:

Das geht so per list comprehension:

buchstabenliste = [b for w in wortliste for b in w.lower()]

Hinweis 2

Hinweis 2

Verwende die Liste alphabet = [x for x in “abcdefghijklmnopqrstuvwxyzäöüß”] und list comprehension, um eine Liste prozentualeHaeufigkeit zu erzeugen, deren erster Eintrag angibt, wie häufig der Buchstabe a vorkommt, usw. und deren letzter Eintrag angibt, wie häufig der “Buchstabe” ß vorkommt, etc.

Hinweis 3

Hinweis 3

Zeichne das Säulendiagramm mit dem Befehl zeichneSaeulendiagramm(alphabet, prozentualeHaeufigkeit, 'Prozentuale Häufigkeit der Buchstaben', 'Buchstaben', 'in %'). Zuvor muss natürlich wie oben diese Funktion definiert werden.

Lösungsvorschlag

Lösungsvorschlag

eingabeDatei = open("faust-1-und-2.txt", encoding='utf-8')
wortliste = eingabeDatei.read().splitlines()
eingabeDatei.close()
 
buchstabenliste = [b for w in wortliste for b in w.lower()]
anzahlBuchstaben = len(buchstabenliste)
alphabet = [x for x in "abcdefghijklmnopqrstuvwxyzäöüß"]
prozentualeHaeufigkeit = [buchstabenliste.count(b) / anzahlBuchstaben * 100 for b in alphabet]
 
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(alphabet, prozentualeHaeufigkeit, 'Prozentuale Häufigkeit der Buchstaben', 'Buchstaben', 'Häufigkeit in %')

Ein Anagramm ist ein Wort, das durch Umstellen der Buchstaben ein anderes Wort ergibt, vgl. https://de.wikipedia.org/wiki/Anagramm.

  • (B2a) Schreibe ein Programm, das alle Anagramme in Goethes Faust findet. Genauer sind wir an allen Wörtern im Faust interessiert, aus denen man durch Umstellen der Buchstaben ein anderes Wort bilden kann, das ebenfalls im Faust vorkommt.

Hinweise: Verwende die Funktion

def ordneAlphabetisch(s):
    return ''.join(sorted(s))

Sie nimmt ein Wort entgegen und ordnet es alphabetisch: Beispielsweise liefert ordneAlphabetisch(“andromeda”) das Wort “aaddemnor”.

Mit Hilfe dieser Funktion kann man leicht entscheiden, ob zwei Wörter “Anagramme voneinander sind”.

Lösungsvorschlag zu Teilaufgabe B2a

Lösungsvorschlag zu Teilaufgabe B2a

eingabeDatei = open("faust-1-und-2.txt", encoding='utf-8')
wortliste = eingabeDatei.read().splitlines()
eingabeDatei.close()
 
# Teilaufgabe B2a
def ordneAlphabetisch(s):
    return ''.join(sorted(s))
 
wortlisteOhneWiederholungen = list({x.lower() for x in wortliste})
alphabetischGeordnet = [ordneAlphabetisch(x) for x in wortlisteOhneWiederholungen]
anagramme = [x for x in wortlisteOhneWiederholungen if alphabetischGeordnet.count(ordneAlphabetisch(x)) > 1]
print("Liste der Anagramme:")
print(anagramme)
print("Anzahl der Anagramme:")
print(len(anagramme))

  • (B2b) Ändere die Ausgabe so, dass
    • jedes Anagramm zusammen mit seinen “Partner-Anagrammen” als Liste in einer Zeile ausgegeben wird;
    • jedes Anagramm genau einmal ausgegeben wird;
    • optional: Gib nur “interessante” Anagramme aus: Gib beispielsweise nur solche Anagramme aus, die mindestens aus zehn Buchstaben bestehen oder mindestens vier “Partner-Anagramme” haben.

Lösungsvorschlag zu beiden Teilaufgaben

Lösungsvorschlag zu beiden Teilaufgaben

eingabeDatei = open("faust-1-und-2.txt", encoding='utf-8')
wortliste = eingabeDatei.read().splitlines()
eingabeDatei.close()
 
# Teilaufgabe B2a
def ordneAlphabetisch(s):
    return ''.join(sorted(s))
 
wortlisteOhneWiederholungen = list({x.lower() for x in wortliste})
alphabetischGeordnet = [ordneAlphabetisch(x) for x in wortlisteOhneWiederholungen]
anagramme = [x for x in wortlisteOhneWiederholungen if alphabetischGeordnet.count(ordneAlphabetisch(x)) > 1]
print("Liste der Anagramme:")
print(anagramme)
print("Anzahl der Anagramme:")
print(len(anagramme))
 
# Teilaufgabe B2b
for x in list({ordneAlphabetisch(x) for x in anagramme}):
    anagrammeDavon = [a for a in anagramme if ordneAlphabetisch(a) == x]
    print(anagrammeDavon)
    # Lösung der optionalen Aufgabe: Kommentiere die vorige Zeile aus und entkommentiere die folgenden beiden Zeilen:
    # if len(x) >= 12 or len(anagrammeDavon) >= 4:
    #    print(anagrammeDavon)
  • Häufigkeit von Wörtern:
    • Welches Wort kommt am häufigsten in Goethes Faust vor?
    • Erstelle eine Liste der 20 am häufigsten vorkommenden Wörter und stelle diese in einem Säulendiagramm dar.
    • Sortiere die Liste der Wörter nach ihrer Häufigkeit.
  • Wie gross ist der Sprechanteil der verschiedenen Personen (Faust, Mephisto, Gretchen etc.)? - Sprecher sind im Text in Großbuchstaben angegeben, etwa FAUST etc. (Überschriften, Regieanweisungen etc. sind aber wohl nicht erkennbar.)
  • Kannst du anhand der Buchstabenhäufigkeiten herausfinden, in welcher Sprache ein Text geschrieben ist? (Problem hierbei: Bekomme andere Texte als Liste.)
  • Welche Fragen fallen dir ein?
  • lehrkraefte/snr/informatik/fachdidaktik/bonusmaterial.txt
  • Last modified: 2022/07/21 12:47
  • by Olaf Schnürer