2014-01-15 270 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 –