如何修正文本密码程序解密输出顺序及语法排版问题?
问题解答
一、修正密码程序的解密错误
你的解密逻辑错误在于遍历顺序:当前代码先按字母顺序遍历所有字母键,再遍历解密后的数字,导致匹配到的字母会按a-z顺序拼接,而非原输入的顺序。
修正方案:
- 建立数字到字母的反向映射字典,避免每次遍历所有字母查找,提升效率同时保证顺序;
- 遍历解密后的数字列表,按顺序查找对应的字母并拼接。
修正后的完整代码:
import string chars = [c for c in string.ascii_lowercase] nums = [n for n in range(1, 27)] # 正向映射:字母→数字 plain_cipher = dict(zip(chars, nums)) # 反向映射:数字→字母(用于快速解密) cipher_plain = dict(zip(nums, chars)) prompt = input("Enter a word to cipher > ") # 加密部分(保持不变) print('Ciphering ... ') cipher = [str(plain_cipher[char]+1) for char in prompt] print('-'.join(cipher)) # 解密部分(修正逻辑) print('Deciphering ... ') # 先拆分加密字符串为单个数字字符串,再转成数字并减1 decipher_nums = [int(num_str) - 1 for num_str in cipher] # 按顺序遍历解密后的数字,从反向字典取对应字母 text = ''.join([cipher_plain[num] for num in decipher_nums]) print(text)
关键修改点:
- 新增
cipher_plain反向字典,直接通过数字查找字母,无需嵌套循环; - 解密时按
decipher_nums的顺序(即原输入的顺序)逐个拼接字母,保证输出顺序正确。
二、解密后文本的语法层面重新排列
如果修正解密逻辑后,文本仍存在语法问题(比如原加密文本本身语法混乱,或解密后出现语序/标点错误),可以按以下方式处理:
- 手动调整:根据语境修正语序、补充标点符号,这是最直接的方式;
- 利用NLP工具:如果是大量文本,可以使用如
spaCy、HanLP(中文)等自然语言处理库,对文本进行句法分析后调整语序、修正语法错误; - 规则匹配:针对特定场景(比如固定格式的文本),编写正则表达式或规则模板,批量修正语法问题。
内容的提问来源于stack exchange,提问作者d0ntr13
相关产品推荐
相关产品推荐

