Python 返回列表时出错

Python 返回列表时出错,python,Python,这是一个求一个数的因子和的代码。find factors函数中返回的列表我猜sum函数无法访问,因为当我打印列表时,它给出了正确的列表 我收到的错误是:TypeError:type'NoneType'的对象没有len() 您缺少一些返回语句: def is_perfect_number(n): def sum_recursive(factors,counter,value): if counter==len(factors): return val

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

我收到的错误是:TypeError:type'NoneType'的对象没有len()


您缺少一些返回语句:

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)

首先,不要将内置项用作变量/函数名称,但错误是什么?
find\u factors
不返回任何内容,因此
xyz
None
。但为什么它不返回列表呢??当我使用返回列表命令时!您只在一个内部递归调用中返回它,但它不会传播到最外层的调用。尝试在所有对
find_factors
的递归调用之前添加return,可能也应该是
return sum_recursive(xyz,0,0)==n
以完成测试。我也会匹配函数。Thanx man!但是为什么我们要使用这么多返回语句呢?我只想在if条件下返回。我看到你已经把它从函数式编程风格转换过来了。在大多数函数式语言中,return语句是隐式的。我想我现在更了解算法的工作原理。
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)