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 サイトの他の関連記事を参照してください。