Python 返回列表时出错
这是一个求一个数的因子和的代码。find factors函数中返回的列表我猜sum函数无法访问,因为当我打印列表时,它给出了正确的列表 我收到的错误是:TypeError:type'NoneType'的对象没有len()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
您缺少一些返回语句:
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)