pythonloopsfor-loop

Writing a custom sum function that sums a list of numbers


I am new to Python and need some help writing a function that takes a list as an argument.

I want a user to be able to enter a list of numbers (e.g., [1,2,3,4,5]), and then have my program sum the elements of the list. However, I want to sum the elements using a for loop, not just by using the built in sum function.

My problem is that I don't know how to tell the interpreter that the user is entering a list. When I use this code:

def sum(list):

It doesn't work because the interpreter wants just ONE element that is taken from sum, but I want to enter a list, not just one element. I tried using list.append(..), but couldn't get that to work the way I want.

Thanks in anticipation!

EDIT: I am looking for something like this (thanks, "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.

Solution

  • I'm not sure how you're building your "user entered list." Are you using a loop? Is it a pure input? Are you reading from JSON or pickle? That's the big unknown.

    Let's say you're trying to get them to enter comma-separated values, just for the sake of having an answer.

    # 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
    

    The top three lines are kind of ugly. You can combine them:

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

    But that's kind of ugly too. How about:

    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