为何检测1,2,3连续序列的Python代码返回结果不符合预期?
问题分析与修复
首先,咱们先看看你写的代码:
def arrayCheck(nums): for i in range(len(nums)-2): if nums[i]==1 and nums[i+1]==2 and nums[i+3]==3: return True return False x=arrayCheck([1, 1, 2, 3, 1]) print(x)
核心错误点
你在判断连续序列的时候,索引用错了!要找连续的1、2、3,对应的索引应该是i、i+1、i+2,但你写成了nums[i+3]——这就相当于跳过了中间的位置,去检查第四个元素了!
比如你测试的数组[1, 1, 2, 3, 1],当循环到i=1的时候:
nums[1]是1,nums[2]是2,这俩都符合,但你去看nums[1+3]也就是nums[4],它的值是1,不是3,所以这个条件没触发。而正确的应该是检查nums[1+2]也就是nums[3],它的值正好是3,这时候就能返回True了。
修复后的代码
把*nums[i+3]改成nums[i+2]*就行:
def arrayCheck(nums): for i in range(len(nums)-2): if nums[i]==1 and nums[i+1]==2 and nums[i+2]==3: return True return False x=arrayCheck([1, 1, 2, 3, 1]) print(x) # 现在会输出True
额外小提醒
你的循环范围range(len(nums)-2)是完全正确的,因为这样能保证i+2不会超出数组的索引范围,避免出现索引越界的错误,这点做得很棒!
内容的提问来源于stack exchange,提问作者Ritesh Kumar
相关产品推荐
相关产品推荐

