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