无论如何要将这个Python Caesar Cipher代码缩短为更少的行?

时间:2016-01-12 01:04:07

标签: python caesar-cipher

{{1}}

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)