【问题标题】:When i add numbers in a list and print them it only adds the first number当我在列表中添加数字并打印它们时,它只添加第一个数字
【发布时间】:2017-11-14 15:50:31
【问题描述】:

当我print(sum(n)) 时,我得到7 而不是列表中元素的总和,即32。我做错了什么?

def sum(numbers):
    total = 0
    for number in numbers:
        total += number
        return total

n = [7, 12, 5, 8]
print (sum(n))

【问题讨论】:

  • 请仔细查看缩进。
  • 另外,不要定义与内置函数同名的函数。
  • 尝试删除你对函数的定义,然后print(sum(n))。你可能会感到惊讶。
  • 你从循环内部返回。这将在第一次迭代后从整个函数返回。

标签: python python-3.x add


【解决方案1】:

如果您的return 语句在for 循环中,那么它将在恰好迭代一次后返回总数,因此total 的值将是循环中的第一个元素:在这种情况下,@ 987654324@。您应该将 return 语句放在循环之后,以便计算整个总数:

def sum(numbers):

    total = 0

    for number in numbers:

        total += number

    return total

n = [7, 12, 5, 8]
print(sum(n))

但是,sum() 已经是 Python 中的内置函数,因此您可以简单地将代码简化为以下内容:

n = [7, 12, 5, 8]
print(sum(n))

其中任何一个都将打印32

【讨论】:

  • 我想看看反对票的解释?对我来说,这是一个很好的答案。
  • 答案是好的,我会投票,因为你用代码回答,所以要冷静。加一,我不赞成...
  • @DamianLattenero 每个回答的人似乎在回答后几秒钟内都被否决了,没有提供任何 cmets 或替代答案。
  • 非常感谢!
【解决方案2】:

您的总和会立即返回,您无需等待列表循环。

【讨论】:

  • 反对者,请善待并解释问题所在。我很乐意纠正它。
  • 你并不孤单。似乎有人刚刚通过并否决了每个答案,而没有发表评论或提供他们自己的更好答案。
  • @Private_GER 这个答案更适合作为评论。我会投票,这样你就可以达到 50xp,但一旦你这样做了,请避免发布这样的答案。
  • 我同意,我会投票,所以现在你可以在任何地方发表评论
【解决方案3】:

让我们一步一步解释:

def sum(numbers):
    total = 0
    for number in numbers:
        total += number
        #If you return here, you wont sum the rest, just the first

    return total # Return must go outside the for loop, because it breaks the execution

n = [7, 12, 5, 8]
print (sum(n))

【讨论】:

  • @zipa 我按错了输入...我更新了,但我不会删除任何内容,如果用户想对一个解释清楚的答案投反对票,而某些人的努力一文不值...不是我的问题
  • @zipa 好的,对不起,也许我有点敏感啊哈哈
  • 我非常努力地坚持不使用reduce(lambda x, y: x + y, map(lambda x: x * 1, a)) 发布答案。只是为了好玩:D
猜你喜欢
  • 1970-01-01
  • 2015-06-10
  • 1970-01-01
  • 2023-03-09
  • 2021-06-15
  • 1970-01-01
  • 2016-10-17
  • 2020-10-03
  • 2022-11-07
相关资源
最近更新 更多