You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的除数)。

  1. 创建函数liste_divisors(),接受整数N为参数,返回其小于N的除数列表(包含1)。
  2. 创建函数is_perfect(),接受正整数N为参数,若为完美数返回True,否则返回False(需使用第一个函数)。
  3. 创建函数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函数完全偏离了需求,核心问题有两点:

  1. 类型错误根源:lis = print(liste_diviseur(Limite))中,print()函数没有返回值(默认返回None),导致lis是None,和整数Limite比较时触发类型错误。
  2. 逻辑错误:需求是返回小于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 10:30:53