我想创建一个Caesar密码,但是从我的代码看来,字母向上移动了2个字母。例如,如果字母是a,它将输出c
而不是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))
答案 0 :(得分:0)
运行此命令时,我实际上得到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))
,您将获得正确的转变。