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

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

Mary-Kate Olsen
リリース: 2024-10-30 09:37:27
オリジナル
678 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート