求助:修改Python解密脚本实现全字母后移2位文本解密
文本解密脚本修正(字母后移2位)
你的脚本存在三个核心问题:
- 循环执行第一次迭代就直接return,导致仅处理了第一个字符
g就终止函数,其余字符完全没处理 - 直接调用
text.replace()修改整个字符串,每次循环会覆盖之前的结果,逻辑完全错误 - 未处理字母表边界情况:比如
y后移2位应该是a,z后移2位应该是b,而不是直接加2得到ASCII值更大的非字母字符
修正后的代码
text = "g fmnc wms bgblr rpylqyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb." def decipher_message(text): decrypted = [] for char in text: # 仅处理小写字母,如需兼容大写可补充对应判断 if 'a' <= char <= 'z': shifted_ord = ord(char) + 2 # 处理字母表边界,超出z则循环到开头 if shifted_ord > ord('z'): shifted_ord -= 26 decrypted.append(chr(shifted_ord)) else: # 非字母字符直接保留 decrypted.append(char) return ''.join(decrypted) # 执行并输出结果 print(decipher_message(text))
代码说明
- 用列表
decrypted逐个存储处理后的字符,避免频繁字符串拼接的性能问题,逻辑更清晰 - 仅对小写字母执行偏移操作,空格、标点、括号等非字母字符直接保留
- 通过判断偏移后的ASCII值是否超出
z的范围,减去26实现字母表循环(26为英文字母总数) - 最后通过
''.join()将列表拼接为完整的解密字符串
解密结果
i hope you didnt translate it by hand. thats what computers are for. doing it in by hand is inefficient and that's why this text is so long. using string.maketrans() is recommended.
内容的提问来源于stack exchange,提问作者josefine
相关产品推荐
相关产品推荐

