我想“解码”一条编码信息。每个字母都用唯一的5/6/7/8长“单词”编码。我有一本这些代码的字典('a':'qwert',…)。我试着像这样解码信息:
#example dictionary
d={'a': '00101', 'b': '10001011', 'c': '01100', 'd': '1111110', 'e': '01001', 'f': '010000', 'g': '1100100', 'h': '00010010', 'i': '0000000', 'j': '1101010', 'k': '110001', 'l': '101010', 'm': '10010', 'n': '100001', 'o': '111101', 'p': '11100111', 'q': '011110', 'r': '010001', 's': '1110010', 't': '1110011', 'u': '111000', 'v': '11100', 'w': '00110101', 'x': '011111', 'y': '0111100', 'z': '0111000', ' ': '11101011', '!': '00111101', ',': '11111', '-': '000100', '.': '0110111', ':': '11010', '?': '10110110', ';': '00000101', '0': '10001', '1': '000101', '2': '101011', '3': '11011001', '4': '10010111', '5': '1011000', '6': '0100000', '7': '000001', '8': '10111010', '9': '001110'}
#coded word
coded = '0001001001001101010101010111101' #coded and d is the input, 'hello' is the expected output
def get_key(v):
for key, value in d.items():
if v == value:
return key
return None
def decode(text):
l = []
while len(text)> 0:
for i in range(5,9):
if get_key(text[0:i]) != None:
l.append(get_key(text[0:i]))
text = text[i:]
return ''.join(str(i) for i in l)
inverse = {v:k for k,v in d.items()}
def decode(text):
l = []
while len(text)> 0:
for i in range(5,9):
if text[0:i] == inverse.keys():
l.append(inverse.value())
text = text[i:]
return ''.join(str(i) for i in l)
但是我的代码不起作用。运行此代码需要相当长的时间,我认为它也会返回错误的字母。我不知道如何纠正它。你能帮我修改代码吗
我对这一点的处理方式与您不同,这里有大量的优化空间。关键是此函数,它将返回子字符串的索引列表:
其余部分非常简单,如下所示:
在这里:
相关问题 更多 >
编程相关推荐