【问题标题】:Why this loop doesn't work while the similar one works?为什么这个循环不起作用,而类似的循环起作用?
【发布时间】:2019-11-21 01:08:51
【问题描述】:

如果列表“nums”在某处的某个 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”。

那么为什么第一个循环可以工作,而第二个循环却不工作,尽管它们是相同的?

【问题讨论】:

  • num == len(nums)-1 中的num 是什么? return print() 也没有多大意义。您要打印false/true 还是退回?
  • 第一次迭代时似乎满足条件,然后函数返回,不再执行迭代
  • num 是在“for”循环中分配给列表“nums”中每个元素的变量
  • @AhmedAhmedEG2:与您在此处提供的代码不同。
  • 所以我说如果条件不满足,首先检查是否 num == len(nums)-1 然后它可以打印 False 因为这将确保循环完全完成它的 jop

标签: python python-3.x


【解决方案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")

【讨论】:

  • 你怎么知道num是一个列表?
  • OP 写道,num 参数是他问题初稿中的一个列表,它仍然作为“列表“nums””存在
  • 我修复了它,我忘记了我将 var 从“num”重命名为“i”,所以它更具可读性,“nums”是列表,“i”是分配的 var循环
  • OP 刚刚编辑了他的问题,并用if i == len(nums)-1 更正了“if num == len(nums)-1”。 OP可能会考虑保留原始版本,否则问题变得难以理解。
【解决方案2】:

你不应该把这个条件:

if i == len(nums)-1:

在你的函数中。即使你这样做,使用:

if i == len(nums)-2:

因为i 永远不会变成len(nums)-1(参见上面的循环条件)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    相关资源
    最近更新 更多