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

7

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

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

外层循环应该执行n次,每次将j增加n除以i的值,直到j等于n div i为止。

9个回答

36

i0 开始,因此 while 条件永远为真;有关详细信息,请参见range 文档


16
您可以创建一个“跟踪(trace)”,显示变量的状态更改。
  1. n= 5; i= 0
  2. n= 5; i= 0; j= 1
  3. i*j < n -> 0 < 5: n= 5; i= 0; j= 2
  4. i*j < n -> 0 < 5: n= 5; i= 0; j= 3
  5. i*j < n -> 0 < 5: n= 5; i= 0; j= 4
  6. i*j < n -> 0 < 5: n= 5; i= 0; j= 5
  7. i*j < n -> 0 < 5: n= 5; i= 0; j= 6
等等。
您可以通过插入print语句来证明跟踪正确。
在疑惑时,输出它。

在较大的程序中使用日志模块。您只需要修改一行就可以改变详细程度。 - Jesvin Jose

12

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


7
因为变量i的初始值为0。

4
< p > i 中的第一个值将为 0。0 乘以任何数都是 0。


2

因为i等于0!所以i*j等于0。


2

range(n)0开始,而非10 * j总是小于n


1

在外层循环的第一次迭代中,内层循环变成一个无限循环。之后发生什么都没有关系。不存在“无限之后”。


0

i 是 0,重写你的循环

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接