Vermeidung von Codeduplizierung
Codeduplizierung
Wenn ein Programmteil - bis auf geringfügige Abweichungen - mehrfach in einem Programm vorkommt, spricht man von Codeduplizierung.
text = 'ABRAKADABRASIMSALABIM' anzahl = 0 for zeichen in text: if zeichen == 'A': anzahl = anzahl + 1 print('A', ':', anzahl) anzahl = 0 for zeichen in text: if zeichen == 'B': anzahl = anzahl + 1 print('B', ':', anzahl) anzahl = 0 for zeichen in text: if zeichen == 'C': anzahl = anzahl + 1 print('C', ':', anzahl) anzahl = 0 for zeichen in text: if zeichen == 'D': anzahl = anzahl + 1 print('D', ':', anzahl) # ...
Codeduplizierung versucht man in der Regel zu vermeiden. Zum einen werden Programme hierdurch in der Regel kürzer. Zum anderen erspart man sich Arbeit, wenn der Programmteil noch einmal überarbeitet wird. Man muss dann nur einen einzigen Programmteil bearbeiten statt mehrere.
Vermeidung von Codeduplizierung mit Funktionen
Im vorliegenden Fall lässt sich Codeduplizierung vermeiden, wenn man die Bestimmung der Häufigkeit eines Buchstabens in einem Text mit einer eigenständigen Programmeinheit beschreibt. Die folgende Funktion leistet das Gewünschte:
Diese Funktion kann man wie folgt definieren und zur Häufigkeitsbestimmung benutzen.
def haeufigkeit(buchstabe, text): anzahl = 0 for zeichen in text: if zeichen == buchstabe: anzahl = anzahl + 1 return anzahl # Testprogramm aktuellerText = 'ABRAKADABRASIMSALABIM' print('A', ':', haeufigkeit('A', aktuellerText)) print('B', ':', haeufigkeit('B', aktuellerText)) print('C', ':', haeufigkeit('C', aktuellerText)) print('D', ':', haeufigkeit('D', aktuellerText)) # ...
Aufgabe 1
Vergleiche das vorliegende Programm (mit Funktionsdefinition) und das oben gezeigte (ohne Funktionsdefinition). Was ist der Vorteil des vorliegenden Programms? Siehst du auch noch Nachteile?
Aufgabe 2
Benutze das vorliegende Programm, um den oben gezeigten verschlüsselten Text zu analysieren. Mit den erzielten Häufigkeitswerten kannst du dann bestimmt den noch fehlenden Schlüssel ermitteln.
Aufgabe 3
Du kannst die Folge von print
-Anweisungen im oben gezeigten Programm
auch durch eine geeignete Wiederholungsanweisung ersetzen. Ergänze hierzu das folgende Programm.
... # Testprogramm aktuellerText = 'ABRAKADABRASIMSALABIM' abc = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' for zeichen in abc: ...
Bemerkung: Das hier entwickelte Programm hat noch den Nachteil, dass der zu analysierende Text für jeden Buchstaben einmal durchlaufen wird. Natürlich geht das auch noch einfacher. Wenn du dich bereits mit Listen auskennst, dann kannst du versuchen, das Programm so zu gestalten, dass man mit einem Durchlauf über den Text auskommt.