Caesar-Chiffre in Python

Caesar-Chiffre in Python

Von Scratch zu Python – Das gleiche Problem, eleganter gelöst

Du hast in Scratch einen Caesar-Verschlüssler programmiert. Dabei musstest du:

In Python geht das viel einfacher! Computer speichern Buchstaben intern als Zahlen (das hast du beim ASCII-Code gelernt). Python kann diese Zahlen direkt nutzen – keine Liste nötig!


Vorbereitung: Thonny starten

  1. Öffne Thonny auf deinem Desktop
  2. Erstelle eine neue Datei: Datei → Neu
  3. Speichere sie als caesar.py in deinem Portfolio-Ordner (auf deinem Desktop)

Teil 1: Pythons Geheimwaffe – ord() und chr()

Das Alphabet als Zahlen

In Scratch musstest du eine Liste anlegen:

Alphabet = [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]

Python braucht das nicht! Jeder Buchstabe hat eine Nummer (ASCII-Code):

Buchstabe A B C D ... X Y Z
ASCII-Code 65 66 67 68 ... 88 89 90

Aufgabe 1.1: ord() ausprobieren

Die Funktion ord() gibt dir die Nummer eines Buchstabens.

Tippe in Thonny (im unteren "Shell"-Bereich):

>>> ord("A")
65
>>> ord("B")
66
>>> ord("Z")
90

Erkennst du das Muster? Die Buchstaben A-Z haben die Nummern 65-90 – sie sind schon in der richtigen Reihenfolge!

Aufgabe 1.2: chr() ausprobieren

Die Funktion chr() macht das Gegenteil – sie verwandelt eine Nummer zurück in einen Buchstaben (Character).

>>> chr(65)
'A'
>>> chr(68)
'D'
>>> chr(90)
'Z'

Aufgabe 1.3: Zusammenhang verstehen

Probiere aus:

>>> chr(ord("A") + 3)
'D'

Das ist schon fast die ganze Caesar-Verschlüsselung!

Scratch Python
Nummer von "A" in Alphabet → 1 ord("A") → 65
Element 4 von Alphabet → "D" chr(68) → "D"
Liste mit 26 Einträgen anlegen Nicht nötig!

Teil 2: Einen einzelnen Buchstaben verschlüsseln

Aufgabe 2.1: Das Grundgerüst

In Scratch hast du frage ... und warte benutzt. In Python heißt das input():

# Caesar-Verschlüsselung in Python
# Version 1: Ein einzelner Buchstabe

buchstabe = input("Welchen Buchstaben möchtest du verschlüsseln? ")
print("Du hast eingegeben:", buchstabe)

Führe das Programm aus mit dem grünen Play-Button (oder F5).

Aufgabe 2.2: Position finden und verschieben

Jetzt verschieben wir den Buchstaben um 3 Stellen:

# Caesar-Verschlüsselung in Python
# Version 2: Verschiebung um 3

buchstabe = input("Welchen Buchstaben möchtest du verschlüsseln? ")
buchstabe = buchstabe.upper()  # In Großbuchstaben umwandeln

nummer = ord(buchstabe)        # Buchstabe → Zahl
neue_nummer = nummer + 3       # Verschieben
neuer_buchstabe = chr(neue_nummer)  # Zahl → Buchstabe

print("Verschlüsselt:", neuer_buchstabe)

Teste: Gib "A" ein → Ausgabe sollte "D" sein.
Teste: Gib "d" ein → Ausgabe sollte auch "G" sein (wegen .upper())

Aufgabe 2.3: Das Problem am Ende des Alphabets

Teste: Gib "Y" ein. Was passiert?

Problem: Y hat die Nummer 89. Plus 3 ergibt 92 – aber das ist kein Buchstabe mehr!

>>> chr(92)
'\\'

Das ist ein Backslash, kein Buchstabe!

Aufgabe 2.4: Die Lösung mit Modulo

In Scratch hast du geprüft: falls NeuePosition > 26, dann ändere um -26

In Python gibt es einen eleganteren Weg: den Modulo-Operator %

Der Modulo gibt den Rest einer Division zurück:

>>> 28 % 26
2
>>> 27 % 26
1
>>> 26 % 26
0

So "springt" jede Zahl über 26 automatisch wieder an den Anfang!

Die verbesserte Version:

# Caesar-Verschlüsselung in Python
# Version 3: Mit Wrap-Around

buchstabe = input("Welchen Buchstaben möchtest du verschlüsseln? ")
buchstabe = buchstabe.upper()

# Position im Alphabet (0-25 statt 1-26)
position = ord(buchstabe) - ord("A")

# Verschieben mit Modulo (springt automatisch zurück)
neue_position = (position + 3) % 26

# Zurück zum Buchstaben
neuer_buchstabe = chr(neue_position + ord("A"))

print("Verschlüsselt:", neuer_buchstabe)

Teste: "Y" → "B", "Z" → "C" ✓

Warum - ord("A") und + ord("A")?


Teil 3: Variable Verschiebung

Aufgabe 3.1: Verschiebung abfragen

# Caesar-Verschlüsselung in Python
# Version 4: Variable Verschiebung

buchstabe = input("Welchen Buchstaben möchtest du verschlüsseln? ")
buchstabe = buchstabe.upper()

verschiebung = int(input("Um wie viele Stellen verschieben? (1-25) "))

position = ord(buchstabe) - ord("A")
neue_position = (position + verschiebung) % 26
neuer_buchstabe = chr(neue_position + ord("A"))

print("Verschlüsselt:", neuer_buchstabe)

Hinweis: int() wandelt die Eingabe in eine Zahl um (input gibt immer Text zurück)

Teste:


Teil 4: Entschlüsseln

Aufgabe 4.1: Nachdenken

In Scratch brauchtest du zwei falls-Blöcke:

In Python funktioniert der Modulo-Trick auch mit negativen Zahlen!

>>> (-1) % 26
25
>>> (-3) % 26
23

Das heißt: Wir brauchen keine extra Fallunterscheidung!

Aufgabe 4.2: Ver- und Entschlüsselung

# Caesar-Verschlüsselung in Python
# Version 5: Ver- und Entschlüsseln

buchstabe = input("Welchen Buchstaben? ")
buchstabe = buchstabe.upper()

modus = input("Verschlüsseln (v) oder Entschlüsseln (e)? ")
verschiebung = int(input("Verschiebung? "))

# Bei Entschlüsselung: negative Verschiebung
if modus == "e":
    verschiebung = -verschiebung

position = ord(buchstabe) - ord("A")
neue_position = (position + verschiebung) % 26
neuer_buchstabe = chr(neue_position + ord("A"))

print("Ergebnis:", neuer_buchstabe)

Teste: Verschlüssle "H" mit 3 → "K"
Teste: Entschlüssle "K" mit 3 → "H" ✓


Teil 5: Ganze Wörter – Hier zeigt Python seine Stärke!

In Scratch war das kompliziert:

Aufgabe 5.1: Die Python-Lösung

In Python geht das mit einer for-Schleife viel eleganter:

# Caesar-Verschlüsselung in Python
# Version 6: Ganze Wörter

text = input("Welchen Text möchtest du verschlüsseln? ")
text = text.upper()

modus = input("Verschlüsseln (v) oder Entschlüsseln (e)? ")
verschiebung = int(input("Verschiebung? "))

if modus == "e":
    verschiebung = -verschiebung

ergebnis = ""  # Hier sammeln wir die verschlüsselten Buchstaben

for buchstabe in text:
    if buchstabe.isalpha():  # Nur Buchstaben verschlüsseln
        position = ord(buchstabe) - ord("A")
        neue_position = (position + verschiebung) % 26
        neuer_buchstabe = chr(neue_position + ord("A"))
        ergebnis = ergebnis + neuer_buchstabe
    else:
        ergebnis = ergebnis + buchstabe  # Leerzeichen etc. behalten

print("Ergebnis:", ergebnis)

Teste: "HALLO WELT" mit Verschiebung 3 → "KDOOR ZHOW"

Was ist hier neu?

Code Bedeutung
for buchstabe in text: Geht jeden Buchstaben einzeln durch
buchstabe.isalpha() Prüft, ob es ein Buchstabe ist (kein Leerzeichen, keine Zahl)
ergebnis = ergebnis + neuer_buchstabe Hängt den neuen Buchstaben an

Vergleich: Scratch vs. Python

Aspekt Scratch Python
Alphabet 26 Einträge von Hand eingeben Nicht nötig (ord/chr)
Position finden Nummer von X in Alphabet ord(X) - ord("A")
Buchstabe holen Element N von Alphabet chr(N + ord("A"))
Wrap-Around falls > 26 dann -26 % 26 (eine Zeile!)
Entschlüsseln Extra falls < 1 nötig Modulo funktioniert auch negativ
Ganze Wörter Komplizierte Schleife mit i for buchstabe in text:
Leerzeichen Schwierig zu handhaben .isalpha() prüft automatisch

Zusatzaufgaben

Zusatz 1: Auch Kleinbuchstaben behalten

Ändere das Programm so, dass "Hallo" zu "Kdoor" wird (nicht "KDOOR").

Tipp: Prüfe mit buchstabe.isupper() ob der Buchstabe groß ist.

Zusatz 2: ROT13

ROT13 ist eine spezielle Caesar-Verschlüsselung mit Verschiebung 13. Das Besondere: Zweimal anwenden ergibt wieder den Originaltext!

Probiere es aus: Verschlüssle "HALLO" mit 13, dann verschlüssle das Ergebnis nochmal mit 13.

Zusatz 3: Alle Möglichkeiten durchprobieren (Brute Force)

Schreibe ein Programm, das einen verschlüsselten Text mit allen 25 möglichen Verschiebungen entschlüsselt und alle Ergebnisse ausgibt. So kann man die Verschlüsselung "knacken"!


Das hast du gelernt

Python-Konzept Beispiel
Eingabe input("Frage")
Ausgabe print("Text", variable)
Bedingte Anweisung if bedingung:
Schleife über Text for buchstabe in text:
Zeichen → Zahl ord("A") → 65
Zahl → Zeichen chr(65) → "A"
Modulo (Rest) 28 % 26 → 2
Großbuchstaben text.upper()
Ist es ein Buchstabe? buchstabe.isalpha()

Powered by Forestry.md