凯撒密码移动两个字母而不是一个字母

时间:2018-08-28 03:46:08

标签: python

我想创建一个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))

1 个答案:

答案 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)),您将获得正确的转变。