Python判断连续's'代码报IndexError:原因及修复咨询
问题分析与修复:检测连续's'的代码报错
错误原因
你的代码触发IndexError: list index out of range的核心原因是索引越界:
- 循环用了
range(len(word)),意味着i会遍历从0到len(word)-1的所有索引。当i取到最后一个元素的索引(len(word)-1)时,word[i+1]试图访问列表不存在的位置(列表最大索引就是len(word)-1),直接引发索引越界错误。 - 同时代码还有逻辑缺陷:只要遇到单个's'就立刻输出结果,会导致提前终止判断(比如字符串是"sxs",第一个's'后不是's'就会直接输出"no hiss",忽略后面可能的连续's'),而且会多次打印结果。
修复方案
方案1:最简洁的Pythonic写法
直接利用字符串的in操作符检测是否包含连续的"ss",无需转列表或循环,代码简洁高效:
word = input().strip() print("Hiss" if "ss" in word else "No hiss")
方案2:修复原循环逻辑
如果想保留循环的思路,需要调整循环范围并修正判断逻辑:
word = list(input().strip()) has_double_s = False # 循环只到倒数第二个元素,避免i+1越界 for i in range(len(word) - 1): if word[i] == 's' and word[i+1] == 's': has_double_s = True break # 找到后立刻终止循环,无需继续检查 print("Hiss" if has_double_s else "No hiss")
- 循环范围改为
range(len(word)-1),确保i+1始终是有效的列表索引 - 用一个标记变量记录是否找到连续's',循环结束后统一输出结果,避免多次打印或提前误判
内容的提问来源于stack exchange,提问作者Pantea
相关产品推荐
相关产品推荐

