为了账号安全,请及时绑定邮箱和手机立即绑定

通过迭代添加

通过迭代添加

浮云间 2021-08-05 15:42:10
我想接受用户输入并将每个数字添加到 0。例如,user inputs 9我想添加 9+8+7+6....+1 并输出总数。我的代码def main(*args):    sum = 0    for i in args:        sum = i + (i - 1)    return sumresult = main(9)print(result)接近,但我无法让它迭代到 0。我尝试过以几种方式添加范围,但没有运气。我被困住了。
查看完整描述

3 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

第 N 个三角形数。不需要迭代。

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


查看完整回答
反对 回复 2021-08-05
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

假设用户输入被分配给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。



查看完整回答
反对 回复 2021-08-05
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

您的代码滥用了 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是内置函数的名称,用您的表达式重载内置名称被认为是不好的品味。


查看完整回答
反对 回复 2021-08-05
  • 3 回答
  • 0 关注
  • 199 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信