编写一个自定义求和函数来对数字列表求和

Bln*_*pwr 6 python loops for-loop

我是 Python 新手,需要一些帮助来编写一个将列表作为参数的函数。

我希望用户能够输入数字列表(例如,[1,2,3,4,5]),然后让我的程序对列表的元素求和。但是,我想使用 for 循环对元素求和,而不仅仅是使用内置sum函数。

我的问题是我不知道如何告诉解释器用户正在输入列表。当我使用这段代码时:

  def sum(list):
Run Code Online (Sandbox Code Playgroud)

它不起作用,因为解释器只需要从 sum 中获取一个元素,但我想输入一个列表,而不仅仅是一个元素。我尝试使用 list.append(..),但无法让它按照我想要的方式工作。

感谢期待!

编辑:我正在寻找这样的东西(谢谢,“irrenhaus”):

def listsum(list):
    ret=0
    for i in list:
        ret += i
    return ret

# The test case:
print listsum([2,3,4])  # Should output 9.
Run Code Online (Sandbox Code Playgroud)

Ada*_*ith 4

我不确定你是如何构建“用户输入列表”的。你使用循环吗?是纯输入吗?您是从 JSON 还是 pickle 读取数据?这是一个很大的未知数。

假设您试图让他们输入逗号分隔的值,只是为了得到答案。

# ASSUMING PYTHON3

user_input = input("Enter a list of numbers, comma-separated\n>> ")
user_input_as_list = user_input.split(",")
user_input_as_numbers_in_list = map(float, user_input_as_list) # maybe int?
# This will fail if the user entered any input that ISN'T a number

def sum(lst):
    accumulator = 0
    for element in lst:
        accumulator += element
    return accumulator
Run Code Online (Sandbox Code Playgroud)

上面三行有点丑。您可以将它们组合起来:

user_input = map(float, input("Enter a list of numbers, comma-separated\n>> ").split(','))
Run Code Online (Sandbox Code Playgroud)

但这也有点丑陋。怎么样:

raw_in = input("Enter a list of numbers, comma-separated\n>> ").split(',')
try:
    processed_in = map(float, raw_in)
    # if you specifically need this as a list, you'll have to do `list(map(...))`
    # but map objects are iterable so...
except ValueError:
    # not all values were numbers, so handle it
Run Code Online (Sandbox Code Playgroud)