项目欧拉#2

use*_*556 3 python

我在项目euler网站上遇到了问题,而我却陷入了第二个问题.

这是问题所在:

Fibonacci序列中的每个新术语都是通过添加前两个术语生成的.从1和2开始,前10个术语将是:

 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
Run Code Online (Sandbox Code Playgroud)

通过考虑Fibonacci序列中的值不超过四百万的项,找到偶数项的总和.

这是我的代码:

a = 0
b = 0
c = 2
d = []
x = 1
y = 2
z = [1,2]
while x + y <= 4000000:
    z.append(x+y)
    x = y
    y = z[c]
    c += 1

size = len(z)
while a < (size - 1):
    if z[a] % 2 == 0:
        d.append(z[a])
    a += 1

print(sum(d))
Run Code Online (Sandbox Code Playgroud)

我不确定什么行不通.有帮助吗?

Jes*_*ame 5

迭代数组的pythonic方法是使用in.此外,使用0评估为False:

# Unpythonic
size = len(z)
while a < (size - 1):
    if z[a] % 2 == 0:
        d.append(z[a])
    a += 1

# Pythonic
for num in z:
    if not num % 2:
        d.append(num)

# Even more pythonic
d = [num for num in z if not num % 2]
Run Code Online (Sandbox Code Playgroud)

只有一个循环的奖金:

a = 1
b = 2
s = 0
while b <= 4000000:
    if not b % 2:
        s += b
    a, b = b, a + b
print(s)
Run Code Online (Sandbox Code Playgroud)