Python 我怎样才能创造空间;计数“;在这个脚本上为这个解密代码?

Python 我怎样才能创造空间;计数“;在这个脚本上为这个解密代码?,python,dictionary,encryption,Python,Dictionary,Encryption,这是Alexandre B.在我上一篇文章中编写的代码: # Your dict code_2 = {14: 'a', 15: 'b', 16: 'c', 24: 'd', 25: 'e', 26: 'f', 34: 'g', 35:'h', 36: 'i', 44: 'j', 45: 'k', 46: 'l', 54: 'm', 55: 'n', 56: 'ñ', 64: 'o', 65: 'p', 66: 'q', 74: 'r', 75: 's', 76: 't',

这是Alexandre B.在我上一篇文章中编写的代码:

# Your dict
code_2 = {14: 'a', 15: 'b', 16: 'c', 24: 'd', 25: 'e', 26: 'f', 34: 'g',
     35:'h', 36: 'i', 44: 'j', 45: 'k', 46: 'l', 54: 'm', 55: 'n',
     56: 'ñ', 64: 'o', 65: 'p', 66: 'q', 74: 'r', 75: 's', 76: 't',
     84: 'u', 85: 'v', 86: 'w', 94: 'x', 95: 'y', 96: 'z'}

def decode_word(text):
# Check then length or the string
 if len(text) %2 != 0:
    raise ValueError("Text incorrect (must have a even length)")

# Split to a list of 2 numbers
text_l = ["".join([a,b]) for a,b in zip(text[::2], text[1::2])]

# Rebuild the world
word = "".join([code_2.get(int(key), "") for key in text_l])

# Check if all keys have been found
if len(word) < len(text)//2:
    print("WARNING: Some keys doesn't belong to 'code_2'.")
return word
#你的口述
代码2={14:a',15:b',16:c',24:d',25:e',26:f',34:g',
35:'h',36:'i',44:'j',45:'k',46:'l',54:'m',55:'n',
56:'ñ',64:'o',65:'p',66:'q',74:'r',75:'s',76:'t',
84:'u',85:'v',86:'w',94:'x',95:'y',96:'z'}
def解码字(文本):
#然后检查长度或字符串
如果len(文本)%2!=0:
raise VALUERROR(“文本不正确(长度必须为偶数)”)
#拆分为2个数字的列表
text_l=[“”。在zip中为a,b连接([a,b])(text[::2],text[1::2])]
#重建世界
word=“”.join([code_2.get(int(key),“”)表示输入文本)
#检查是否已找到所有钥匙
如果len(word)
问题是,假设我想“解密”以下内容:“352546464 156415”(你好,鲍勃) 如果我在输入中输入这些数字,它会给出一个错误(“警告:某些键不属于‘代码2’”)。 我相信这是因为它不能识别“空格”作为代码2上的键

有没有一种方法可以让我用空格和all来解密句子,而不会出现这个错误?可能部分代码或全部代码都需要更改,我不介意,我只是希望它能正常工作


感谢您使用advanced:)

一种方法是在\d+上使用正则表达式匹配,然后对每个捕获组分别“解密”它。见例

这可能是在
decode\u语句
方法中,该方法将调用单个匹配的
decode\u单词
。(或:选择您自己的姓名。)

这种方法还允许使用其他标点符号,与拆分和联接不同,它不会“吃掉”或改变空格。

def decode_句子(句子):
#把句子分成几个词
单词=句子
#解码单词并使用join来重建句子
返回“”。加入([对word中的word进行解码])
Pythons
str.split()。
然后,您可以使用
decode\u word
功能对每个单词进行解码,然后
将它们重新连接起来,并在它们之间加上空格

完整示例:

#你的口述
代码2={14:a',15:b',16:c',24:d',25:e',26:f',34:g',
35:'h',36:'i',44:'j',45:'k',46:'l',54:'m',55:'n',
56:'ñ',64:'o',65:'p',66:'q',74:'r',75:'s',76:'t',
84:'u',85:'v',86:'w',94:'x',95:'y',96:'z'}
def解码句子(句子):
#把句子分成几个词
单词=句子
#解码单词并使用join来重建句子
返回“”。加入([对word中的word进行解码])
def解码字(文本):
#然后检查长度或字符串
如果len(文本)%2!=0:
raise VALUERROR(“文本不正确(长度必须为偶数)”)
#拆分为2个数字的列表
text_l=[“”。在zip中为a,b连接([a,b])(text[::2],text[1::2])]
#重建世界
word=“”.join([code_2.get(int(key),“”)表示输入文本)
#检查是否已找到所有钥匙
如果len(word)
然后您可以运行:

decode_sentence('1415 1624')

>>>'ab cd'

如果您只想翻译编码的数字部分,请使用正则表达式捕获数字,然后编写一个函数处理单个单词并返回翻译
re.sub
然后可以进行替换。我还制作了一个编码器:

重新导入
代码2_decode={14:a',15:b',16:c',24:d',25:e',26:f',34:g',
35:'h',36:'i',44:'j',45:'k',46:'l',54:'m',55:'n',
56:'ñ',64:'o',65:'p',66:'q',74:'r',75:'s',76:'t',
84:'u',85:'v',86:'w',94:'x',95:'y',96:'z'}
#要测试编码,请构建一个代码点以替换映射。
#条目看起来像{'a':'14','b':'16',…}
code_2_encode=dict({k:f'{v:02d}表示k,v在zip中(code_2_decode.values(),code_2_decode.keys())})
#str.translate将Unicode序号映射到字符串。构建所需的地图。
#条目看起来像{97:'14',98:'15',…}
#注:U+0097是“a”的Unicode序号,U+0098是“b”的Unicode序号。。。
code_2_xlat=str.maketrans(code_2_encode)
def编码:
返回s.translate(代码为2)
def解码:
#在一个“字”上工作的替换函数
def更换(m):
word=m.group(0)
如果len(word)%2:
raise VALUERROR('字长必须为偶数')
#使用列表理解遍历“word”字符串
#一次两个字符。将两个字符串转换为
#一个整数,然后查找替换项。最后,加入一切
#一起。
返回“”。join([code\u 2\u decode[int(word[i:i+2])]
对于范围内的i(0,len(word),2)])
#匹配数字字符串并对字符串调用替换函数。
返回re.sub(r'\d+',替换,s)
test_string='hello bob'
打印(编码(测试字符串))
打印(解码(测试字符串))
test_string='hello,world!'
打印(编码(测试字符串))
打印(解码(测试字符串))
输出:

3525464664 156415
你好,鲍勃
3525464664, 8664744624!
你好,世界!

是不是根据你的钥匙将“你好,鲍勃”
翻译成了
“352546464 156415”
?是的,我正在使用另一个Dict。已经修复,谢谢!我不太明白,这个“解码句子(句子)”会在代码中放在哪里。我是编程新手,所以有些事情我很难理解undertand@BobEk我已经用一个完整的例子更新了我的答案,包括你的代码
decode_sentence('1415 1624')

>>>'ab cd'