这是sum_divisors以0结尾的数字(45)的示例。例如:45-> 33-> 15-> 9-> 4-> 3-> 1-> ; 0 有些数字如(6)重复一遍直到没有结束。 我必须构建一个函数来检查数字是否是第一种情况(返回ture)或不是..
对于num = 4,函数is_finite返回False。想法为什么?
def is_finite(num):
x=0
while(num!=0 and x!=num):
x=num
num=sum_divisors(num)
if num==0 :
return True
else:
return False
def sum_divisors(n):
sum=1
x=int(n**0.5)
for i in range(2,(x//1)+1):
if n%i==0:
sum=sum+i
if n%i==0 and n/i!=i:
sum=sum+(n/i)
return int(sum)
答案 0 :(得分:2)
要返回true,sum_divisors必须返回0.但sum变量从1开始,只添加正数,因此函数永远不会返回0.
答案 1 :(得分:2)
首先定义get_divisors
函数:
def get_divisors(num):
return [i for i in range(1, num) if num % i == 0]
然后您的sum_divisors
功能就是:
def sum_divisors(num):
return sum(get_divisors(num))
制作is_finite
功能时,您需要缓存以前的结果,并检查是否重复了一个数字。
def is_finite(num):
previous = []
while num != 0:
if num in previous:
return False
previous.append(num)
num = sum_divisors(num)
return True
如果您不这样做,您将获得无限循环。