2014-01-15 165 views
1

如果我有一个字符串s ='ABCDEFJHI',并且将它切成这样['ABC','DEF','JHI']。 我有函数编码(一些计算)将切片的字符串转换为数字。将数字转换为字符串

for example 'encode('ABC') gives 50 , encode('DEF') gives 33, encode('JHI') gives 10 

['ABC','DEF','JHI']给出[50,33,10]。 我想做相反的情况下,解码(50)给'ABC' 我有想法,当我编码子字符串,我创建一个库,然后我追加它的数字字符串如:('ABC':50 )(对所有子字符串执行相同的操作),稍后解码,我将根据数字提取子字符串。 如何在python中做到这一点?

+2

这些计算是根据算法还是只是定义为配对? –

+0

要小心,如果您尝试进行压缩或加密,您可能会遇到冲突,例如,ABC是否产生与BAC或CAB相同的最终数字?只是一个想法。 – Aidan

回答

1

如果它是可逆的,我建议以反向格式(50:'ABC')存储它。此外,想象一下在给定的代码之前没有编码的情况。

encode_history = {} 

def encode(str): 
    """some calculations which lead to the code""" 
    ... your calculations ... 
    encode_history[code] = str 
    return code 


def decode(code): 
    """function to convert a code to string""" 
    if code in encode_history: 
     return encode_history[code] 
    else: 
     return None 
+0

OK.thanks.I在's ='AAGGTTCA'上应用这个'>>>'>>>编码_历史 {1:'AAG',5:'CA',33:'GTT'}',但结果必须是'encode_history {1:'AAG',33:'GTT',5:'CA'} ' – user3184809

+0

噢!我明白了!那么字典不会为你工作 你可以定义:'encode_history = []',更新它像'encode_history.append((code,str))',然后将它转换为dict'codes = dict(encode_history)'解码并使用这个变量,所以,这不仅仅是编码解码问题。对? – Mehdi

1

在您的编码功能:

def encode(the_string): 
    #do whatever encoding you're doing 
    return (the_number,the_string) 

何地,只要你使用它,这样做:

d = dict() 
for value in ["ABC","DEF","JHI"]: 
    encoded,decoded = encode(value) 
    d[encoded] = decoded 

定义一个函数也喜欢:

def decode(lookup_table,value): 
    return lookup_table[value] 

,并使用它像:

encoded_values = list() 
for value in ["ABC","DEF","JHI"]: 
    encoded,decoded = encode(value) 
    d[encoded] = decoded 
    encoded_values.append(encoded) 

for value in encoded_values: 
    print("{} | {}".format(value,decode(d,value))) 

[OUT] 
50 | ABC 
33 | DEF 
10 | JHI 

这就是说 - 你为什么这样做,你怎么这样做,为什么你不使用某种真正的加密呢?如果它不是双向加密,那么几乎肯定不应该将数据存储在任何地方,并且如果它是双向加密,那么为什么不使用用于加密的相反算法​​对其进行解密?只要记住.....

+1

这可能是更好的实际解码...但提供的信息提供这是唯一的方法来做到这一点(如果我们看到它是如何编码这将是另一回事 –

+1

@JoranBeasley绝对,我注意到底部我的答案是,这几乎总是错误的实现 - 但给了一个糟糕的问题,我只能给出一个不好的答案:P –