【问题标题】:Sum of integers with tuples inside a tuple元组内具有元组的整数之和
【发布时间】:2023-03-30 20:18:01
【问题描述】:

我试图返回元组内一组元组上所有元素的总和,但最后一个值总是None,所以我得到了

TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'

使用下面的代码。

如何跳过最后一个值?

必须通过递归来完成。

L = (1, (2, (3, None)))

def sum(L):
    if not L:
        return None
    else:
        return L[0] + sum(L[1])

【问题讨论】:

  • return 0 ...?

标签: python python-3.x recursion tuples


【解决方案1】:

如果这确实是您的元组的结构,则在到达末尾时返回零:

def my_sum(L):
    if not L:
        return 0
    else:
        return L[0] + my_sum(L[1])

并且不要隐藏内置的名称。这是不好的做法,即使它在技术上是合法的。

另外,我认为这不一定是递归的好选择。迭代解决方案的工作原理相同,并且无需为每个级别创建新的堆栈框架:

s = 0
while L:
    s += L[0]
    L = L[1]

这只是您做出设计决定时的个人奖励。

【讨论】:

  • 旁注:可能应该建议将 if not L:/while L: 更改为 if L is None:/while L is not None:,因此如果其中一个值恰好发生,您不会虚假地停止求和成为0
  • @ShadowRanger。第二个值在问题中明确是元组或无,但我同意一般意图。
【解决方案2】:
In [117]: L = (1, (2, (3, None)))
     ...:
     ...: def sum(L):
     ...:     if not L:
     ...:         return 0
     ...:     else:
     ...:         return L[0] + sum(L[1])
     ...:

In [118]: sum(L)
Out[118]: 6

【讨论】:

    猜你喜欢
    • 2019-07-12
    • 2020-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多