Python *递归中的参数:TypeError:不支持+;的操作数类型:';int';和';元组';
我正在学习python。尝试在递归函数中使用take*args作为参数(用于添加“n”个数字),但出现错误:下面是我的代码和错误:Python *递归中的参数:TypeError:不支持+;的操作数类型:';int';和';元组';,python,recursion,args,Python,Recursion,Args,我正在学习python。尝试在递归函数中使用take*args作为参数(用于添加“n”个数字),但出现错误:下面是我的代码和错误: 错误: Traceback (most recent call last): File "/tmp/sessions/9d1de49c52e0e9b9/main.py", line 22, in <module> a = add(2,4,6) File "/tmp/sessions/9d1de49c52e
错误:
Traceback (most recent call last):
File "/tmp/sessions/9d1de49c52e0e9b9/main.py", line 22, in <module>
a = add(2,4,6)
File "/tmp/sessions/9d1de49c52e0e9b9/main.py", line 18, in add
sum = n[len(n)-1] + add(n[:-1])
TypeError: unsupported operand type(s) for +: 'int' and 'tuple'
回溯(最近一次呼叫最后一次):
文件“/tmp/sessions/9d1de49c52e0e9b9/main.py”,第22行,在
a=加(2,4,6)
文件“/tmp/sessions/9d1de49c52e0e9b9/main.py”,第18行,添加
总和=n[len(n)-1]+add(n[:-1])
TypeError:不支持+:“int”和“tuple”的操作数类型
请解释我做错了什么
n[:-1]
正在返回一个元组,以将最后一个值放入add useadd(n[-1])
编辑:
工作解决方案:
def添加(*n):
如果len(n)==1:
返回n[0]
其他:
返回n[-1]+添加(*n[:-1])
我建议一种更简单的设置:
def add(*n):
if len(n) == 1:
return n[0]
return n[0] + add(*n[1:]) # n[1:] gives the "rest" of a list, i.e. all elements after the first.
- 在函数定义中(
),星号将多个单独的参数收集到一个列表中。def add(*n):
e、 g.当您调用
时,add(2,4,6)
将是一个列表n
[2,4,6]
- 在函数调用中(
),星号将列表扩展为多个独立的参数。add(*n)
e、 g.当您有
时,调用n=[2,4,6]
就好像调用了add(*n)
add(2,4,6)
def add(*n): # <-- collecting multiple arguments into a list
if len(n) == 1:
return n[0]
else:
sum = n[len(n)-1] + add(n[:-1]) # <-- not spreading list into multiple arguments
return sum
谢谢塔米尔。它确实修复了错误。但是现在它给出了错误的答案。我通过参数加法(2,4,6,3,5)得到10作为它们的和
def add(*n): # <-- collecting multiple arguments into a list
if len(n) == 1:
return n[0]
else:
sum = n[len(n)-1] + add(n[:-1]) # <-- not spreading list into multiple arguments
return sum
def add(*n):
return 0 if not n else n[0] + add(*n[1:])