Python

时间:2016-11-25 01:17:10

标签: python

这是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)

2 个答案:

答案 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

如果您不这样做,您将获得无限循环