Python 如何替换字典中所有出现的指定字符
我目前正在做一个加密解密程序。因此,我有一个原始字符串变量,然后使用字典将字符串转换为特殊字符串。现在,如果有人再次给我特殊的字符串,我该如何解密它?我正在尝试此代码,但它不起作用Python 如何替换字典中所有出现的指定字符,python,encryption,Python,Encryption,我目前正在做一个加密解密程序。因此,我有一个原始字符串变量,然后使用字典将字符串转换为特殊字符串。现在,如果有人再次给我特殊的字符串,我该如何解密它?我正在尝试此代码,但它不起作用 enc_str= "`~```~`~`````" # this is 0315 dnory = {'0': '~', '1': '~`', '2': '~``', '3': '~```', '4': '~````', '5': '~`````', '6': '~``````', '7': '~```````', '8
enc_str= "`~```~`~`````" # this is 0315
dnory = {'0': '~', '1': '~`', '2': '~``', '3': '~```', '4': '~````', '5': '~`````', '6': '~``````', '7': '~```````', '8': '~````````', '9': '~`````````'}
def decrypt(dnory,enc_str):
dec_list = []
dnory_reverse = dict([[v,k] for k,v in dnory.items()])
for key in dnory_reverse :
if(enc_str.find(key)>0) :
dec_list.append(dnory_reverse[key])
print(dec_list)
decrypt(dnory,enc_str)
您的编码很难区分0和1。例如,您将如何代表3015 但是,对于1到9,以下代码就足够了:
print(''.join(str(len(i)) for i in enc_str.split('~')))
输出:
1315
0315
如果您将密钥更改为此:
dnory = {'0': '~', '1': '~`', '2': '~``', '3': '~```', '4': '~````', '5': '~`````', '6': '~``````', '7': '~```````', '8': '~````````', '9': '~`````````'}
…有一种方法可以让它像这样工作:
enc_str= "~```~`~`````"
print(''.join(str(len(i)) for i in enc_str.split('~')))
输出:
1315
0315
我想你不明白这个密码 对于dnory_reverse中的所有密钥(对于所有加密的数字),检查enc_str是否包含此密钥,并将相关的解密数字附加到dec_列表中 结论:你忘记了秩序 我认为你应该把dnory改为:
dnory = {'0': '~`', '1': '~``', '2': '~```', '3': '~````', '4': '~`````', '5': '~``````', '6': '~```````', '7': '~````````', '8': '~`````````', '9': '~``````````'}
并使用enc_str上的split(“~”)获取加密数字列表
我想我不必描述接下来的步骤,但请记住,在dnory中有“~”项,而在使用split()创建的列表中不存在
有用链接:
-
-
PS
dict()不会按字母顺序对键进行排序,而是随机排序,因此代码会返回各种输出
# this is comment in Python
// not this
“不起作用”的确切含义是什么?你想在这里颠倒你的字典。你如何表示1315和3015?在你的原始逻辑中如何区分3015和415?我想你的意思是
0:'~'
?@Marcus.Aurelianus,是的,但是你如何区分它们?是的,不可能区分3015和415。@Marcus。不可能将任何数字与前一个数字后跟零或后面的数字2后跟两个零等区分开来@AshishAcharya所以现在我观察到的是,如果我将来完全使用另一种编码,我必须有一个分隔符来分隔字符串中的听写值。