Python while转for循环报IndexError索引越界错误求解
报错原因
触发 IndexError: string index out of range 的核心原因有两个:
- 循环判断逻辑位置错误:外层
while i < len(words)的判断仅在每次启动内层for循环前执行一次,不会在内层for循环每次i自增时做校验。words值为"secret",长度为6,有效索引范围是0-5,当i已经累加到等于len(words)时,内层for循环还在继续遍历text剩余字符,此时执行words[i]就会访问不存在的索引,直接触发越界。 - 原有嵌套循环逻辑本身存在缺陷:每次进入while循环,内层for都会从头遍历整个text字符串,会导致结果中重复追加大量重复字符,就算修复越界问题,输出结果也完全不符合预期。
改写为for循环的正确实现
不需要嵌套while+for的冗余结构,直接用单次for循环遍历text即可,把索引校验逻辑放到每次循环的判断条件里,从根源避免越界,同时保证只遍历一次text,逻辑更简洁:
text_final = [] text = "somewackyrunesatouristfound" words = "secret" match_index = 0 # 记录当前待匹配的words字符位置 for char in text: # 未匹配完所有目标字符且当前字符匹配时,转大写并移动匹配指针 if match_index < len(words) and char == words[match_index]: text_final.append(char.upper()) match_index += 1 else: text_final.append(char) # 拼接列表为字符串输出 print(''.join(text_final))
运行后会按顺序在text中查找"secret"的对应字符,匹配到的字符自动转大写,其余字符保持原样,无索引越界问题。
内容的提问来源于stack exchange,提问作者chaft
相关产品推荐
相关产品推荐

