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中文网其他相关文章!