【问题标题】:while loop works without conditionwhile 循环无条件工作
【发布时间】:2023-03-26 18:01:02
【问题描述】:

据我所知,while 语句需要条件才能工作,但在这里它没有任何条件;这怎么可能? while q: 是如何工作的?

代码如下: ...

q = set([])
for i in range(N):
    q.add((i, 0))
    q.add((i, M - 1))
    w[i][0] = h[i][0]
    w[i][M - 1] = h[i][M - 1]
for i in range(M):
    q.add((0, i))
    q.add((N - 1, i))
    w[0][i] = h[0][i]
    w[N - 1][i] = h[N - 1][i]

while q:
    ci, cj = q.pop()
    for ii, jj in ((0, 1), (0, -1), (1, 0), (-1, 0)):
        ni, nj = ci + ii, cj + jj
        if 0 <= ni < N and 0 <= nj < M:
            if w[ni][nj] != h[ni][nj] and (w[ni][nj] is None or w[ni][nj] > w[ci][cj]):
                w[ni][nj] = max(h[ni][nj], w[ci][cj])
                q.add((ni, nj))

【问题讨论】:

  • 问题不清楚

标签: python while-loop do-while


【解决方案1】:

while 循环评估它作为布尔值给出的任何表达式。 Python 中几乎所有的东西都有一个布尔值。空容器,例如set(),通常评估为False,而非空容器,例如具有至少一个元素的集合,评估为True

while q: 因此可以读作“q 不为空时循环”,即“只要q 不计算为布尔值False 就循环”。

顺便说一句,您编写的任何类的实例通常评估为True。您可以通过在您的类中实现 __bool__ 方法来修改它,该方法返回其他内容。

另外,q = set() 工作正常。不需要q = set([])

【讨论】:

  • 非常感谢!这不是很明显(说实话,非常不明显),python 文档在这种情况下没有帮助。
  • 不知道。我认为docs.python.org/3/reference/… 很清楚,但我明白这对于不熟悉该术语的初学者来说是相当技术性的。
【解决方案2】:

有一个条件。 只要集合 q 中有一个元素,循环就会迭代。

如果你这样写,你会得到类似的效果:

while len(q):
    # do something

甚至

while len(q) > 0:
    #do something

但是,这些表达式可能被视为有点多余。

【讨论】:

    猜你喜欢
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多