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.