【问题标题】:Get sum of numbers using a Function and For Loop使用函数和 For 循环获取数字的总和
【发布时间】:2015-09-02 18:20:32
【问题描述】:

我想定义一个函数,sumAll(n)sums all numbers from 1 to n

例如,当我调用sumAll(10) 时应该返回answer 55...

因为:

1+2+3+4+5+6+7+8+9+10 = 55

函数sumAll 需要使用 for 循环来执行此求和,并且它必须使用一个 sum 变量,该变量的值在 for 循环的每次迭代中都会增加。

我有一个不使用 for 循环的工作函数,但我还需要知道如何使用 for 循环来完成此操作。

这是工作程序:

def sumAll(n):
    if n == 0:
        return 0

    return n + sumAll(n - 1)

number = int(raw_input("Please enter a number: \n"))

print ("The answer is: ") + str(sumAll(number))

如何使用“for”循环来完成此操作? 我是否正确假设 "for loop" 应该嵌套在 "sumAll" 函数中?

我已经多次尝试使用 for 循环来执行此操作,但我不断收到 infinite result and errors...

这是我的代码:

def sumAll(n):
    y = n + sumAll(n -1)
    return y

num = int(raw_input("Please enter a number")
for n in range(num):
    num = sumAll(num)
    print num

【问题讨论】:

  • 您是否尝试过使用sum()?或者任何涉及for 循环的东西?
  • 有关for 语句用法的示例,请参阅The Tutorial
  • 你认真地想出了一个可行的递归解决方案,完成一个基本案例,但你不知道如何在 for 循环中添加数字 1-10??
  • 当您尝试“很多次”时,您是否保存了这些尝试?你能包括其中一种尝试吗?
  • return n * (n + 1) / 2

标签: python function for-loop


【解决方案1】:

for loop

def sumAll(n):
    sum_all = 0
    for i in range(1, n+1):
        sum_all = sum_all + i
    return sum_all

number = int(raw_input("Please enter a number: \n"))

print ("The answer is: ") + str(sumAll(number))

输出:

Please enter a number: 
10
The answer is: 55

你也可以使用list Comprehension:

print sum([i for i in range(number+1)])

输出:

55

你也可以使用数学级数公式:

def sumAll(n):
    return n * (n + 1) / 2   

【讨论】:

  • 这不能回答 OP 的问题。他们想在一个函数中做到这一点。
  • 不,这仍然不是 OP 所要求的。
  • @MorganThrapp 没关系 ??
  • 感谢 S_A 的回答,这正是我所需要的。我为否决票道歉,我也不明白,因为它真的很有帮助,谢谢。
  • 我有,但不幸的是,由于对我的问题的所有反对票,我不能再连根拔起,只标记答案是我需要的。
【解决方案2】:

你甚至可以在没有循环的情况下做到这一点:

def sumAll(n):
    return  sum(range(1,n+1))

print(sumAll(10)) # -> 55

如果你坚持使用循环:

def sumAll(n):
    s = 0
    for i in range(1,n+1):
        s += i
    return s

但数学解决方案很简单:

def sumAll(n):
    return n * (n + 1) / 2  
    # in python 3:
    # return n * (n + 1) // 2

(有n元素的平均值为(n+1)/2;这将始终是整数,因为nn+1是偶数;归纳证明通常是数学学生学习的第一个例子关于感应...)。

【讨论】:

    【解决方案3】:

    sum(1, 2, 3, 4) 会出错
    TypeError: 最多期望 2 个参数的总和,得到 4 个

    sum((1, 2, 3, 4)) # works cuz tuple inside
    sum([1, 2, 3, 4]) # works cuz list inside
    

    所以 func 需要将元素收集到一个元组中,例如

    numbers = 1, 2, 3, 4
    print(sum(numbers)) # already a tuple so works
    

    将 * 与您的参数一起使用,将调用者的参数收集到一个元组中。 * 允许调用者提供任意数量的参数,并将它们转换为元组参数。

    def sumall(*args):
        return sum(args)
    print(sumall(1))
    print(sumall(1, 2))
    print(sumall(1, 2, 3))
    print(sumall(1, 2, 3, 4))
    

    产生预期的答案。图片来源:作者 Downey 在 Think Python (2016) 的第 12 章中要求提供此练习解决方案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2018-08-08
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      相关资源
      最近更新 更多