因此,我必须对数字输入进行解码。 1-26中的每个数字都对应于A-Z,例如1-A,2-B,... 26-Z。我做了一本涵盖这方面的字典。 我的输出必须是对数字进行解码后得出的文本。
例如,我的输入可以是:195318520
19
在我的字典中是S
,接下来我要取53
,所以我从E
打印了字母5
,然后31
,不是一样,所以我打印C
,下一个18
是R
,依此类推,直到得到SECRET
。 "00"
将是文本中的" "
,而"01"
将是"1"
... "09"
-"9"
。
所以我编写了这段代码,我知道它有点刺耳,但是以某种方式可以打印正确的东西,但最后却出错了。
from textwrap import wrap
import sys
sir=raw_input().strip('')
d= {"00":" ",'1':'A', '2':'B', '3':'C' , '4':'D' , '5':'E', '6':'F', '7':'G', '8':'H', '9':'I', "10":'J', "11":'K', "12":'L', "13":'M', "14":'N', "15":'O', "16":'P',"17":'Q', "18":'R', "19":'S', "20":'T', "21":'U', "22":'V',"23":'W', "24":'X', "25":'Y', "26":'Z' }
pair=wrap(sir,1)
d["01"]=d["1"]
d["02"]=d["2"]
d["03"]=d["3"]
d["04"]=d["4"]
d["05"]=d["5"]
d["06"]=d["6"]
d["07"]=d["7"]
d["08"]=d["8"]
d["09"]=d["9"]
for i in range(len(pair)):
pair[i:i+2]=[''.join(pair[i:i+2])]
pair[i]=pair[i].strip()
if pair[i] <= "26":
sys.stdout.write(d[pair[i]])
#print d[pair[i]]
else:
pair[i]=list(pair[i])
sys.stdout.write(d[pair[i][0]])
#print d[pair[i][0]]
pair.insert(i+1,pair[i][1])
输入:195318520
SECRETTraceback (most recent call last):
File "decodare.py", line 27, in <module>
sys.stdout.write(d[pair[i]])
KeyError: ''
我认为问题在于for
对其索引的编制过多,len(pair)
具有固定值,但是我的i
它是动态的,取决于所取的一对数字。
答案 0 :(得分:1)
我不确定您从textwrap
会获得什么好处,但是此功能可用于您的示例输入:
def parse(sir):
ret = []
taken = False
for index,n in enumerate(sir):
if not taken:
dbl = (''.join(sir[index:]) + '0')[:2]
val = int(dbl)
taken = True
if 1 <= val <= 26:
ret.append(chr(val + 64))
elif val == 0:
ret.append(' ')
else:
taken = False
val = int(n)
ret.append(chr(val + 64))
else:
taken = False
return ''.join(ret)
sir = '195318520'
print(parse(sir))
输出:
SECRET
答案 1 :(得分:0)
然后确定,继续使用wrap
和您的dict
:
d= {"00":" ",'1':'A', '2':'B', '3':'C' , '4':'D' , '5':'E', '6':'F', '7':'G', '8':'H', '9':'I', "10":'J', "11":'K', "12":'L', "13":'M', "14":'N', "15":'O', "16":'P',"17":'Q', "18":'R', "19":'S', "20":'T', "21":'U', "22":'V',"23":'W', "24":'X', "25":'Y', "26":'Z' }
d["01"]=d["1"]
d["02"]=d["2"]
d["03"]=d["3"]
d["04"]=d["4"]
d["05"]=d["5"]
d["06"]=d["6"]
d["07"]=d["7"]
d["08"]=d["8"]
d["09"]=d["9"]
def parse(sir):
ret = []
taken = False
for index,n in enumerate(sir):
if not taken:
dbl = (''.join(sir[index:]) + '0')[:2]
val = int(dbl)
taken = True
if 0 <= val <= 26:
ret.append(d[dbl])
else:
taken = False
val = int(n)
ret.append(d[n])
else:
taken = False
return ''.join(ret)
sir = '195318520'
pair=wrap(sir, 1)
print(parse(pair))
输出:
SECRET