【问题标题】:Adding through iteration通过迭代添加
【发布时间】:2018-11-01 23:18:52
【问题描述】:

我想接受用户输入并将每个数字加到 0。例如user inputs 9 我想加 9+8+7+6....+1 并输出总数。我的代码

def main(*args):
    sum = 0
    for i in args:
        sum = i + (i - 1)
    return sum

result = main(9)
print(result)

接近了,但我无法让它迭代直到 0。我尝试了几种方法添加范围,但没有运气。我被困住了。

【问题讨论】:

  • 使用for i in range(args + 1):,然后使用summ = summ + i。我使用了summ,因为sum 是一个内置函数。除了你的函数,你可以简单地使用内置的sum函数作为sum(range(args + 1)),其中range(args+1)将生成从0arg的数字
  • 这给出了错误can only concatenate tuple (not "int") to tuple
  • 好的,将for i in range(args + 1):替换为for i in range(args[0] + 1):
  • 感谢所有做出贡献的人。我是初学者,但这一切都非常有帮助。这些将是很好的参考说明。

标签: python iteration add


【解决方案1】:

假设用户输入分配给x,那么最简单的答案是:

sum(range(int(x)+1))

请注意,range() 将生成一个数字列表(实际上是 Python 3 中的不可变序列类型),其中包含但不包括 x,因此是 +1

就您的原始代码而言,存在一些问题。首先,您应该避免将变量命名为与 Python 内置函数相同的名称,例如 sum。其次,您尝试遍历输入参数的元组(例如,在您的情况下为 args = (9,)),这将执行 9 + (9-1)17,然后将该总和作为输出返回。

相反,您可以执行以下操作:

def main(*args):
    mysum = 0
    for i in range(args[0]+1):
        mysum = mysum + i
    return mysum

result = main(9)

print(result)

这里的两种解决方案都将返回45

【讨论】:

  • 我没有投反对票,但也许您也可以在 OP 的代码中添加错误以教他/她。 OP似乎是初学者。通过解释代码中的问题,这是一种很好的教学方式
  • 当然,我会在我的答案中添加解释。
  • 迂腐我知道,但 range 实际上并没有返回列表(至少在 Python 3 中没有)
【解决方案2】:

第 N 个三角形数。无需迭代。

def calculate_nth_triangle_number(value):
    return value * (value + 1) / 2

【讨论】:

    【解决方案3】:

    您的代码误用了 Python 的一个相对高级的特性,即参数打包,其中提供给函数的所有参数都打包在一个元组中。

    当您拨打main(9) 时会发生什么?循环进入一次(因为用单个参数调用函数相当于函数体中的args = (9, )i 只接受一个值,i = 9,而你有sum = 9+8 = 17

    对于您的情况,我不喜欢for 循环,您可以使用while 循环吗?使用while,您的函数完全符合您的任务定义!

    def my_sum(n):
        result = 0
        while n>0:
            result = result + n
            n = n - 1
        return result
    

    请注意,求和和减少的顺序对于正确的结果至关重要...还请注意 sum 是内置函数的名称,使用你的表达。

    【讨论】:

    • 这对我来说很有意义,让人想起我最近几次尝试中的不成功尝试。我确实有一个问题。在result = result + n 行中是否可以将其与n-1 结合使用,或者为了循环而最好将它们分开?
    • 我怀疑你想到的是result = result + n-- ...对不起,Python没有一元递减运算符:-)。
    • 好的。我在学习 python 之前确实学习了一些 c++,所以我认为我只是混淆了两者
    • 顺便说一句,“这对我来说很有意义” 这是因为我已经写了我的答案,以便在你的问题的上下文中它对你有意义(一些我不会说其他答案;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 2020-03-13
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多