Python使用replace方法替换字符串时字符丢失无法还原原始内容问题
问题诱因
你采用链式调用str.replace()的方式实现字母映射,后执行的替换规则会修改前面替换得到的结果,导致原本的双向对称映射被破坏。
举个直观的例子:你要实现x↔c的互换,但是你的加密链顺序是先执行replace("x","c"),再执行replace("c","x"):
- 原始字符为x:先被替换为c,后续又被替换回x,最终输出x
- 原始字符为c:前序规则不生效,最后被替换为x,最终输出x
此时x和c两个不同的原始字符加密后都得到x,自然无法通过反向操作还原为原始字符,这就是输出结果不符合预期的核心原因。
修复方案
最优方案是放弃链式replace的实现方式,改用字典映射的方式实现字符替换,每个字符仅做一次映射查询,不会出现二次替换的冲突问题。
修复后的参考代码如下:
message = "cypherpunk" # 构建加密映射表:a→z、b→y...z→a,#→! encode_map = {} for i in range(26): original_char = chr(ord('a') + i) target_char = chr(ord('z') - i) encode_map[original_char] = target_char encode_map['#'] = '!' # 直接反转加密映射表得到解密映射表 decode_map = {v: k for k, v in encode_map.items()} # 加密 new_message = [encode_map[letter] for letter in message] print(new_message) # 解密 decode = [decode_map[letter] for letter in new_message] print(decode)
运行后解密结果会正确输出原始字符串cypherpunk对应的字符列表。
内容的提问来源于stack exchange,提问作者Sid
相关产品推荐
相关产品推荐

