-2

所以我在学习python的过程中遇到了让我困惑的代码。

var = 95
for items in range(0,100):
    if var < 10:
        continue
    elif var == 10:
        print("hit")
    elif var > 10:
        print("passed")
    var = var + 1

我不明白为什么它不只是打印“通过”5 次……而是打印 100 次。

到底在做什么?如果我将 var 更改为 like (3),它会“继续”到下一个代码块吗?

4

5 回答 5

6

continue继续下一个循环迭代。请参阅文档

但是,在这种情况下,这并不重要,因为oontinue永远不会到达。 var从 95 开始,只能增加,所以永远不会小于 10。

这段代码有点奇怪,因为只有最后一个elif会执行。也许您打算var在循环中的某个地方使用?

于 2012-12-19T21:13:59.057 回答
2

正如 BrenBarn 所说,continue只是跳过循环的其余部分并继续下一次迭代。

但何时从 95 开始并不重要var,因为该代码永远不会到达。让我们追溯一下,看看会发生什么:

var = 95
First loop, items = 0:
   since var (95) > 10:
       print("passed")
   var = var + 1 = 96
Next loop, items = 1
   since var (96) > 10:
       print("passed")
   var = var + 1 = 97
...
100th loop, items = 99
   since var (194) > 10:
       print("passed")
   var = var + 1 = 195

如果我将 var 更改为 like (3),它会“继续”到下一个代码块吗?

不,它会继续while循环的下一次迭代——这意味着它会跳过该var = var + 1部分。如果您想跳出循环并转到下一个代码块,那就是break而不是continue.

现在,让我们追溯一下如果从 3 开始会发生什么:

var = 3
First loop, items = 0:
   since var (3) < 10:
       continue # skips to the next loop iteration
Second loop, items = 1:
   since var (3) < 10:
       continue # skips to the next loop iteration
...
Last loop, items = 99:
   since var (3) < 10:
       continue # skips to the next loop iteration

由于continue,它永远不会到达var = var + 1,所以它只是循环 100 次而不做任何事情。

这意味着,如果您尝试使用print(var)循环后的 a 来测试它,它看起来很像它只是跳到下一个代码块。但是,如果你把 a 放在print(items)那里,你会看到它是 99,而不是 0。或者,如果你print之前的东西continue,你会看到它发生了 100 次。

于 2012-12-19T21:31:59.567 回答
1

这个例子有点奇怪,因为你使用 var 和 items 的方式不同。让我重写这个例子更清楚一点。

for i in range(0,100):

    # If i is less than 10, do nothing.
    if i < 10:
        continue

    # If i equals 10, print "hit"
    if i == 10:
        print "hit"

    # If i is greater than 10, print "passed"
    if i > 10:
        print "passed"

这将输出:

hit
passed
passed
... (repeat 87 more times)

您的示例不仅运行五次的原因是因为您没有在 for 循环中使用变量 var 。由于 range(0, 100),您的 for 循环将发生 100 次,变量 item 每次递增。

要让它像您期望的那样发生五次,您需要在 range 函数中使用 var ,如下所示:

var = 95
for item in range(var, 100):
    if var < 10:
        continue
    elif var == 10:
        print("hit")
    elif var > 10:
        print("passed")
    var = var + 1
于 2012-12-19T21:32:36.460 回答
0

continue跳到循环的下一次迭代,而不执行任何其他语句。

在这种情况下,continue语句不会被命中,因为 var 从 95 开始并且只会递增。

于 2012-12-19T21:18:10.950 回答
0

我怀疑您的意思是在 var 达到 100 时将其重置为零?

于 2012-12-19T21:18:58.623 回答