Logo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

Funktionen als Bausteine verwenden

Ein Verschlüsselungsprogramm mit Bausteinen erstellen

Gegeben ist eine Zuordnungstabelle, die Buchstaben willkürlich neue Buchstaben zuordnet - jedoch so, dass die Zuordnung eindeutig bleibt.

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
| | | | | | | | | | | | | | | | | | | | | | | | | |
G K X C S L Z U A H W D B M T Y E N J V P O I R F Q

Anstatt jetzt selbst Funktionen zur Durchführung einer Verschlüsselung mit einer solchen Zuordnungstabelle zu entwickeln, wollen wir hier auf fertig implementierte Funktionen zurückgreifen und diese zum Ver- und Entschlüsseln von Texten verwenden.

Wir gehen davon aus, dass die folgenden Funktionsdefinitionen in einer Datei verschluesselung_mit_zuordnungstabelle.py abgespeichert sind.

# -*- coding: utf-8 -*-

# Darstellung von Zuordnungstabellen:
#  
# Zuordnungstabelle:
#
# A B C D E F . . .
# | | | | | | . . .
# G K X C S L . . .
#
# Zur Darstellung wird eine Zeichenkette gebildet,
# die die zugeordneten Zeichen der Reihe nach auflistet.
#
# 'GKXCSL...'
#

def verschluesseltesZeichen(zeichen, schluessel):
    
    # zeichen: Großbuchstabe
    # schluessel: Zuordnungstabelle in Form einer Zeichenkette
    # return: zum übergebenen Buchstaben zugeordneter Buchstabe
    # Beispiel:

    """
    >>> verschluesseltesZeichen('B', 'GKXCSLZUAHWDBMTYENJVPOIRFQ')
    'K'
    """

    nummer = ord(zeichen)-ord('A')
    neuesZeichen = schluessel[nummer]
    return neuesZeichen

def verschluesselterText(klartext, schluessel):

    # klartext: Zeichenkette aus Großbuchstaben
    # schluessel: Zuordnungstabelle in Form einer Zeichenkette
    # return: neue, mit der Zuordnungstabelle konstruierte Zeichenkette
    # Beispiel:

    """
    >>> verschluesselterText('HUND', 'GKXCSLZUAHWDBMTYENJVPOIRFQ')
    'UPMC'
    """

    geheimtext = ''
    for zeichen in klartext:
        neuesZeichen = verschluesseltesZeichen(zeichen, schluessel)
        geheimtext = geheimtext + neuesZeichen
    return geheimtext

def entschluesseltesZeichen(zeichen, schluessel):

    # ...
    
    i = 0
    while i < 26:
        if schluessel[i] == zeichen:
            nummer = i
        i = i + 1
    neuesZeichen = chr(ord('A')+nummer)
    return neuesZeichen

def entschluesselterText(geheimtext, schluessel):
    
    # ...
    
    klartext = ''
    for zeichen in geheimtext:
        neuesZeichen = entschluesseltesZeichen(zeichen, schluessel)
        klartext = klartext + neuesZeichen
    return klartext

def bereinigterText(text):

    # ...
    
    textNeu = ''
    for zeichen in text:
        if ord(zeichen) >= ord('A') and ord(zeichen) <= ord('Z'):
            # zeichen ist ein Großbuchstabe
            textNeu = textNeu + zeichen
        elif ord(zeichen) >= ord('a') and ord(zeichen) <= ord('z'):
            # zeichen ist ein Kleinbuchstabe
            neuesZeichen = chr(ord(zeichen)-32)
            textNeu = textNeu + neuesZeichen
        elif zeichen == 'Ä' or zeichen == 'ä':
            textNeu = textNeu + 'AE'
        elif zeichen == 'Ö' or zeichen == 'ö':
            textNeu = textNeu + 'OE'
        elif zeichen == 'Ü' or zeichen == 'ü':
            textNeu = textNeu + 'UE'
        elif zeichen == 'ß':
            textNeu = textNeu + 'SS'
    return textNeu

Funktionen kann man auch benutzen, wenn man sie nicht selbst definiert hat. Voraussetzung dafür ist, dass man genau weiß, welche Daten man der Funktion zur Verarbeitung übergeben muss und was die Funktion als Ergebnis zurückgibt. In einer Schnittstellenbeschreibung werden alle diese Informationen genau beschrieben.

Aufgabe 1

(a) Die Funktionsdefinitionen zu den Funktionen verschluesseltesZeichen und verschluesselterText enthalten bereits Schnittstellenbeschreibungen. Schaue dir diese Beschreibungen genau an, damit du weißt, wie man die beiden Funktionen verwenden kann.

(b) Speichere jetzt die gezeigten Funktionsdefinitionen in einer Datei mit dem Dateinamen verschluesselung_mit_zuordnungstabelle.py ab. Erstelle anschließend ein Testprogramm wie das folgende, das die beiden Funktionen verwendet.

# Import der Funktionen

from verschluesselung_mit_zuordnungstabelle import *

# Verwendung der Funktionen

zuordnung = 'GKXCSLZUAHWDBMTYENJVPOIRFQ'
geheimtext = verschluesselterText('SALVEASTERIX', zuordnung)
print(geheimtext)

(c) Fertige entsprechende Schnittstellenbeschreibungen zu den anderen oben vorgegebenen Funktionen an. Erstelle auch ein Testprogramm, das diese Funktionen verwendet.

(d) Erstelle ein benutzerfreundliches Programm zum Verschlüsseln / Entschlüsseln von Texten mit Hilfe einer fest vorgegebenen Zuordnungstabelle. Dabei sollen importierte Funktionen als Bausteine verwendet werden.

X

Fehler melden

X

Suche