3 回答
TA贡献1790条经验 获得超9个赞
第 N 个三角形数。不需要迭代。
def calculate_nth_triangle_number(value): return value * (value + 1) / 2
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。
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是内置函数的名称,用您的表达式重载内置名称被认为是不好的品味。
添加回答
举报