我正在处理一个由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
。
我应该如何处理我的代码以获取正确的字符串?
答案 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])