Python连续三字符检测函数问题:为何无法识别后续连续序列?
修复Python consec函数的连续三字符检测问题
原函数的核心问题是循环内过早返回False:第一次循环(i=0)时,只要开头三个字符不匹配,就直接返回False,导致后续位置的字符完全没有被检查。同时原代码还存在索引越界风险——当字符串长度小于3时,n[i+2]会抛出IndexError。
修改方案一:调整循环范围与返回逻辑
def consec(n): # 限制循环范围,避免访问超出字符串长度的索引 for i in range(len(n) - 2): if n[i] == n[i+1] == n[i+2]: return True # 遍历完所有可能位置后仍未找到,才返回False return False
关键改动说明:
- 循环范围修正:
range(len(n)-2)确保i+2不会超出字符串的最大索引(当字符串长度小于3时,len(n)-2为负数,循环直接跳过)。 - 返回位置调整:将
return False移到循环外部,只有当所有可能的连续三字符组合都检查完毕且未匹配时,才返回False。
修改方案二:使用any()函数简化实现
如果追求代码简洁性,可以用any()函数结合生成器表达式,逻辑与方案一完全一致,但代码更紧凑:
def consec(n): return any(n[i] == n[i+1] == n[i+2] for i in range(len(n)-2))
测试验证
consec("AAABC")→True(开头匹配)consec("ABCCC")→True(中间位置匹配)consec("ABBC")→False(无连续三字符)consec("A")→False(短字符串安全处理)
内容的提问来源于stack exchange,提问作者Adam Cora
相关产品推荐
相关产品推荐

