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

如何在python中编写关于完美数字的代码?,python,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=su

我试图编写一个包含函数的代码,以便找到完整的数字(完美数:即=其分母总和的数字) 但我有点问题…你能帮我吗

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.")
L=[]
def分母(n):
k=1
而(int(k)
您的代码中有很多错误
L
必须在
分母中定义;您必须将
k
而不是
s
添加到
L
;在
while
中,必须增加
k
<代码>分母
必须返回除数列表;输入后必须将
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分母(n):
L=[]
k=1
而(k
但是,您可以减少代码,如:

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))  
def isPerfect(n):
如果(n<1):返回False
总和=0
对于范围(1,int(n/2+1))内的k:
如果n%k==0:
总和+=k
返回和==n
打印(iPerfect(6)和iPerfect(28))

您的代码中有很多错误
L
必须在
分母中定义;您必须将
k
而不是
s
添加到
L
;在
while
中,必须增加
k
<代码>分母
必须返回除数列表;输入后必须将
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分母(n):
L=[]
k=1
而(k
但是,您可以减少代码,如:

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))  
def isPerfect(n):
如果(n<1):返回False
总和=0
对于范围(1,int(n/2+1))内的k:
如果n%k==0:
总和+=k
返回和==n
打印(iPerfect(6)和iPerfect(28))

有了@Serenity的答案和对你帖子的评论,我想你已经具备了纠正代码错误所需的一切。让我再给你一条几乎可以满足你需求的线条:

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

如果n带有@Serenity的答案和你帖子的评论,则返回False。我认为你已经具备了纠正代码中错误所需的一切。让我再给你一条几乎可以满足你需求的线条:

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

如果n返回False,我认为这是解决此问题的更具Python风格的代码:

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

我认为,这是解决这个问题的更具Python风格的代码:

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

您的
k+1
似乎在while循环之外。它应该是
k+=1
isPerfect
@Anis中有两个返回语句:另外
k+1
即使在循环中也不会做任何有意义的事情。是的,我甚至没有注意到它实际上没有增加任何x)。您应该在分母函数中声明
L
,您的
k+1
似乎在while循环之外。它应该是
k+=1
isPerfect
@Anis中有两个返回语句:另外
k+1
即使在循环中也不会做任何有意义的事情。是的,我甚至没有注意到它实际上并没有增加任何x)。你应该在分母函数中声明
L
。@Serenity谢谢。你帮了大忙。问题解决了。谢谢:)n@Serenity谢谢。你帮了大忙。问题解决了。谢谢:)和Serenity一样的评论。完全数是正数。检查您的代码的
n==0
,它不会给出正确的答案。与sernity的注释相同。完全数是正数。检查代码的
n==0
,它不会给出正确答案。