【问题标题】:function to sum range gives: 'int' object is not iterable对范围求和的函数给出:“int”对象不可迭代
【发布时间】:2018-02-03 12:23:34
【问题描述】:

我正在尝试编写一个函数,其中用户给出范围的开始和结束,输出是该范围的总和。这是我最好的尝试:

def sum_range (start, end):
    output = 0
    userange = range(start, end)
    for i in userange :
        sum(i, output)

    return output

我收到以下错误:

TypeError: 'int' 对象不可迭代

【问题讨论】:

  • 尝试将sum(i,output) 替换为output += i。它将i添加到ouput的当前值
  • 提示:Python 中几乎没有函数接受输出参数。结果总是返回

标签: python python-3.x function range iterable


【解决方案1】:

您可能不需要构建range 对象。简单地取算术级数的总和:

def sum_range(start, end):
    return (end - start) * (start + end - 1) // 2


print(sum_range(4, 30))
# 429.0
assert sum_range(4, 30) == sum(range(4, 30))

【讨论】:

  • 这预设了start <= endrange 隐式处理。
  • 唯一不同的是返回结果的数据类型(float vs int
  • @Ev.Kounis 我在 Python 2 中添加了2. 来处理整数除法。没什么
  • @chepner 是的。我似乎从 OP 中假设了这一点,因为它们没有传递步幅参数
  • @MosesKoledoye 这就是 cmets 的用途 :)
【解决方案2】:

你可以这样做:

def sum_range(start, end):
    return sum(range(start, end))

示例:

>>> def sum_range(start, end):
...     return sum(range(start, end))
... 
>>> sum_range(10,14)
46

【讨论】:

  • 当然,一旦你这样归结起来……sum_range() 有什么意义,你可以写sum(range())……?
【解决方案3】:

你要么需要:

def sum_range(start, end):
    output = 0
    userange = range(start, end)
    for i in userange:
        output += i

    return output

def sum_range(start, end):
    return sum(range(start, end))

【讨论】:

  • 第一个选项最终只返回给定的开始值。不知道那是关于什么的。
  • @JennaMareeFae 你确定你输入正确了吗?听起来您将return 语句放在for 循环的主体中。
  • 是的,我做的完全正确。我真的迫不及待地想在这方面不那么讨厌了。感谢您的帮助!
猜你喜欢
  • 2020-03-26
  • 2017-09-28
  • 1970-01-01
  • 2013-08-02
  • 2012-06-21
  • 1970-01-01
  • 2010-12-28
  • 2017-09-11
相关资源
最近更新 更多