I';我是全新的,正在用python编写Euler#2项目

I';我是全新的,正在用python编写Euler#2项目,python,Python,目标是将每一个偶数相加到400万。 我原以为这样行得通,但程序无法运行。我认为它与if语句有关,但在其他方面就丢失了。这是我的 list = [] a, b = 0, 1 while b <40: if b%2 == 0: list.append(b) a, b = b, a+b t=sum(list) print(t) list=[] a、 b=0,1 而这是你最大的问题: a, b = b, a+b 它有太多的潜力来打乱你的循环!就像其他人

目标是将每一个偶数相加到400万。 我原以为这样行得通,但程序无法运行。我认为它与if语句有关,但在其他方面就丢失了。这是我的

list = []
a, b = 0, 1
while b <40:
    if b%2 == 0:
        list.append(b)
        a, b = b, a+b

t=sum(list)
print(t)
list=[]
a、 b=0,1

而这是你最大的问题:

a, b = b, a+b
它有太多的潜力来打乱你的循环!就像其他人提到的,当b是奇数时,它甚至不更新任何东西,只有当它是偶数时,然后你就卡住了

为什么不以简单的方式进行此操作,范围:

mysum = sum([i for i in range(0, 40, 2)])

只需一行即可解决所有问题(当然,如果您想包括数字4000000,请将40替换为4000001。如果您只想包括数字4000000,但不包括数字4000000,请仅使用4000000)

这是您最大的问题:

a, b = b, a+b
它有太多的潜力来打乱你的循环!就像其他人提到的,当b是奇数时,它甚至不更新任何东西,只有当它是偶数时,然后你就卡住了

为什么不以简单的方式进行此操作,范围:

mysum = sum([i for i in range(0, 40, 2)])
将用一行处理所有问题(当然,如果您想包括数字4000000,请将40替换为4000001。如果您只想包括数字4000000,但不包括数字4000000,请仅使用4000000)

此行仅在b%2==0时运行。我想你每次都是故意的。它应该再向外缩进一层


此行仅在b%2==0时运行。我想你每次都是故意的。它应该再向外缩进一层

也可以使用数学规则,其中1和n之间的整数之和等于
n*(n+1)/2
。如果我们只想对偶数求和,就像只考虑一半的数求和,然后将结果乘以2

fSumEvenNumbers = lambda x: (x//2)*(x//2+1)
这将给

fSumEvenNumbers(40000000)
这相当于

(2e7)**2 + 2e7
4e14 + 2e7
400000020000000

也可以使用数学规则,其中1和n之间的整数之和等于
n*(n+1)/2
。如果我们只想对偶数求和,就像只考虑一半的数求和,然后将结果乘以2

fSumEvenNumbers = lambda x: (x//2)*(x//2+1)
这将给

fSumEvenNumbers(40000000)
这相当于

(2e7)**2 + 2e7
4e14 + 2e7
400000020000000

b%2!=0
b
不会更改。不要调用您的列表
list
:这是一个类型名称。如果在
b%2!=0
b
不会改变。不要调用您的列表
list
:这是一个类型名称。如果您让人们知道您要将所有偶数斐波那契数(而不是所有偶数)相加,他们可能会更容易给您提供相关答案