{{1}}
答案 0 :(得分:0)
您编写的代码巧妙地将字母字符转换为非字母字符,反之亦然(例如encrypt('abc', 25, 1)
获取'z!"'
)。所以传统凯撒密码的大多数定义都是错误的,它只能修改字母字符,并且应该在字母表中旋转它们。
那就是说,正确的做法比你做得更容易。最好的方法是避免滚动自己的旋转代码。 Python已经提供了一种非常好的方法来进行一对一的字符映射,str.translate
。例如:
from string import ascii_letters, ascii_uppercase, ascii_lowercase
def encrypt(text, key, direction):
# direction == -1 is trivially converted to direction == 1 case
if direction == -1:
key = 26 - key
# On Py2, you'd use the string module's string.maketrans instead of
# str.maketrans
trans = str.maketrans(ascii_letters, ascii_lowercase[key:] + ascii_lowercase[:key] + ascii_uppercase[key:] + ascii_uppercase[:key])
return text.translate(trans)