猿问

通过迭代添加

我想接受用户输入并将每个数字添加到 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。我尝试过以几种方式添加范围,但没有运气。我被困住了。


浮云间
浏览 201回答 3
3回答

富国沪深

第 N 个三角形数。不需要迭代。def calculate_nth_triangle_number(value):     return value * (value + 1) / 2

斯蒂芬大帝

假设用户输入被分配给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 mysumresult = main(9)print(result)这里的两种解决方案都会返回45。

眼眸繁星

您的代码滥用了 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是内置函数的名称,用您的表达式重载内置名称被认为是不好的品味。
随时随地看视频慕课网APP

相关分类

Python
我要回答