为什么这是python中的无限循环?

时间:2010-01-12 17:40:27

标签: python loops infinite-loop

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

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

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

9 个答案:

答案 0 :(得分:36)

i0开始,因此while条件始终为真;有关详细信息,请参阅range docs

答案 1 :(得分:16)

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

  1. n = 5; i = 0
  2. n = 5; i = 0; j = 1
  3. i * j&lt; n - &gt; 0&lt; 5:n = 5; i = 0; j = 2
  4. i * j&lt; n - &gt; 0&lt; 5:n = 5; i = 0; j = 3
  5. i * j&lt; n - &gt; 0&lt; 5:n = 5; i = 0; j = 4
  6. i * j&lt; n - &gt; 0&lt; 5:n = 5; i = 0; j = 5
  7. i * j&lt; n - &gt; 0&lt; 5:n = 5; i = 0; j = 6
  8. 您可以通过插入print语句来证明您的跟踪是正确的。

    如有疑问,请将其打印出来。

答案 2 :(得分:12)

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

答案 3 :(得分:7)

因为i的初始值为0。

答案 4 :(得分:4)

i中的第一个值为0,任何值为0。

答案 5 :(得分:2)

因为我才0!并且我* j = 0

答案 6 :(得分:2)

range(n)0开始,而不是10 * j始终小于n

答案 7 :(得分:1)

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

答案 8 :(得分:0)

我是0重写你像

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

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

的范围