在Python中的项目欧拉问题#2

5

背景

我卡在这个问题上:

斐波那契数列的每一项都是由前两项相加得到的。通过从1和2开始,我们可以得到前10个数:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

考虑斐波那契数列中不超过400万的值,找出其中所有偶数项并求它们的和。

我试图找出问题所在:是我的斐波那契数列生成器有问题,还是获取偶数的代码有问题,甚至是将数字添加到列表中的方式有问题,但都没有解决问题。

代码

我决定将数字存储在列表中。下面是我创建它们的代码。

list_of_numbers = [] #Holds all the fibs
even_fibs = [] #Holds only even fibs

然后,我创建了我的生成器。这可能会出现一些问题。

x,y = 0,1 #sets x to 0, y to 1
while x+y <= 4000000: #Gets numbers till 4 million
    list_of_numbers.append(y)
    x, y = y, x+y #updates the fib sequence

然后,我创建了一些代码来检查一个数字是否为偶数,并将其添加到even_fibs列表中。这是代码中的另一个薄弱点。

coord = 0
for number in range(len(list_of_numbers)):
    test_number = list_of_numbers [coord]

    if (test_number % 2) == 0:
        even_fibs.append(test_number)
    coord+=1

最后,我展示信息。
print "Normal:  ", list_of_numbers #outputs full sequence
print "\nEven Numbers: ", even_fibs #outputs even numbers
print "\nSum of Even Numbers:  ", sum(even_fibs) #outputs the sum of even numbers

问题

我知道这样提问很差,但是哪里出了错呢?请不要给我答案,只需要指出有问题的部分即可。


2
for number in range(len(list_of_numbers)):test_number = list_of_numbers [coord] 可以被翻译为 for test_number in list_of_numbers。然后你可以去掉 coord - Steven Rumbalski
+1 表示“请不要直接给我答案,只需指出有问题的部分。” - Burhan Khalid
1个回答

4

当序列中接下来的两个值之和大于4,000,000时,您将停止计算。您需要考虑序列中不超过4,000,000的所有值。


非常感谢 - 这个问题已经困扰我一段时间了。 - xxmbabanexx
另一种说法是[1, 4000000)。 - AlexLordThorsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接