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

凯撒密码(Caesar cipher)程序解码时y、z字符输出错误求解

问题根源

你的decode函数的边界调整逻辑完全错误,和实际需要的判断条件相反:

  • 加密时是给字符ASCII值加移位key,超出字母表上限(z/Z的ASCII值)时才需要减26回绕,你这块的逻辑是对的
  • 解密时是给字符ASCII值减移位key,此时只会出现*低于字母表下限(a/A的ASCII值)*的情况,你仍然沿用了加密时判断是否超出上限的逻辑,该调整条件永远不会触发,小于a/A的ASCII值会直接转换为字母以外的符号,就出现了你遇到的y、z解密后输出_、`的问题。

拿你测试用的输入举例:
加密后的小写b对应ASCII值98,减移位值3得到95,95小于小写a的ASCII值97,你原来的判断条件是cipher_value > ord("z"),显然不成立,不会做任何调整,95对应的字符就是下划线,和你的测试结果一致。

修正后的decode函数代码

def decode(message, key):
    """传入加密后的字符串,返回解密后的原始字符串"""
    decoded_message = ""
    for char in message:
        if char.isalpha():
            cipher_value = ord(char) - key
            if char.islower() and cipher_value < ord("a"):
                # 小写字母低于a时加26回绕到字母表末尾
                cipher_value = cipher_value + 26
            if char.isupper() and cipher_value < ord("A"):
                # 大写字母低于A时加26回绕到字母表末尾
                cipher_value = cipher_value + 26
            decoded_message += chr(cipher_value)
        else:
            decoded_message += char
    return decoded_message

修正后再用你的测试用例运行,解密bcbc就会正确返回原始的yzyz。

内容的提问来源于stack exchange,提问作者bbrichardbb

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 03:42:02