You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 14:27:08