无限循环调试
Infinite loop debug
我写了一个函数来判断某个数字是否是一个完美的数字:如果一个数字是一个完美的数字,如果它的所有因素的总和等于它自己。
函数如下:
def is_perfect(n):
l = [1]
temp = n
while temp != 1:
for i in range(2,n):
if temp % i ==0:
l.append(i)
temp = int(temp / i)
break
if sum(l)==n:
return True
else:
return False
我要根据输入return布尔值。
然后我想用一个for循环来找出我上面的函数的所有完美数字,但似乎有一个无限循环。我哪里错了?
a=[]
for x in range(1,1001):
if is_perfect(x):
a.append(x)
print([x for x in a])
当传入质数时,您的函数进入无限循环。这是因为您的 while 循环条件取决于 temp
在每次迭代时被修改,但是如果 n
是质数永远不会发生。原因在这一行:
if temp % i == 0:
当 n
为质数时,您的 if 语句块中的代码将被完全忽略,包括重新分配 temp
变量的行。
我写了一个函数来判断某个数字是否是一个完美的数字:如果一个数字是一个完美的数字,如果它的所有因素的总和等于它自己。
函数如下:
def is_perfect(n):
l = [1]
temp = n
while temp != 1:
for i in range(2,n):
if temp % i ==0:
l.append(i)
temp = int(temp / i)
break
if sum(l)==n:
return True
else:
return False
我要根据输入return布尔值。 然后我想用一个for循环来找出我上面的函数的所有完美数字,但似乎有一个无限循环。我哪里错了?
a=[]
for x in range(1,1001):
if is_perfect(x):
a.append(x)
print([x for x in a])
当传入质数时,您的函数进入无限循环。这是因为您的 while 循环条件取决于 temp
在每次迭代时被修改,但是如果 n
是质数永远不会发生。原因在这一行:
if temp % i == 0:
当 n
为质数时,您的 if 语句块中的代码将被完全忽略,包括重新分配 temp
变量的行。