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

Python列表索引越界问题求助:字母右移加密程序报错排查

问题排查与解决

错误原因

出现IndexError是因为当输入字符为z时,alphabet.index(y)返回25(string.ascii_lowercase是a到z共26个字符,索引范围0-25),加1后得到26,超出了列表的最大索引25,直接触发越界错误。

修复方案

方案1:基于原代码调整

先解决越界问题,同时修正循环中变量修改无效的问题:

import string

alphabet = list(string.ascii_lowercase)
codelist = []

code = input("input text message: ")
# 直接遍历输入字符,无需提前转列表
for char in code:
    if char == " ":
        # 空格直接保留
        codelist.append(char)
    elif char in alphabet:
        # 用取模运算处理z的循环移位,(索引+1)对26取模
        idx = alphabet.index(char)
        new_char = alphabet[(idx + 1) % 26]
        codelist.append(new_char)

# 拼接并输出结果
print(''.join(codelist))

方案2:更高效的写法(推荐)

利用ASCII码直接计算,无需遍历字母表,逻辑更简洁:

code = input("input text message: ")
result = []
for char in code:
    if char == " ":
        result.append(char)
    elif 'a' <= char <= 'z':
        # 计算ASCII码,z的话转回a
        new_ord = ord(char) + 1
        if new_ord > ord('z'):
            new_ord = ord('a')
        result.append(chr(new_ord))
print(''.join(result))

额外说明

原代码里的嵌套循环完全没必要,不仅效率低,而且修改循环变量x不会改变codelist里的元素——x只是列表元素的临时副本,修改它对原列表没有任何影响。上面的方案直接处理每个字符并添加到结果列表,逻辑更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 01:05:22