如果在'for'循环中使用'for'函数,它是如何工作的?

时间:2011-12-25 04:02:35

标签: python for-loop

我正在使用python文档开始学习所有内容,并在所述'for'循环中引入了带有'for'函数的'for'循环。我做了很多解释,因为我很难跟上术语,所以我只会告诉你:

for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print n, 'equals', x, '*', n/x
            break
        else:

            print n, 'is a prime number'

我理解if / else循环和break语句。我看到它以某种方式生成2到10之间的素数。除此之外,我有点迷失这个例子。文档变得难以忍受,我现在几乎无法理解它。我只是希望有人可以用稍微简单的术语来解释这个问题

4 个答案:

答案 0 :(得分:2)

for n in range(2, 10):

意味着n将采用2 - 10的值,一次一个,并且每次采用新值时,运行内部循环。

内环,

for x in range(2, n):

表示x将采用2 - n的值,一次一个,并执行其内部,if / else。

所以外循环从2开始,所以n = 2.内循环从2-n迭代,n = 2,所以2-2,所以一次。

然后控制传递回外部循环,n递增,内部循环现在从2-n执行,n为3.因此x取值2,然后是3,因为n是3,传回外循环,依此类推。

以下是一些流程:

:start outer, n = 2
:goto inner, x will range from 2 - 2, so x = 2, x hits max for the inner loop
:goto outer, n = 3
:goto inner, x will range from 2 - 3, so x = 2, iterate once, x = 3, x hits max for inner loop
:goto outer, n = 4
:repeat

答案 1 :(得分:2)

首先 的第一件事不是函数,而是构造。另外,if / else不是循环而是分支构造

考虑带标签的代码

for n in range(2, 10): # this is the outer loop
    for x in range(2, n): # this is the inner loop 
                          #(this is where the code is checking whether n is prime)
        if n % x == 0: #checking is x divides n
            print n, 'equals', x, '*', n/x
            break
        else:

            print n, 'is a prime number'

接下来,外部 for循环从2到10迭代。循环的每次迭代都有另一个内部 for循环。这个内部循环从2迭代到那个数字并检查是否可以检查变量n(外部循环)是否为素数。

例如:

For the first iteration
n=2
x=nothing

,然后

n=3
x=2

n=4
x=2,3

等等。

只是添加python,与其他流行语言不同,for循环不会增加变量。相反,它只是从您指定的列表/数组中一次选择一个值(例如:范围(2,10)在这种情况下是一个数组[2 3 4 5 6 7 8 9]

答案 2 :(得分:2)

我肯定会同意@Josh和@ g.d.d.c的答案,但还需要解释一下,以了解for循环结构,以及它的功能究竟是什么。但要做到这一点,我必须谈谈可迭代对象是什么。


Python的for循环与其他语言(例如Java)的工作方式不同。这里的for循环需要他们可以迭代的东西。这意味着三种数据类型(通常):列表,元组和字典。所有这三个都具有可以迭代的值,因此for循环可以正常工作。

range(a, b, s)函数将生成范围[a,b)中的值列表,可选地具有跳过值s。由于列表是可迭代的,我们可以将它与for语句一起使用。

当您嵌套 for语句时,您正在执行嵌套循环。最快for语句将最常运行。您可以将嵌套循环与模拟时间片进行比较 - 秒针是最里面的for,分针是高于该值的水平,而时针是高于该值的水平。

现在,进入这个例子。在外部for循环中,我们将从可迭代列表中获取的每个值绑定到变量 - 在本例中为n。当我们开始循环时,n == 2。我们来到内部for循环,注意我们将变量x绑定到列表[2, 2),这将是空的 - 在{{1}中具有相同的起点和终点不返回任何东西。所以第一次,我们会跳过内循环。

一旦我们完成内部循环,我们回来重复外循环。现在,range()。我们来到内部循环,并将n == 3绑定到可迭代范围x中的第一个值,即[2, 3)。然后,我们按照2语句的预期执行内部操作。

当我们最终到达if时的点(最大值;记住,由于范围限制,n == 9在此示例中永远不能等于10),n将被绑定到可迭代范围x的第一个值。因此[2, 9)将从2开始,然后移至3,依此类推。

如果您想详细了解x循环的工作方式,我建议您查看list comprehensions,甚至引用Dive into Python's section on lists

答案 3 :(得分:1)

当你嵌套for循环时,内循环会在外循环的每一轮中重复。所以,对于你的例子,它是这样开始的:

for x in range(2, 2):

然后进入

for x in range(2, 3):

等等。对于外环的每个步骤,每个内环增长一步。因为break在内部循环内,所以无论内部循环break多少次,外部循环都将完整运行。