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

使用ord()与chr()解密凯撒密码出现乱码如何解决?

问题核心原因

  • 字符计算逻辑错误:你直接对ord(c)返回的ASCII原始值做加减取模,没有先偏移到字母表的0-25区间。比如大写字母A的ASCII值是65,直接计算的话得到的结果根本不在字母ASCII范围内,转出来都是不可读的控制字符,这是输出乱码的核心原因。
  • 分支逻辑错误:两个if判断是独立的,没有用elif关联。小写字母命中第一个if处理完成后,不会命中第二个大写判断,会触发第二个if对应的else分支,把原字符再追加一次,导致字符重复;只有非字母的空格、标点会被else正常保留,所以你样例输入的输出只剩空格和冒号。

修正后代码

decode = inpf.readlines()
for line in decode:
    output = ""
    for c in line:
        if c >= "a" and c <= "z":
            # 先转换为0-25的字母表偏移量再计算
            x = ord(c) - ord('a')
            x = (x + 23) % 26
            # 计算完成后加回对应ASCII基准值
            y = chr(x + ord('a'))
            output += y
        elif c >= "A" and c <= "Z": 
            # 大写字母使用A的ASCII值作为基准
            x = ord(c) - ord('A')
            x = (x + 23) % 26
            y = chr(x + ord('A'))
            output += y
        else:
            # 非字母字符直接保留
            output += c
    # readlines读取的行本身自带换行符,不需要额外加\n
    outf.write(output)

验证说明

拿样例输入第一个字符W验证:
ord('W')为87,减去大写基准ord('A')=65得到偏移量22,22+23=45,45模26等于19,19+65=84,对应字符T,和预期结果一致,全量处理后即可得到正确的The Lord Of The Rings:输出。

内容的提问来源于stack exchange,提问作者ser-kieran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:39:02