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

凯撒密码解密程序异常:处理完列表首个元素后停止运行

凯撒密码解密程序修复方案

问题根源

你的代码只处理第一个字符串就停止,核心问题是**key变量的初始化位置错误**:

  • key定义在遍历字符串的for循环外面,处理第一个字符串时,while循环把key加到了27,后续字符串进入循环时,key <=26的条件不成立,直接跳过解密逻辑。
  • 另外,while循环的写法容易导致变量状态混乱,换成for循环遍历偏移量更可靠。

修正后的代码

import string

def decrypt(encrypted_list):
    alphabet = string.ascii_uppercase  # 提前定义字母表,避免重复创建
    # 遍历列表中的每个加密字符串
    for encrypted_str in encrypted_list:
        print(f"=== 解密字符串: {encrypted_str} ===")
        # 遍历所有可能的偏移量(0-25,0代表无偏移)
        for key in range(26):
            shifted = alphabet[key:] + alphabet[:key]
            shift_table = str.maketrans(alphabet, shifted)
            deciphered = encrypted_str.translate(shift_table)
            print(f"偏移量 {key}: {deciphered}")
        print()  # 空行分隔不同字符串的结果

encrypted_list = ["IRMAHG BL YNG", "UTGTGTL TKX RXEEHP", "VABVDXG BL YHHW"]
decrypt(encrypted_list)

关键改动说明

  • 将key的遍历改为在每个字符串循环内用for key in range(26),确保每个字符串都从偏移量0开始遍历所有可能。
  • 把字母表alphabet提到函数开头,避免每次循环重复创建,提升效率。
  • 增加了分隔输出,让不同字符串的解密结果更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:05:29