Python &引用;TypeError:+;的操作数类型不受支持:';int';和';“非类型”;我如何修复此错误,您能否解释一下它的原因';它不工作了

Python &引用;TypeError:+;的操作数类型不受支持:';int';和';“非类型”;我如何修复此错误,您能否解释一下它的原因';它不工作了,python,Python,代码应该在数组“A”中运行,搜索整数“k”的疯狂数,然后返回。我必须使用递归,而且我已经完成了使用for循环的任务。我不确定为什么会出现这个错误,我想了解为什么会出现这个错误并找到解决方案。我读过的指南不清楚 我试过运行6种不同的代码。这并不像原来那样优雅,但应该涵盖所有输入情况 def o(k,A): if len(A) == 1: if A[0] == k: return 1 else: return

代码应该在数组“A”中运行,搜索整数“k”的疯狂数,然后返回。我必须使用递归,而且我已经完成了使用for循环的任务。我不确定为什么会出现这个错误,我想了解为什么会出现这个错误并找到解决方案。我读过的指南不清楚

我试过运行6种不同的代码。这并不像原来那样优雅,但应该涵盖所有输入情况

def o(k,A):
    if len(A) == 1:
        if A[0] == k:
            return 1
        else:
            return
    else:
        if A[0] == k:
            return 1 + o(k,A[1:])
        else:
            return o(k,A[1:])

o(5,[1,2,5,3,6,5,3,5,5,4])
我希望函数返回4,因为传递的数组中有4个5的实例,但它输出一个错误:

TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
另外,如果您只使用递归,则在这种情况下使用此代码。 当然,这项任务最简单的解决方案是:

 [1,2,5,3,6,5,3,5,5,4].count(5)

 Out[3]:
 4
关于原问题
else:return
我有一个变体,其中我明确指出了一个[0]!=k:报税表是一样的,但我犯了同样的错误。你知道我为什么会出错吗?因为
1+o(k,A[1:])
1+None
if
len(A[1:])==1和A[0]!=k
。想一想最简单的情况-对于
o(0,[1])
,您希望得到什么样的输出?你明白了吗?天哪,我现在觉得自己很蠢。我假设
return
会自动转换,因为类型是动态的,谢谢@jornsharpeplease,从开始并读取。关于您的代码,请摘录并提供。此外,只需对错误消息进行Web搜索。这两种方法都可能让你自己解决你的问题。解释一下你改变了什么以及为什么改变是有帮助的。你说得对。实际上,我给出了另一个版本的代码,来解决这个任务。我已经更新了代码,让它更清晰。现在它只有一个附加变量。当我们深入到递归时,它会传递到递归——当我们匹配值时,计数器会增加。但是它仍然没有解释OP的代码有什么问题,以及这个新版本是如何修复的。多谢了。但是我不允许更改解析为函数的变量。或者使用附加变量@Jornsharpe帮助我认识到我错在哪里。但是谢谢
 [1,2,5,3,6,5,3,5,5,4].count(5)

 Out[3]:
 4
def o(k,A):
    if len(A) == 1:
        if A[0] == k:
            return 1
        else:
            return 0   # this explicitly value 0 helps to fixed this error. When you reached the bottom and the last element didn't match the desired value it explicitly return 0
    else:
        if A[0] == k:
            return 1 + o(k,A[1:])
        else:
            return o(k,A[1:])

o(5,[1,2,5,3,6,5,3,5,5,4])

Out[12]:
4