1


两个代码块不应该打印相似的结果吗?为什么每次到达内部for语句时都会重新评估内部循环内部的范围函数,而外部循环中的范围函数只评估一次?

x = 4
for j in range(x)
   for i in range(x)
       print i
       x = 2

结果
0
1
2
3
0
1
0
1
0
1

我知道打印的前 4 个整数 ( 0 - 3) 是 j in range(x): 代码的结果,但为什么还要打印以下内容?
0
1
0
1
0
1
代码

x = 4
for j in range(x):
    print i
    x = 5

打印
0
1
2
3

IDLE 中的附加信息 Python 2.7

4

5 回答 5

4

函数range(x)产生一个列表[0,1,2,3,4]。在for循环中,您遍历此列表。

您的代码相当于:

for j in [0,1,2,3]:
    for i in [0,1,2,3]:
        print i
    for i in [0,1]:
        print i
    for i in [0,1]:
        print i
    for i in [0,1]:
        print i
于 2013-03-28T16:39:42.623 回答
4

我只能通过遍历循环的迭代来解释,所以这里是:

x = 4
for j in range(x)
   for i in range(x)
       print i
       x = 2

第一次通过。

x = 4
for j in [0, 1, 2, 3]
    for i in range [0, 1, 2, 3]
        print i
        x = 2

印刷

0
1
2
3

现在 x 设置为 2,但外部循环范围已经执行,因此不会重新计算。

代码现在变为:

for j in [0, 1, 2, 3]:
    for i in [0, 1]:
        print i
        x = 2

印刷

0
1

这种情况又持续了两次。

于 2013-03-28T16:40:59.277 回答
0

range(x) 只计算一次,即循环开始时,这就是为什么在循环内修改 x 无效。

但是,在第一个代码时钟中,您在内部将 x 更改为 2,因此下一次执行内部循环时,范围仅给出 (0,1)。

编辑:您的第一个代码块相当于

x = 5
for i in range(x)
    print i
    x = 2
于 2013-03-28T16:42:09.983 回答
0

这是我的看法:

每次外循环迭代都执行内循环

x = 4
j = 0
for i in range (x):
    print(i)
    x = 2
j = 1
for i in range(x) # this x is no longer 4 but it is 2
    print(i)
    x = 2
j = 2
for i in range (x): # this x is, of course, 2
    print(i)
    x = 2
j = 3
for i in range (x): # this x is, of course, 2
    print(i)
    x = 2
于 2018-04-08T01:17:59.017 回答
-2

j 不打印,在“ for i in range(x):”之前插入“ print('xx', j, 'oo') ”

然后更改为“打印('xx',x,'oo')

或将 'for j in range(x):' 更改为 'for j in range(225,200,-5):' 后跟 'print(j)' before 'for i in range(x):'

于 2019-01-07T23:05:30.440 回答