首页 > 解决方案 > 凯撒密码移动了两个字母而不是一个

问题描述

我想制作一个凯撒密码,但从我的代码看来,这些字母向上移动了 2 个字母。例如,如果字母是 a 它将输出cnot 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))

标签: python

解决方案


当我运行它时,我实际上得到z了输入。a这是因为该行return rotate.translate(str.maketrans(string.ascii_uppercase, upper))映射string.ascii_uppercaseupper"ABC...Z""ZAB...Y"让您将一个字符向左移动而不是向右移动。通过将参数的顺序切换为return rotate.translate(str.maketrans(upper, string.ascii_uppercase)).


推荐阅读