Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python *递归中的参数:TypeError:不支持+;的操作数类型:';int';和';元组';_Python_Recursion_Args - Fatal编程技术网

Python *递归中的参数:TypeError:不支持+;的操作数类型:';int';和';元组';

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

我正在学习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/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 use
add(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:])