python - 凯撒密码移动了两个字母而不是一个
问题描述
我想制作一个凯撒密码,但从我的代码看来,这些字母向上移动了 2 个字母。例如,如果字母是 a 它将输出c
not b
。
import collections
import string
def caesar(rotate):
upper = collections.deque(string.ascii_uppercase)
upper.rotate(1)
upper = ''.join(list(upper))
return rotate.translate(str.maketrans(string.ascii_uppercase, upper))
code = input('Secret message: ')
print (caesar(code))
解决方案
当我运行它时,我实际上得到z
了输入。a
这是因为该行return rotate.translate(str.maketrans(string.ascii_uppercase, upper))
映射string.ascii_uppercase
到upper
或"ABC...Z"
,"ZAB...Y"
让您将一个字符向左移动而不是向右移动。通过将参数的顺序切换为return rotate.translate(str.maketrans(upper, string.ascii_uppercase))
.
推荐阅读
- python-3.x - Python tkinter - 标签未显示在第二个屏幕上
- bash - Bash - 如何从文件执行路径
- mvvmcross - 将片段添加到活动中,因此两者的 ViewModel 都由 MvvmCross 处理
- javascript - 试图在 js 文件中加载私钥导致页面失败
- java - 插入后立即延迟加载 Blob 数据
- c# - 加入两个 IQueryable
- excel - Excel 现在功能
- python - 根据另一列中的值填充一列
- batch-file - 如何通过在 .bat 文件中调用 tsm 命令自动回答用户提示
- javascript - Vue函数多次触发