zampoan
zampoan

Reputation: 75

Why does returning a list from a function output the same twice?

I'm trying to sum the even values of a Fibonacci sequence, however, when I do so I get the same output twice in a row:

[2, 8, 34, 2, 8, 34]

as opposed to just

[2, 8, 34]

Below is the code:

number_sequence = 10
list_of_numbers = []
sum_of_numbers = []

def fibb_sequence():
    # init variables
    current_term = 2
    previous_term = 1
    list_of_numbers.append(previous_term)
    list_of_numbers.append(current_term)

    for i in range(2, number_sequence):
        # the magic happens
        new_num = current_term + previous_term
        previous_term = current_term
        current_term = new_num
        list_of_numbers.append(new_num)

    return list_of_numbers

def sum_added_values():
    for i in fibb_sequence():
        # find all even values
        if (i % 2) == 0:

            sum_of_numbers.append(i)

    print(sum_of_numbers)


print(fibb_sequence())
sum_added_values()

Why is it repeating itself?

Upvotes: 0

Views: 247

Answers (1)

jmd_dk
jmd_dk

Reputation: 13110

You are mutating the global lists list_of_numbers and sum_of_numbers inside fibb_sequence(), so every time this function is called, the values are appended to these lists.

Either stop using such global objects, or only call fibb_sequence() once. For example, remove the print(fibb_sequence()) line. Also, as fibb_sequnce() is called from within sum_added_values(), each call to sum_added_values() will append the values once more. Here the call to fibb_sequence() has been extracted so that it only happens once:

number_sequence = 10
list_of_numbers = []
sum_of_numbers = []

def fibb_sequence():
    # init variables
    current_term = 2
    previous_term = 1
    list_of_numbers.append(previous_term)
    list_of_numbers.append(current_term)

    for i in range(2, number_sequence):
        # the magic happens
        new_num = current_term + previous_term
        previous_term = current_term
        current_term = new_num
        list_of_numbers.append(new_num)

    return list_of_numbers

def sum_added_values():
    for i in result:
        # find all even values
        if (i % 2) == 0:

            sum_of_numbers.append(i)

    print(sum_of_numbers)


result = fibb_sequence()
print(result)
sum_added_values()

Upvotes: 1

Related Questions