【问题标题】:Error while returning list返回列表时出错
【发布时间】:2023-03-25 13:25:02
【问题描述】:

这是一个用于求一个数的因数之和的代码。查找因子函数中返回的列表是我猜 sum 函数无法访问的,因为当我打印列表时,它给出了正确的列表。

我收到的错误是:TypeError: object of type 'NoneType' has no len()

def perfect_number(n):
    def sum(list,counter,value):
        if counter==len(list):
            print (value)
        else:
            sum(list,counter+1,value+list[counter])
    def find_factors(n,a,list):
        if (a==n):
                        print (list,len(list))
            return (list)
        elif (n%a )== 0:
            list.append(a)                      
            find_factors(n,a+1,list)
        elif (n%a) !=0:
            find_factors(n,a+1,list)
    xyz = find_factors(n,1,[])
    return sum(xyz,0,0)



perfect_number(6)

【问题讨论】:

  • 首先,不要使用内置函数作为变量/函数名
  • 但是,错误是什么??
  • 好吧,find_factors 不返回任何内容,因此xyz 是None。
  • 但为什么不返回列表?当我使用返回列表命令时!
  • 你只在一个内部递归调用中返回它,但它不会传播到最外面的调用。尝试在对find_factors的所有递归调用之前添加 return

标签: python


【解决方案1】:

您缺少一些返回语句:

def is_perfect_number(n):
    def sum_recursive(factors,counter,value):
        if counter==len(factors):
            return value
        else:
            return sum_recursive(factors, counter+1, value+factors[counter])

    def find_factors(n,a,factors):
        if (a==n):
            return
        elif (n%a) == 0:
            factors.append(a)                      
            find_factors(n,a+1,factors)
        elif (n%a) !=0:
            find_factors(n,a+1,factors)

    xyz = []
    find_factors(n, 1, xyz)
    return sum_recursive(xyz,0,0)==n

print is_perfect_number(6)
print is_perfect_number(28)
print is_perfect_number(228)

【讨论】:

  • 应该也应该是return sum_recursive(xyz,0,0) == n来完成测试。
  • 函数我也去配。
  • 谢谢哥们!但是为什么我们要使用这么多的 return 语句呢?我只想在 if 条件下返回。
  • 我看到你已经从函数式编程风格转换了它。在大多数函数式语言中,return 语句是隐式的。
  • 我想我现在更好地理解了该算法的工作原理。
猜你喜欢
  • 2016-05-14
  • 2023-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-13
  • 2017-12-06
  • 2020-09-15
  • 1970-01-01
相关资源
最近更新 更多