如何在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
,它不会给出正确答案。