ホームページ  >  記事  >  バックエンド開発  >  私の Python Caesar Cipher では、最後にシフトされた文字のみが表示されるのはなぜですか?

私の Python Caesar Cipher では、最後にシフトされた文字のみが表示されるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-30 09:37:27653ブラウズ

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

Python でのシーザー暗号の実装: 暗号化されたテキストが正しく表示されない

この Python コードは、以下に基づいて文字をシフトするシーザー暗号を実装することを目的としています。ユーザー入力。ただし、結果の暗号文には、暗号化された文字列全体ではなく、最後にシフトされた文字のみが表示されます。提供されるコードは次のとおりです。

<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>

分析

問題は、平文の各文字を処理するループ内にあります。このコードでは、シフトされたすべての文字を cipherText 変数に追加するのではなく、最後にシフトされた文字でのみ更新されます。これを修正するには、元の cipherText 変数を文字処理ループの前に宣言する必要があります。

Python の実装

最適化された Caesar 暗号の実装は、Python の文字列操作メソッドを使用して実現できます。 :

<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>

string.maketrans() と str.translate() を利用すると、平文文字列全体を 1 回の操作で暗号化でき、パフォーマンスとコードの可読性が向上します。

以上が私の Python Caesar Cipher では、最後にシフトされた文字のみが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。