Caesar-Chiffre-Implementierung in Python: Verschlüsselter Text wird nicht korrekt angezeigt
Dieser Python-Code zielt darauf ab, die Caesar-Chiffre zu implementieren, die Zeichen basierend auf verschiebt Benutzereingaben. Der resultierende Chiffretext zeigt jedoch nur das letzte verschobene Zeichen und nicht die gesamte verschlüsselte Zeichenfolge an. Der bereitgestellte Code lautet wie folgt:
<code class="python">plainText = raw_input("What is your plaintext? ") shift = int(raw_input("What is your shift? ")) def caesar(plainText, shift): cipherText = "" for ch in plainText: if ch.isalpha(): stayInAlphabet = ord(ch) + shift if stayInAlphabet > ord('z'): stayInAlphabet -= 26 finalLetter = chr(stayInAlphabet) cipherText += finalLetter print "Your ciphertext is: ", cipherText return cipherText caesar(plainText, shift)</code>
Analyse
Das Problem liegt in der Schleife, die jedes Zeichen im Klartext verarbeitet. Anstatt alle verschobenen Zeichen an die Variable cipherText anzuhängen, aktualisiert der Code sie nur mit dem zuletzt verschobenen Zeichen. Um dies zu korrigieren, sollte die ursprüngliche CipherText-Variable vor der Zeichenverarbeitungsschleife deklariert werden.
Pythonic-Implementierung
Eine optimierte Caesar-Chiffre-Implementierung kann mithilfe der String-Manipulationsmethoden von Python erreicht werden :
<code class="python">def caesar(plaintext, shift): alphabet = string.ascii_lowercase shifted_alphabet = alphabet[shift:] + alphabet[:shift] table = string.maketrans(alphabet, shifted_alphabet) return plaintext.translate(table)</code>
Durch die Verwendung von string.maketrans() und str.translate() kann die gesamte Klartextzeichenfolge mit einem einzigen Vorgang verschlüsselt werden, was zu einer verbesserten Leistung und Lesbarkeit des Codes führt.
Das obige ist der detaillierte Inhalt vonWarum zeigt mein Python Caesar Cipher nur das zuletzt verschobene Zeichen an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!