我想接受用户输入并将每个数字加到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之前我都无法迭代它。我尝试了几种方式添加范围,但没有运气。我被卡住了。
答案 0 :(得分: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 mysum
result = main(9)
print(result)
这两个解决方案都将返回45
。
答案 1 :(得分:2)
第N个三角形数字。无需迭代。
def calculate_nth_triangle_number(value):
return value * (value + 1) / 2
答案 2 :(得分:0)
您的代码滥用了Python的一个相对高级的功能,即参数打包,其中提供给函数的所有参数都打包在一个元组中。
致电main(9)
会发生什么?进入循环一次(因为使用单个参数调用该函数等效于函数主体中的args = (9, )
)i
仅采用一个值i = 9
,而您拥有{{1 }}。
就您而言,我不喜欢sum = 9+8 = 17
循环,可以使用for
循环吗?使用while
,您的函数将完全遵循任务的定义!
while
请注意,求和和递减的顺序对于正确的结果至关重要……还请注意,def my_sum(n):
result = 0
while n>0:
result = result + n
n = n - 1
return result
是内置函数的名称,重载内置名称被认为是不好的味道带着你的表情。