-5

所以我应该构建一个编码器,通过给定的移位值来移动字母的值。我制作了 2 个字典,1 个用于小写字母,1 个用于大写字母。

这就是它应该做的:“返回一个可以将凯撒密码应用于字母的字典。密码由移位值定义。忽略标点符号和数字等非字母字符。”

这是一个例子:

例子:

>>> build_coder(3)
{' ': 'c', 'A': 'D', 'C': 'F', 'B': 'E', 'E': 'H', 'D': 'G', 'G': 'J',
'F': 'I', 'I': 'L', 'H': 'K', 'K': 'N', 'J': 'M', 'M': 'P', 'L': 'O',
'O': 'R', 'N': 'Q', 'Q': 'T', 'P': 'S', 'S': 'V', 'R': 'U', 'U': 'X',
'T': 'W', 'W': 'Z', 'V': 'Y', 'Y': 'A', 'X': ' ', 'Z': 'B', 'a': 'd',
'c': 'f', 'b': 'e', 'e': 'h', 'd': 'g', 'g': 'j', 'f': 'i', 'i': 'l',
'h': 'k', 'k': 'n', 'j': 'm', 'm': 'p', 'l': 'o', 'o': 'r', 'n': 'q',
'q': 't', 'p': 's', 's': 'v', 'r': 'u', 'u': 'x', 't': 'w', 'w': 'z',
'v': 'y', 'y': 'a', 'x': ' ', 'z': 'b'}
(The order of the key-value pairs may be different.)
"""

从 2 个不完整的小写和大写字母字典开始:

capitals = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', ' '}
lower = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', ' '}            
4

1 回答 1

0

您不必使用字典...有一种更简单的方法,使用string模块:

from string import printable, maketrans

def caesar(string, key):

    shifted_alphabet = printable[key:] + printable[:key]
    table = maketrans(printable, shifted_alphabet)
    return string.translate(table)

string = raw_input("Enter something> ") #input for python 3
while 1:
    try:
        key = int(raw_input("Enter key (0-25): "))
    except:
        print "Key should be integer"
    else:
        if not (0 <= key <= 25):
            print "Key should 0-25, %s received"%key
            continue
        break
print caesar(string, key)
print caesar(string, len(printable)-key)
于 2013-10-02T13:15:58.283 回答