Reputation: 75
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
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