Mit Funktionen strukturieren
Vordefinierte Funktionen nutzen
Funktionen kennst du aus der Mathematik.
Die Funktion f
mit der Funktionsdefinition f(x) = x2
ordnet jeder Zahl (aus einer noch festzulegenden Definitionsmenge) ihr Quadrat zu. Der Funktionsaufruf
f(3)
liefert dann das Quadrat der Zahl 3.
Funktionen benutzt man auch in der Informatik.
Wir haben im Programm zur Caesar-Verschlüsselung die vordefinierten Funktion ord
und chr
benutzt. Der folgende Python-Dialog verdeutlicht dies noch einmal.
>>> zeichen = 'A' >>> zeichen 'A' >>> zahl = ord(zeichen) >>> zahl 65 >>> neuezahl = zahl + 3 >>> neuezahl 68 >>> neueszeichen = chr(neuezahl) >>> neueszeichen 'D'
Die Funktion ord
ordnet jedem Zeichen (gemäß ASCII-Tabelle) eine natürliche Zahl zu.
Umgekehrt ordnet die Funktion chr
(gemäß ASCII-Tabelle) einer natürlichen Zahl (aus einem
bestimmten Zahlenbereich) ein Zeichen zu. Dieses Verhalten lässt sich gut mit den folgenden
Black-Box-Diagrammen verdeutlichen.
Funktionen selbst definieren und nutzen
Funktionen kann man auch selbst definieren.
Wir werden hier eine neue Funktion verschluesselterText
definieren,
mit deren Hilfe Texte nach dem Verschiebeverfahren verschlüsselt werden sollen.
Genauer: Die Funktion verschluesselterText
verarbeitet eine Zeichenkette aus Großbuchstaben
und eine Verschiebezahl und liefert als Ergebnis die nach dem Verschiebeverfahren
verschlüsselte Zeichenkette zurück.
Die folgende Funktionsdefinition zeigt, wie man eine solche Funktion in Python definiert.
def verschluesselterText(klartext, schluessel): geheimtext = '' for zeichen in klartext: zahl = ord(zeichen) neuezahl = zahl + schluessel if neuezahl > ord('Z'): neuezahl = neuezahl - 26 neuesZeichen = chr(neuezahl) geheimtext = geheimtext + neuesZeichen return geheimtext
Wenn man diese Funktionsdefinition (abspeichert) und mit dem Run-Befehl ausführt, kann man die Funktion in der gewünschten Weise in Python-Dialogen verwenden.
>>> verschluesselterText('HALLO', 3) 'KDOOR' >>> verschluesselterText('HALLO', 4) 'LEPPS' >>> verschluesselterText('HALLO', 7) 'OHSSV'
Aufgabe 1
(a) Probiere das erst einmal selbst aus.
(b) Entwickle und teste analog Funktionsdefinitionen zu den Funktionen entschluesselterText
und bereinigterText
. Beachte, dass man der Funktion bereinigterText
nur eine Zeichenkette (und keine Verschiebezahl) zur Verarbeitung
übergeben muss.
Aufgabe 2
Funktionen, die man mit Hilfe einer Funktionsdefinition festgelegt hat, kann man in Programmen benutzten. Der folgende Quelltext zeigt ein Anwendungsbeispiel.
# Funktionsdefinitionen def verschluesselterText(klartext, schluessel): geheimtext = '' for zeichen in klartext: zahl = ord(zeichen) neuezahl = zahl + schluessel if neuezahl > ord('Z'): neuezahl = neuezahl - 26 neuesZeichen = chr(neuezahl) geheimtext = geheimtext + neuesZeichen return geheimtext def entschluesselterText(geheimtext, schluessel): # ... return klartext def bereinigterText(text): # ... return textNeu # Testprogramm text1 = 'Alles Käse!' text2 = bereinigterText(text1) text3 = verschluesselterText(text2, 7) text4 = entschluesselterText(text3, 7) print(text1) print(text2) print(text3) print(text4)
(a) Ergänze die fehlenden Teile und speichere den gesamten Quelltext in einer Datei ab. Teste das Programm - auch mit anderen Texten.
(b) Warum ist das hier entwickelte Programm klarer strukturiert als das Programm im letzten Abschnitt? Welche Vorteile hat eine solche Strukturierung mit Hilfe von Funktionen?