Heim  >  Artikel  >  Backend-Entwicklung  >  Warum zeigt mein Python Caesar Cipher nur das zuletzt verschobene Zeichen an?

Warum zeigt mein Python Caesar Cipher nur das zuletzt verschobene Zeichen an?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-30 09:37:27651Durchsuche

Why is my Python Caesar Cipher only displaying the last shifted character?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn