Python编写解码器出现List index out of range索引越界报错如何处理
问题原因
- 核心问题是
CodeNum变量为全局初始化,处理完前一个编码词后不会自动重置:每次内层循环遍历CodeWordsUpC时都会从上一次停下的位置继续递增,不会从头匹配新输入的编码词 - 硬编码的循环上限
55不符合实际列表长度:你提供的LettersUpC只有31个元素,对应的CodeWordsUpC长度大概率和它一致,远小于55,当CodeNum递增超过列表实际长度时,访问索引就会触发越界报错 - 没有做编码词不存在的兜底判断:如果输入的编码词根本不在
CodeWordsUpC里,内层循环会把CodeNum加到超过列表长度,下次访问索引直接报错
修复方案
最小改动版本(保留原有逻辑)
while RTs < 9: CodeNum = 0 # 每次处理新编码词前重置索引,从头开始匹配 CodeWord = str(input("Code-word: ")) Stop = ["Stop", "Exit", "End", "Terminate"] if CodeWord in Stop: break # 循环上限改成列表实际长度,避免硬编码错误 while CodeNum < len(CodeWordsUpC): if CodeWord == CodeWordsUpC[CodeNum]: output.append(LettersUpC[CodeNum]) break else: CodeNum = CodeNum + 1 # 加兜底判断,编码词不存在时给提示 else: print(f"输入的编码词{CodeWord}不存在,请重新输入") RTs = RTs + 1
优化版本(用内置方法简化逻辑)
while RTs < 9: CodeWord = str(input("Code-word: ")) Stop = ["Stop", "Exit", "End", "Terminate"] if CodeWord in Stop: break if CodeWord in CodeWordsUpC: idx = CodeWordsUpC.index(CodeWord) output.append(LettersUpC[idx]) else: print(f"输入的编码词{CodeWord}不存在,请重新输入") RTs = RTs + 1
内容的提问来源于stack exchange,提问作者Samuel Sargent
相关产品推荐
相关产品推荐

