我自己用Python理解和应用这个练习有困难。我得到了这个:TypeError: '<' not supported between instances of 'int' and 'NoneType'
这是练习算法:
定义:如果一个整数等于它的所有约数之和,则称它为完美整数。例如:6和28是完美的,因为6 = 1+2+3(知道1,2和3是6小于6的约数)28= 1+2+4+7+14(知道1,2,4,7和14是28小于28的约数)
1.创建一个函数liste_divisors(),它接受一个整数N作为参数,并返回小于N(包括1)的除数列表。
1.使一个函数是完美的(),它接受一个(正)整数N作为参数,如果它是完美的,则返回“True”,否则返回“False”(使用第一个问题中的函数)
1.创建一个PerfectList()函数,该函数接受Limit参数,然后返回一个包含小于Limit的完全数的列表
我对最后一个问题有疑问
这是我到目前为止的尝试,但有错误,我如何才能纠正这些错误?
def liste_diviseur(N):
t = []
for i in range(1,N):
if(N%i == 0):
t.append(i)
return t
def est_parfait(M):
s = 0
for i in liste_diviseur(M):
s += i
if(s == M):
return True
else:
return False
def liste_parfait(Limite):
t = []
lis = print(liste_diviseur(Limite))
if(Limite<lis):
t.append(Limite)
return t
m = int(input('Giving an number :'))
print(liste_parfait(m))
3条答案
按热度按时间c3frrgcw1#
您的错误似乎是在设置
lis = print(liste_diviseur(Limite))
时出现的。print()是一个void函数,它将返回null。删除print()
应该可以解决您的问题cpjpxq1n2#
您需要创建一个范围,然后检查范围中的每个数字是否都是完美的。
6vl6ewon3#
主要部分是生成除数。你可以找到一些提高效率的方法,例如here。
对于大的数字,可以使用将
n
因式分解成它的因子(例如,参见我为另一个问题写的an answer),然后通过组合这些因子来生成所有的除数。在这里,我们将为简单起见:
示例:
请注意,
divisors()
返回一个生成器,而不是list
,并且除数是无序产生的(更准确地说:作为对i
和n // i
)。但这并不重要,看看一个数字是否完美:下面是一组完美数: