关于python:对多个数字求和的函数

Function to sum multiple numbers

本问题已经有最佳答案,请猛点这里访问。

我刚接触到Python,开始学习执行函数。我开始添加数字,但我只能求和两个数字,如果我想求和更多,就需要编辑程序。这是我的密码

1
2
3
4
5
6
7
def sum(num1,num2):
    return num1+num2

a=5
b=7
c=sum(a,b)
print (c)

现在,我想创建一个函数来求和任意数量的数字,而不需要编辑代码。我是这样做的:

1
2
3
4
5
6
7
8
9
10
11
12
def sum(num1,num2):
    return num1+num2
a=int(input("what is the number you want to add?:"))
ask="yes"
while(ask=="yes"):
  b=int(input("what is the number you want to add?:"))
  c=sum(a,b)
  a=c
  ask=input("do you want to add another number?:")
else:
    c=a
    print (c)

这是可行的,但我认为应该有一个更简单的方法来实现这个功能…正确的?谢谢你的帮助!


您希望在函数中有一个*args参数,这样您可以接受多于1个的输入:

1
2
3
4
5
def summ(num1, *args):
    total = num1
    for num in args:
        total = total + num
    return total

*args的意思是,你可以根据自己的需要传递尽可能多的论点:

1
2
3
4
>>> summ(1, 2, 3)
6
>>> summ(1, 2, 3, 4, 5, 6, 7)
28

args是一个迭代对象:我们遍历它,并将它的每个数字相加到total中,然后返回。


可以使用变量参数接受任意数量的参数

1
2
3
4
5
def my_sum(*args):
    total = 0
    for val in args:
        total += val
    return total

您还可以使用python的内置sum()添加它们:

1
2
3
4
5
6
7
def my_sum(*args):
    return sum(args)

>>> my_sum(1,2,3,4)
10
>>> my_sum(1,5,6,7.8)
19.8


首先要注意的是,python有一个本机sum函数。用这个代替简单的计算,不要用你自己的覆盖它。

但是要了解更多关于python的信息,您可能希望使用functools.reduce,它将两个参数的函数累计应用于序列的项。

1
2
3
4
5
6
7
8
from functools import reduce

def mysum(*nums):
    return reduce(lambda x, y: x+y, nums)

a, b, c = 1, 2, 3

res = mysum(a,b,c)  # 6

通过构建一个列表,然后为您的函数提供信息,可以将其合并到您的逻辑中:

1
2
3
4
5
6
7
8
9
10
11
12
lst = []

lst.append(int(input("what is the number you want to add?:")))

ask ="yes"

while ask =="yes":
    lst.append(int(input("what is the number you want to add?:")))
    ask = input("do you want to add another number?:")
else:
    res = mysum(*lst)
    print(res)


我建议您根据以下解释进行更新:

  • 我建议不要为用户定义的函数使用名称sum,因为这是python内置函数的名称,即使它在您的情况下还没有造成任何问题。
  • 可以使用sum内置函数对列表中的元素求和。
  • while之后的else是没有用的。
  • 您可以使用a = sum([a,b])直接分配a,而不使用临时变量c
  • 最后,这里是我对代码的建议:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    a = int(input("what is the number you want to add?:"))

    ask ="yes"
    while (ask =="yes"):
        b = int(input("what is the number you want to add?:"))
        a = sum([a,b])
        ask = input("do you want to add another number?:")

    print (a)


    有几种方法可以添加不同数量的数字。首先,您可以使用列表和内置函数和:埃多克斯1〔6〕

    如果不想使用列表,请尝试在内置和函数上编写自定义包装(最好不要重写内置名称):

    1
    2
    3
    4
    def my_sum(*args):
        return sum(args)

    my_sum(1, 2, 3)

    此外,这种用法是可能的:

    1
    2
    my_sum(2) # result is 2
    my_sum()  # result is 0

    但是,如果您想要一个函数,它至少需要两个参数,请尝试以下操作:

    1
    2
    3
    4
    def my_sum(num1, num2, *args):
        return num1 + num2 + sum(args)

    my_sum(1, 2, 3)