lehrkraefte:snr:informatik:fachdidaktik:bonusmaterial

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
lehrkraefte:snr:informatik:fachdidaktik:bonusmaterial [2022/07/18 10:28] – created Olaf Schnürerlehrkraefte:snr:informatik:fachdidaktik:bonusmaterial [2022/07/21 10:47] (current) – [Bonus-Aufgabe B1 zu Goethes Faust: Buchstabenhäufigkeiten - Darstellung als Säulendiagramm] Olaf Schnürer
Line 1: Line 1:
 +~~NOTOC~~
 +====== Bonusmaterial (Aufgaben, weitere Ideen, nachfolgende Themen) ======
 +===== Bonusaufgaben =====
 +
 +==== Bonus-Aufgabe B1 zu Goethes Faust: Buchstabenhäufigkeiten - Darstellung als Säulendiagramm ====
 +
 +<WRAP center round todo>
 +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.
 +
 +<hidden 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.
 +</hidden>
 +
 +<hidden Hinweis 1>
 +Erzeuge zuerst eine Liste aller Buchstaben im Faust.
 +<hidden Das geht so per list comprehension:>
 +''buchstabenliste = [b for w in wortliste for b in w.lower()]''
 +</hidden>
 +</hidden>
 +
 +<hidden 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.
 +</hidden>
 +
 +<hidden 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.
 +</hidden>
 +
 +<hidden Lösungsvorschlag>
 +<code python>
 +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 %')
 +</code>
 +</hidden>
 +</WRAP>
 +
 +==== (relativ anspruchsvolle) Bonus-Aufgabe B2 zu Goethes Faust: Anagramme ====
 +
 +Ein //Anagramm// ist ein Wort, das durch Umstellen der Buchstaben ein anderes Wort ergibt, vgl. https://de.wikipedia.org/wiki/Anagramm.
 +
 +<WRAP center round todo>
 +  * (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
 +<code python>
 +def ordneAlphabetisch(s):
 +    return ''.join(sorted(s))
 +</code>
 +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".
 +
 +<hidden Lösungsvorschlag zu Teilaufgabe B2a>
 +<code python>
 +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))
 +</code>
 +</hidden>
 +
 +----
 +
 +  * (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.
 +
 +----
 +
 +<hidden Lösungsvorschlag zu beiden Teilaufgaben>
 +<code python>
 +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)
 +</code>
 +</hidden>
 +</WRAP>
 +
 +===== Weitere Ideen zur Text-Analyse =====
 +
 +  * 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?
 +===== Retour zur Hauptseite =====
 +
 +[[lehrkraefte:snr:informatik:fachdidaktik:list-comprehension|Fortgeschrittene Techniken für Listen samt Aufgaben zu Goethes Faust]]
 +