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.

black box
black box

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.

black box

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?

X

Fehler melden

X

Suche