7

我似乎无法弄清楚为什么这是python中的无限循环?

for i in range(n):
    j=1
    while((i*j)<n):
       j+=1

外循环不应该走 n 次。每次递增 j 直到等于 n div i ?

4

9 回答 9

36

i开始于0,因此while条件始终为真;有关详细信息,请参阅范围文档

于 2010-01-12T17:42:13.277 回答
16

您可以创建一个“跟踪”来显示变量的状态变化。

  1. n = 5;我= 0
  2. n = 5;我= 0; j= 1
  3. i*j < n -> 0 < 5: n= 5; 我= 0; j= 2
  4. i*j < n -> 0 < 5: n= 5; 我= 0; j= 3
  5. i*j < n -> 0 < 5: n= 5; 我= 0; j= 4
  6. i*j < n -> 0 < 5: n= 5; 我= 0; j= 5
  7. i*j < n -> 0 < 5: n= 5; 我= 0; j= 6

等等

print您可以通过插入语句来证明您的跟踪是正确的。

如有疑问,请打印出来。

于 2010-01-12T18:27:06.320 回答
12

i从零开始,因此内部循环的条件始终为0*j < n,这将始终为真。

于 2010-01-12T17:43:05.563 回答
7

因为 的初始值为i0。

于 2010-01-12T17:42:43.167 回答
4

第一个值i将是 0。0 乘以任何值都是 0。

于 2010-01-12T17:42:49.917 回答
2

因为我是0!!并且 i*j=0

于 2010-01-12T17:43:16.657 回答
2

range(n)开始于0,不是10 * j将永远小于n

于 2010-01-12T17:43:18.713 回答
1

第一次通过外循环时,内循环变成无限循环。在那之后发生什么并不重要。没有“无限之后”。

于 2010-01-12T17:43:06.590 回答
0

i is 0 rewrite you loop like

for i in range(1,n):
j=1
while((i*j)<n):
   j+=1

使用此版本的 range 函数将创建一个从 1 而不是 0 开始的范围

于 2010-01-12T18:25:33.543 回答