-5

帮助修复反向方法...(文本到数字,然后反向,数字到文本)下面是未经编辑的完整代码。

chars=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","t","s","u","v","w","x","y","z","!","@","#","$","%","^","&","*","(",")","<",">","?","/","[","]","{","}","-","_","=","+"," "];
numbs1=["01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43","44","45","46","47","48","49"];
rechars1=dict(zip(chars,numbs1));
rechars2=dict(zip(numbs1,chars)); # ??
stringa=raw_input(""); #Letters and symbols only-->encrypt
stringb=''.join(rechars1.get(c,c) for c in stringa);
stringc=''.join(rechars2.get(c,c) for c in stringb); # ??
print "Plain:     ",stringa;
print "Encoded:   ",stringb;
print "Unencoded: ",stringc; #same as stringb??
4

2 回答 2

2

如果您知道每个输入字符都被翻译(不包含数字或其他字符),那么您可以将其反转如下:

decipher = dict(zip(numbs1,chars)) 
stringc = ''.join(decipher[stringb[i:i+2]] for i in range(0, len(stringb), 2));
print "Decoded: ", stringc

但是,如果单个输入字符没有被翻译,那么像这里这样的成对的字符是行不通的(因为每对字符在原始字符中不会排列成一个)。

于 2013-03-08T23:41:43.390 回答
1

障碍是如何将诸如“20051920”之类的字符串分解为两位数的列表。如果你克服了这个问题,你可以使用rechars2将其翻译回来。

我的解决方案使用正则表达式:

import re
stringb = '20051920'
print re.findall(r'\d\d', stringb) # ['20', '05', '19', '20']
于 2013-03-09T00:13:01.337 回答