寻求有关此项目Euler问题的帮助:
我相信还有其他更简单的方法可以做到这一点,但我只是刚刚开始!我已经设法让代码输出斐波那契序列的偶数项之和,但是我不知道如何将输出限制设置为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”循环可能比列表理解更适合这个问题。使用带有条件“break”语句的“while True”循环可能更容易。
以下是我的解决方案:
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)
对列表中最后一个元素的检查确保它不会超过400万。这也是sgfw所说的他们的反应。我不知道你会如何去实现一个列表理解-这不会是我解决这个问题的第一选择。
您可以使用内置函数 sum filter :
sum
filter
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)))
4613732
这个 fib 函数将生成所有斐波那契数,而 函数将筛选出那些不均匀的数字,最后 内置函数将添加所有偶数
fib