Python 通过考虑Fibonacci序列中值不超过400万的项,求偶数值项之和

Python 通过考虑Fibonacci序列中值不超过400万的项,求偶数值项之和,python,fibonacci,Python,Fibonacci,正在寻找有关此project Euler问题的帮助:通过考虑Fibonacci序列中值不超过400万的项,找到偶数值项的总和。 我相信还有其他更简单的方法可以做到这一点,但我只是刚刚开始!我已经设法让代码输出斐波那契序列的偶数项之和,但我不知道如何将输出限制设置为400万(我刚刚为测试设置了范围1-10)。对于我编写的当前代码,是否还有其他方法可以做到这一点,而不是重新开始 def fibonacci(n): if n==0: return 0 elif n==

正在寻找有关此project Euler问题的帮助:通过考虑Fibonacci序列中值不超过400万的项,找到偶数值项的总和。

我相信还有其他更简单的方法可以做到这一点,但我只是刚刚开始!我已经设法让代码输出斐波那契序列的偶数项之和,但我不知道如何将输出限制设置为400万(我刚刚为测试设置了范围1-10)。对于我编写的当前代码,是否还有其他方法可以做到这一点,而不是重新开始

def fibonacci(n): 
    if n==0:
        return 0
    elif n==1 or n==2:
        return 1
    elif n>2:
        return (fibonacci(n-1)+fibonacci(n-2))


fib_list=[fibonacci(n) for n in range (1, 10) if fibonacci(n)%2==0]
fib_even=sum(fib_list)
print(fib_list)
print(fib_even)
“while”循环可能比列表理解更适合此问题。使用“while True”循环和条件“break”语句可能是最简单的方法。

以下是我的解决方案:

def fibonacci():
   sequence = [1, 2]
   total = 0

   while sequence[-1] < 4000000:
       if sequence[-1] % 2 == 0:
           total += sequence[-1]
       sequence.append(sequence[-1] + sequence[-2])

   print(total)
def fibonacci():
序列=[1,2]
总数=0
当序列[-1]<4000000时:
如果序列[-1]%2==0:
总数+=序列[-1]
sequence.append(sequence[-1]+sequence[-2])
打印(总计)

对列表中最后一个元素的检查确保它不会超过400万。这也是sgfw对他们的回应的意思。我不确定您将如何实现列表理解-这不是我解决此问题的第一选择。

您可以使用内置函数
sum
过滤器

def fib(limit):
    a, b = 0, 1
    while a < limit:
        yield a
        a, b = b, a + b

sum(filter(lambda x: x%2==0, fib(4_000_000)))

fib
函数将生成所有Fibonacci数,而
filter
函数将过滤掉那些不为偶数的数,最后,
sum
内置函数将添加所有偶数,而无需重写任何内容?不一定。。。我在网上看到了其他的解决方案,我只是想知道是否有任何方法可以修改我到目前为止所做的事情,而不是从freshooh开始谢谢!你在哪里定义斐波那契序列?还有[-1]、-2]是什么意思?我只是想了解这一切,谢谢!序列在while块的最后一行生成-使用列表中的最后两个数字生成下一个数字(如问题所述,从1和2开始)。Python支持反向索引-因此-1是列表中的最后一个元素,-2是倒数第二个元素,等等。谢谢!lambda x的作用是什么?@okvoyce
lambda x:x%2==0
将帮助
filter
函数决定要保留哪些元素,在这种情况下,将有助于仅保留偶数
4613732