Python字符替换加密后解密功能失效页面无输出问题求助
问题原因分析
1. 解密结果不显示的直接原因
你在decrypted函数的render方法中没有将处理后的文本变量传递给模板,模板中{{ftext}}没有对应的数据,自然不会显示内容。
2. 解密逻辑本身存在错误
就算补全传参逻辑,你的解密代码也无法得到正确结果:
- 当前的替换顺序是从短符号串(
#.对应a)到长符号串(##.对应b以此类推),但短符号串是长符号串的子集 - 比如对应b的
##.会在第一步替换#.时,被匹配到前两个字符的#.替换为a,最终变成a#,后续长串的替换完全无法命中,解密结果全错。 - 正确的替换顺序应该从最长的符号串开始倒序替换,也就是先替换z对应的26个
#加.的串,再替换y的,最后替换a的,避免短串提前匹配破坏长串结构。
更简便的实现方案
不用手写26行替换逻辑,利用ASCII码计算就能实现加解密:
加密逻辑优化
def encrypted(request): text = request.GET['text'] encrypted_text = "" for c in text.lower(): if c.islower(): # 仅处理字母,非字母可按需调整保留逻辑 count = ord(c) - ord('a') + 1 encrypted_text += '#' * count + '.' else: encrypted_text += c return render(request, 'encrypted.html', {'text': encrypted_text})
解密逻辑优化
完全不用逐字符替换,按.分割后统计#的数量即可:
def decrypted(request): ftext = request.GET['text'] decrypted_text = "" # 按.分割,过滤掉最后因为末尾.产生的空串 parts = [p for p in ftext.split('.') if p] for part in parts: if all(c == '#' for c in part): # 验证是否为合法的加密片段 count = len(part) decrypted_text += chr(count + ord('a') - 1) else: decrypted_text += part + '.' # 非加密内容原样恢复 # 补全参数传递 return render(request, 'decrypted.html', {'ftext': decrypted_text})
内容的提问来源于stack exchange,提问作者theonlymoby
相关产品推荐
相关产品推荐

