Python运行字符编码脚本时报string index out of range错误求排查
代码问题及修复方案
存在的问题
- 循环边界逻辑错误:Python 字符串索引从 0 开始,长度为
len(x)的字符串有效索引范围是0 ~ len(x)-1。你的 while 循环判断条件为y <= len(x),且循环内先执行y=y+1操作,最终会出现y = len(x)的情况,此时访问x[y]超出字符串索引范围,直接触发IndexError。 - 字符判断逻辑鲁棒性差:当前使用并列 if 逐一判断单字符,后续扩展其他字符映射时会大幅增加代码量;且未覆盖未定义字符的处理逻辑,遇到空格、a、b 之外的字符时不会向列表插入任何值,会导致输出列表和输入字符串长度不一致。
修复方案
优化写法(推荐)
使用 for 循环遍历字符串+字典映射实现功能,无需手动维护索引,彻底避免越界问题,后续扩展字符映射只需要修改字典即可:
# 字符与数值映射字典,新增映射只需在此追加键值对 char_map = { " ": 1000, "a": 1001, "b": 1002 } z = input("input the word:") x = z.strip() g = [] for char in x: # 未定义字符默认填充0,可根据需求修改默认值 g.append(char_map.get(char, 0))
保留原有while逻辑的最小修改
仅调整循环判断条件即可解决索引越界问题:
z=input("input the word:") x= z.strip() y= -1 g=[ ] # 将原条件y<=len(x)修改为y < len(x)-1 while y < len(x)-1: y=y+1 if x[y]==" ": g.insert(y,1000) if x[y]=="a": g.insert(y,1001) if x[y]=="b": g.insert(y,1002)
内容的提问来源于stack exchange,提问作者user17328377
相关产品推荐
相关产品推荐

