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

凯撒密码解码正常但编码异常:部分字符解码后显示为Z的问题

凯撒密码编码后解码异常的修复方案

问题核心:你的代码里alphabet仅定义了小写字母集合,但编码消息包含大写字母,导致大写字母无法在alphabet中找到对应索引,最终触发异常,表现为解码时部分字符显示为"Z"。

修复步骤:

  • 扩展alphabet,同时包含大写和小写字母,比如alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  • 或者在处理字符时,先统一转换为小写(或大写),处理完成后再还原原大小写,避免索引查找失败

修正后的代码示例:

def caesar_cipher(text, shift, mode='encode'):
    alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
    result = ''
    for char in text:
        if char in alphabet:
            index = alphabet.index(char)
            if mode == 'encode':
                new_index = (index + shift) % len(alphabet)
            else:
                new_index = (index - shift) % len(alphabet)
            result += alphabet[new_index]
        else:
            # 非字母字符直接保留
            result += char
    return result

# 测试:偏移量10
shift = 10
original = "Hello WORLD!"
encoded = caesar_cipher(original, shift, 'encode')
decoded = caesar_cipher(encoded, shift, 'decode')
print(f"原文本: {original}")
print(f"编码后: {encoded}")
print(f"解码后: {decoded}")

说明:

  • 扩展后的alphabet覆盖了大小写字母,确保每个字母都能找到对应索引
  • 对非字母字符直接保留,不做处理,提升兼容性
  • 使用% len(alphabet)确保索引始终在有效范围内,避免越界错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:31:22