Verarbeitung von Zeichen
Codierung von Zeichen
Zeichen werden intern im Rechner durch Bitfolgen codiert. In Abschnitt Exkurs - ASCII-Code findest du die einfache und vielfach genutzte ASCII-Codierung von Zeichen.
Da man die Bitmuster in der ASCII-Codierung auch als Zahlen deuten kann, lässt sich jedem Zeichen (aus einem vorgegebenen Zeichenvorrat) eine natürliche Zahl (aus einem passenden Zahlenbereich) zuordnen und umgekehrt. Dem Zeichen 'A' lässt sich beispielsweise nach dem ASCII-Code die Zahl 65 zuordnen.
Zeichen | Zahl |
---|---|
A | 65 |
B | 66 |
C | 67 |
... | ... |
Auf diese Zuordnung zwischen Zeichen und Zahlen kann man in Pythen wie folgt zugreifen. Probiere das selbst einmal aus.
>>> ord('A')
65
>>> chr(65)
'A'
Beachte, dass Zeichen in Python mit Hochkommata dargestellt werden. Zeichen sind hier Daten vom Datentyp str
.
Die vordefinierte 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.
Mit diesen Hilfsfunktionen lassen sich jetzt einfache Verarbeitungsmöglichkeiten von Zeichen realisieren.
Bestimmung der Verschiebezahl
Bei der Verschlüsselung mit dem Verschiebeverfahren wird als Schlüssel ein Zeichen vereinbart, mit dem letztlich die Verschiebung des Alphabets beschrieben wird. Zum Schlüssel 'H' gehört die folgende Zuordnung und somit eine Verschiebung des Alphabets um 7 Buchstaben.
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 | | | | | | | | | | | | | | | | | | | | | | | | | | H I J K L M N O P Q R S T U V W X Y Z A B C D E F G
Günstig ist es, wenn man zu einem Schlüsselbuchstaben die zugehörige Verschiebezahl ermitteln kann. Wir konzipieren hierfür eine geeignete Funktion.
Aufgabe 1
Entwickle eine Funktionsdefinition für diese Funktion.
Tipp: Benutze die vordefinierte Funktion ord
.
Verschiebung von Buchstaben
Ziel ist es, eine Funktion zum Verschlüsseln einzelner Zeichen (vorerst nur Großbuchstaben) mit einem vorgegebenen Schlüssel zu entwickeln.
Aufgabe 2
(a) Analysiere den folgenden Python-Dialog. Wie wird hier das zum Zeichen und Schlüssel gehörende verschlüsselte Zeichen bestimmt?
>>> zeichen = 'P'
>>> schluessel = 'H'
>>> verschiebung = verschiebezahl(schluessel)
>>> verschiebung
7
>>> zahl = ord(zeichen)
>>> zahl
80
>>> neueZahl = zahl + verschiebung
>>> neueZahl
87
>>> neuesZeichen = chr(neueZahl)
>>> neuesZeichen
'W'
(b) Führe selbst einen solchen Dialog mit folgenden Ausgangsdaten.
>>> zeichen = 'M'
>>> schluessel = 'F'
...
(c) Führe ebenfalls einen Dialog mit diesen Ausgangsdaten. Welches Problem tritt hier auf? Wie könnte man es lösen?
>>> zeichen = 'U'
>>> schluessel = 'M'
...
Aufgabe 3
Hier eine Implementierung der Funktion verschluesseltesZeichen
.
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
(a) Teste diese Funktion. Beachte, dass du zusätzlich eine Implementierung der Funktion verschiebezahl
benötigst. Am einfachsten speicherst du beide Funktionsdefinitionen in einer Datei ab.
(b) Erkläre alle Anweisungen der Funktionsdefinition.
Aufgabe 4
Entwickle eine Funktion entschluesseltesZeichen
. Erstelle erst ein Black-Box-Diagramm.
Entwickle dann eine Funktionsdefinition.