【问题标题】:Python For loops with while and if statements: Why doesnt it return in the first case?带有while和if语句的Python For循环:为什么它在第一种情况下不返回?
【发布时间】:2020-02-27 07:57:31
【问题描述】:

大家好,我知道这个问题可能看起来很愚蠢,但我才刚刚开始。这是 Python 3.7。
无论如何,我已经编写了 2 个版本的代码,第二个版本可以工作,但是我添加了另一个我认为不需要的 while 循环。为什么第一个版本不起作用?它迭代一个数字列表(nums)。

这是来自问题陈述: 编写一个函数,接收一个整数列表,如果按顺序包含 007,则返回 True。

  • spy_game([1,2,4,0,0,7,5]) --> 是的
  • spy_game([1,0,2,4,0,5,7]) --> 是的
  • spy_game([1,7,2,0,4,5,0]) --> 错误

我的第一个代码是这样的,它总是返回 False:

z = 0

for i in nums:
    while z < 2:
        if i != 0:
            break
        else:
            z += 1
            break
    if i != 7:
        break
    else:
        return True

return False

为什么会发生这种变化,让它发挥作用?

z = 0

for i in nums:
    while z < 2:
        if i != 0:
            break
        else:
            z += 1
            break
    while not z < 2:
        if i != 7:
            break
        else:
            return True

return False

非常感谢!

【问题讨论】:

  • 对于[1, 0, 3, 0, 7] 之类的列表,这也将返回true。而且由于您正在遍历列表,因此您根本不需要 while 语句 - 每个值都只是 while,这很奇怪,我认为您也会得到仅在 [0, 7] 上进行匹配,因为当 while 循环到达零时,它会将 z 增加到 2。

标签: python loops for-loop if-statement while-loop


【解决方案1】:

您的问题是您使用 while 循环的方式。只要满足条件,就会执行while循环中的代码。但是,您以各种方式在 while 循环内调用 break 或 return。 所以你真正想要使用的是 if 语句而不是 while 循环。然后 break 将按照您在第一个示例中的预期方式工作。 break 使程序跳出当前循环,即while-loop。但要使第一个示例正常工作,它应该跳出更高的 for 循环。使用 if 而不是 while 应该可以解决这个问题。

也许可以试试这样的:

z = 0

for i in nums:
   if z < 2:
      if i == 0:
         z += 1
   else:
      if i == 7:
         return True

return False

【讨论】:

  • 非常感谢您花时间回复。您的解决方案要好得多。你也让我思考,是的,我犯了一个大错误。请记住,我是新手:第一种情况总是返回 False,因为我将 IF 视为循环。我认为在 IF i !=7 之后中断,它会从 IF 中断并返回 FOR .. 我刚刚意识到中断正在中断 FOR 循环,从而在底部返回 False。这就是为什么在第二个示例中它确实有效的原因,因为 break 打破了第二个 WHILE 循环。无论如何,再次感谢,你帮了我很多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-07
  • 1970-01-01
  • 2020-08-08
  • 1970-01-01
  • 2019-07-07
相关资源
最近更新 更多