如何在python中编写关于完美数字的代码?

时间:2017-04-14 08:51:49

标签: python

我试图编写一个包含函数的代码,以便找到完整的数字(完整数字:数字=它的分母'总和) 但我遇到了一些问题......你能帮助我吗?

L=[]
def denominator(n):

    k=1
    while(int(k) < int(n)):
        s=int(n%k)
        if(s==0):
            L+=[s]
    k+1
    return L

def isPerfect(n):

    return denominator(n)
    a=sum(L)
    return(a==n)   

n=input("enter a number:")

if(isPerfect(n)):

    print("it is perfect.")
else:
    print("it's not perfect.")

3 个答案:

答案 0 :(得分:1)

通过@Serenity的回答以及对您帖子的评论,我认为您拥有纠正代码中错误所需的一切。让我也给你这个几乎一行做你想做的事情:

def is_perfect(n):
    return False if n <= 0 else (sum([s for s in range(1, n) if n%s == 0]) == n)

答案 1 :(得分:1)

我认为,对于这个问题,这是更多的pythonic代码:

if sum([x for x in range(1,n) if n%x==0])==n and n>0:
     print "complete"
else:
     print " Not complete"

答案 2 :(得分:0)

您的代码中存在很多错误。必须在L中定义denominator;您必须将k而不是s添加到L;在while中,您必须增加k; denominator必须返回分隔符列表;您必须在输入后将n转换为int,并且足以检查分频器直到[n / 2 + 1]。删除这些印刷错误后,您的代码将起作用:

def denominator(n):
    L = []
    k=1
    while(k < int(n/2.+1)):
        if(n%k==0):
            L+=[k,]
        k=k+1
    return L

def isPerfect(n):
    L = denominator(n)
    a=sum(L)
    return(a==n)   

n=input("enter a number:")

if(isPerfect(int(n))):
    print("it is perfect.")
else:
    print("it's not perfect.")

但是,您可以减少代码,如:

def isPerfect(n):  
    if (n < 1): return False
    sum = 0  
    for k in range(1, int(n/2+1)):  
        if n % k == 0:  
            sum += k  
    return sum == n  
print(isPerfect(6), isPerfect(28))