为什么在类似的循环有效时此循环不起作用?

时间:2019-07-11 10:24:54

标签: python python-3.x

如果列表“数字”在某处的3旁边包含3,则此函数应返回True。

函数“ has_33”应接受列表参数,因此此循环可完美运行:-

def has_33(nums):
    for i in range(0, len(nums)-1):

        if nums[i:i+2] == [3,3]:
            return True  

    return False

但是当我以这种形式进行操作时:-

def has_33(nums):
    for i in range(0,len(nums)-1):  

        if nums[i:i+2] == [3,3]:
            return print("True")
        else:
            if i == len(nums)-1:
                return print("False")
  

如果数组不包含条件,则无法打印“ False”。

那么为什么第一个循环虽然相同,但第二个循环却不起作用?

2 个答案:

答案 0 :(得分:2)

您不应设置以下条件:

});

功能内。即使这样做,也请使用:

if i == len(nums)-1:

因为if i == len(nums)-2: 将永远不会成为i(请参见上面的循环条件)

答案 1 :(得分:1)

num == len(nums)-1从未求值True,因为num是一个列表,而不是整数。

更大的问题是,整个else子句是不必要的,因为您可以让python退出循环,然后执行print(“ False”)。此外,'我建议采用以下解决方案:

from itertools import tee


def has_33(nums):
    num1, num2 = tee(nums)
    next(num2)
    for a, b in zip(num1, num2):
        if [a, b] == [3, 3]:
            print("True")
            return
    print("False")