凯撒密码解码正常但编码异常:部分字符解码后显示为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
相关产品推荐
相关产品推荐

