求斐波那契偶数和时函数返回列表重复输出两次的原因是什么?
问题原因
- 你定义的
list_of_numbers是全局变量,fibb_sequence()函数每次调用时都没有清空该列表,而是直接在已有内容后追加新的斐波那契项 - 你的代码里一共调用了两次
fibb_sequence():第一次是print(fibb_sequence())这行,此时list_of_numbers已经被填充为10项斐波那契数;第二次是sum_added_values()内部调用该函数,此时会再往list_of_numbers里追加一遍10项斐波那契数,最终列表里存了两份完整的斐波那契数列 - 筛选偶数项时自然会得到两份重复的偶数结果
修复方案
不要使用全局变量存储斐波那契计算结果,改为在fibb_sequence()函数内部初始化列表,每次调用都返回全新的结果列表,避免多次调用的内容累加,同步把存储偶数项的sum_of_numbers也改为函数内部变量,避免全局变量污染。
修正后的代码如下:
number_sequence = 10 def fibb_sequence(): # 每次调用都初始化新的列表 list_of_numbers = [] 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): 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(): # 偶数列表也放在函数内部初始化 sum_of_numbers = [] for i in fibb_sequence(): if (i % 2) == 0: sum_of_numbers.append(i) print(sum_of_numbers) print(fibb_sequence()) sum_added_values()
内容的提问来源于stack exchange,提问作者zampoan
相关产品推荐
相关产品推荐

