Python完美数算法报错:TypeError: int与NoneType无法比较
完美数练习错误修正问题
错误信息: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的除数)。
- 创建函数
liste_divisors(),接受整数N为参数,返回其小于N的除数列表(包含1)。- 创建函数
is_perfect(),接受正整数N为参数,若为完美数返回True,否则返回False(需使用第一个函数)。- 创建函数
Perfect_List(),接受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))
错误分析与修正
你的liste_parfait函数完全偏离了需求,核心问题有两点:
- 类型错误根源:
lis = print(liste_diviseur(Limite))中,print()函数没有返回值(默认返回None),导致lis是None,和整数Limite比较时触发类型错误。 - 逻辑错误:需求是返回小于Limit的所有完美数列表,但当前代码既没有遍历小于Limit的数,也没有调用判断完美数的
est_parfait函数。
修正后的liste_parfait函数如下:
def liste_parfait(Limite): t = [] # 遍历所有小于Limite的正整数 for num in range(1, Limite): # 调用est_parfait判断是否为完美数 if est_parfait(num): t.append(num) return t
同时可以把输入提示改为中文,更符合使用习惯:
m = int(input('请输入一个数:')) print(liste_parfait(m))
测试示例:输入30时,会返回[6, 28],符合完美数定义。
内容的提问来源于stack exchange,提问作者user20727127
相关产品推荐
相关产品推荐

