如何在Python中解密我知道其模式的字符串?

时间:2018-08-09 01:38:19

标签: python string loops dictionary

我正在处理一个由5个整数组成的加密字符串,我弄清楚了它的模式,我试图这样编写python OrderedDict

od = OrderedDict([('0', '9'), ('1', '2'), ('2', '0'), ('3', '7'), ('4', '1'), 
                  ('5', '3'), ('6', '8'), ('7', '6'), ('8', '5'), ('9', '4')])

所以我写了一些代码来解密字符串。
“ encrypted”字符串是一个示例。

def replace_all(text, dic):
    for k, v in dic.items():
        text = text.replace(k, v)
    return text


encrypted = '14012'
decrypted = replace_all(encrypted, od)

我只是无法获得正确答案,应该将字符串14012解密为21920,但是我只是得到01400

我应该如何处理我的代码以获取正确的字符串?

2 个答案:

答案 0 :(得分:3)

您一次又一次地遍历字典项,因此'1'被翻译为'2',然后'2'被翻译为'0',这就是结果开始的原因例如,使用'0'而不是'2'

您可以改用str.translate()方法:

table = ''.join(od.get(chr(i), chr(i)) for i in range(256))
print(encrypted.translate(table))

这将输出:

21920

在这种情况下,由于构建翻译表的顺序无关紧要,因此无需使用OrderedDict

答案 1 :(得分:2)

@blhsing说对了,想想每个循环中文本的处理方式:

>>> decrypted = replace_all(encrypted, od)
14912
24922
04900
01900
01400

您将要逐项翻译

我喜欢''.join([od[i] for i in encrypted])