Interaktion mit dem Benutzer

Dialog im Ausführfenster

Wir betrachten noch einmal die Funktion zur Ausführung des Verschiebeverfahrens (hier mit den benutzten Hilfsfunktionen).

def verschiebezahl(zeichen):
    return ord(zeichen) - ord('A')

def verschluesseltesZeichen(zeichen, schluessel):
    verschiebung = verschiebezahl(schluessel)
    zahl = ord(zeichen)
    neueZahl = zahl + verschiebung
    if neueZahl > ord('Z'):
        neueZahl = neueZahl - 26
    neuesZeichen = chr(neueZahl)
    return neuesZeichen

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

Mit dieser Funktion lassen sich konkrete Berechnungen durch Funktionsaufrufe im Ausführfenster durchführen.

>>> verschluesselterText('HALLO', 'G')
'NGRRU'
>>> verschluesselterText('CAESAR', 'T')
'VTXLTK'

Diese Vorgehensweise ist wenig benutzerfreundlich. Um Berechnungen durchzuführen muss der Benutzer den Namen der Funktion kennen (und richtig eintippen) und die Reihenfolge der zu bearbeitenden Daten kennen (und genau beachten).

Ein interaktives Programm

Mit einem Programm, das Benutzereingaben und eine Datenausgabe vorsieht, wird das einfacher.

"""
Programm zur Durchführung des Verschiebeverfahrens
Autor: KB
Datum: 26.06.2015
"""

# Unterprogramme
def verschiebezahl(zeichen):
    return ord(zeichen) - ord('A')

def verschluesseltesZeichen(zeichen, schluessel):
    verschiebung = verschiebezahl(schluessel)
    zahl = ord(zeichen)
    neueZahl = zahl + verschiebung
    if neueZahl > ord('Z'):
        neueZahl = neueZahl - 26
    neuesZeichen = chr(neueZahl)
    return neuesZeichen

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

# Hauptprogramm
# Eingabe
print('Verwende nur die Großbuchstaben ABC...XYZ.')
aktuellerSchluessel = input('Schlüssel: ')
aktuellerKlartext = input('Klartext: ')
# Verarbeitung
aktuellerGeheimtext = verschluesselterText(aktuellerKlartext, aktuellerSchluessel)
# Ausgabe
print('Geheimtext:', aktuellerGeheimtext)

Wenn man das Programm ausführt, wird man als Benutzer zur Eingabe von Daten aufgefordert. Wenn diese Eingabedaten sinnvoll sind, erhält man das gewünschte Ergebnis als Ausgabe.

>>> 
Verwende nur die Großbuchstaben ABC...XYZ.
Schlüssel: D
Klartext: SALVESAESAR
Geheimtext: VDOYHVDHVDU

Aufgabe 1

Speichere das Programm ab und führe es mit [Run][Run Module] aus. Im Ausführfenster wirst du zur Mitarbeit aufgefordert. Probiere das mehrmals mit verschiedenen Daten aus. Du musst das Programm hierzu jeweils wieder neu ausführen.

Laden und Speichern

Beim Verschlüsseln von Texten wäre es günstig, wenn diese aus einer Datei ausgelesen werden könnten und wenn die verschlüsselten Texte wieder in einer Datei gespeichert werden könnten.

Der folgende Quelltext zeigt, wie das in Python realisiert werden kann.

"""
Programm zur Durchführung des Verschiebeverfahrens
Autor: KB
Datum: 26.06.2015
"""

# Unterprogramme
def verschiebezahl(zeichen):
    return ord(zeichen) - ord('A')

def verschluesseltesZeichen(zeichen, schluessel):
    verschiebung = verschiebezahl(schluessel)
    zahl = ord(zeichen)
    neueZahl = zahl + verschiebung
    if neueZahl > ord('Z'):
        neueZahl = neueZahl - 26
    neuesZeichen = chr(neueZahl)
    return neuesZeichen

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

def geladenerText(dateiname):
    datei = open(dateiname, 'r', encoding='iso-8859-1')
    text = datei.read()
    datei.close()
    return text

def textSpeichern(dateiname, text):
    datei = open(dateiname, 'w', encoding='iso-8859-1')
    datei.write(text)
    datei.close()

# Hauptprogramm
# Eingabe
print('Verwende nur die Großbuchstaben ABC...XYZ.')
aktuellerSchluessel = input('Schlüssel: ')
aktuellerDateinameLaden = input('Dateiname/Laden: ')
aktuellerDateinamespeichern = input('Dateiname/Speichern: ')
aktuellerKlartext = geladenerText(aktuellerDateinameLaden)
# Verarbeitung
aktuellerGeheimtext = verschluesselterText(aktuellerKlartext, aktuellerSchluessel)
# Ausgabe
textSpeichern(aktuellerDateinamespeichern, aktuellerGeheimtext)

Wenn man das Programm ausführt, wird man als Benutzer u.a. aufgefordert, die Namen der Dateien anzugeben, aus der geladen und in die gespeichert werden soll.

>>> 
Verwende nur die Großbuchstaben ABC...XYZ.
Schlüssel: D
Dateiname/Laden: klartext.txt
Dateiname/Speichern: geheimtext.txt

Aufgabe 2

(a) Teste das Programm. Beachte, dass sich die Datei, aus der der zu verschlüsselnde Text geladen werden soll, im selben Verzeichnis wie das Python-Programm befindet.

(b) Erkundige dich im Abschnitt Experimente zur Fehlerbehandlung, wie man mit einer try-except-Anweisung einen Laufzeitfehler verhindern kann, wenn die Datei zum Laden nicht gefunden wird.

X

Fehler melden

X

Suche