对于Python来说,我是一个新手,并通过遵循一些指南并同时做一些小项目来尝试学习。
我目前正在尝试就斐波那契数进行第二个Eulerproject问题。内容如下:
斐波那契数列中的每个新术语都是通过将前两个术语相加而生成的。从1和2开始,前10个术语将是:
1、2、3、5、8、13、21、34、55、89,...
通过考虑斐波那契数列中值不超过400万的项,找到偶值项的总和。
这是我试图解决的问题
Fib = [1, 2, 3]
answer_list = []
x = Fib[-1]
y = Fib[-2]
while x <= 4000000:
z = x + y
Fib.append(z)
for number in Fib:
if number % 2 == 0:
answer_list.append(number)
answer = sum(answer_list)
print(answer)
当我尝试使用此代码时,没有得到回应。谁能在不给我实际答案的情况下,向我指出如何改进的正确方向?
预先感谢和亲切问候。
答案 0 :(得分:0)
更简单,更快捷的方法来完成此操作:
fib = [1, 1] # something to start with
while fib[-1] < 4000000 :
fib.append( fib[-1] + fib[-2] )
print sum( i for i in fib if i&1 == 0 )
输出:
4613732
如果上限远高于4e6,则更好的方法是避免创建较大的列表,而仅使用两个变量previous
和current
来生成斐波那契数,而另外一个变量用于保持偶数元素的总和。类似于:
>>> total = 0
>>> current = previous = 1
>>> while current < 4000000 :
... if current & 1 == 0 : total += current
... previous, current = current, previous + current
...
>>> total
4613732
警告的一个额外词,即4e6上的最后一个数字是5702887-一个奇数,因此我不在乎将其从第一个代码示例的列表中删除。但是,如果要格外小心,请在汇总元素之前添加fib.pop()
。