凯撒密码解密程序异常:处理完列表首个元素后停止运行
凯撒密码解密程序修复方案
问题根源
你的代码只处理第一个字符串就停止,核心问题是**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
相关产品推荐
相关产品推荐

