首页  >  文章  >  后端开发  >  为什么我的 Python 凯撒密码只显示最后移动的字符?

为什么我的 Python 凯撒密码只显示最后移动的字符?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-30 09:37:27595浏览

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 变量。

Pythonic 实现

可以使用 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(),可以通过单个操作加密整个明文字符串,从而提高性能和代码可读性。

以上是为什么我的 Python 凯撒密码只显示最后移动的字符?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn