如何添加在';而';使用Python循环
我正在解决的问题如下: 通过考虑Fibonacci序列中值不超过400万的项,找到偶数值项之和。” 所以我用这个脚本打印了高达400万的斐波那契序列:如何添加在';而';使用Python循环,python,while-loop,fibonacci,Python,While Loop,Fibonacci,我正在解决的问题如下: 通过考虑Fibonacci序列中值不超过400万的项,找到偶数值项之和。” 所以我用这个脚本打印了高达400万的斐波那契序列: a = 0 b = 1 while b < 4000000: print b a, b = b, a+b a=0 b=1 而b从itertools导入takewhile,ifilter >>>def fib(): a、 b=0,1 尽管如此: 产生 a、 b=b,a+b >>>def为_偶数(x): 返回x%2==0 >>
a = 0
b = 1
while b < 4000000:
print b
a, b = b, a+b
a=0
b=1
而b<4000000:
打印b
a、 b=b,a+b
显然,我可以运行这个程序,然后手动添加偶数值,但我会觉得我在作弊
从技术上讲,我想我要问两个问题:
%
测试均匀性,该运算符在左操作数除以右操作数后返回整数余数
a, b = 0, 1
evens = 0
while b < 4000000:
if not b%2:
evens += b
a, b = b, a+b
a,b=0,1
evens=0
而b<4000000:
如果不是b%2:
evens+=b
a、 b=b,a+b
得到答案后,Project Euler PDF和论坛将向您介绍此问题的数学部分,并真正回答您的问题。有一些方法可以避免计算每个斐波那契数和测试均匀度,但这些方法需要利用斐波那契序列的特定数学特性。如果您需要如果您不喜欢变量赋值,您可能会喜欢:
>>从itertools导入takewhile,ifilter
>>>def fib():
a、 b=0,1
尽管如此:
产生
a、 b=b,a+b
>>>def为_偶数(x):
返回x%2==0
>>>求和(i滤波器是偶数,(takewhile)(λx:x
我怎么能挑出晚上呢
偶数是将它们除以2(整数)时留下零余数的数。在Python中,我们使用%
运算符得到“作为整数除以后的余数”
然而,这里还有另一个巧妙的技巧,偶数斐波那契数是序列中的每三个数,如果你能严格地证明原因,那么你将接近得到直接生成偶数斐波那契数序列所需的公式
我如何添加这些even而不实际将其分配给变量
将它们分配给变量有什么问题?只需为运行计数设置另一个变量。使用return not(x%2)
而不是return x%2==0
:它更像pythonic,速度更快。@geccoreturn not(x%2)
利用了一个事实,即0被视为False
,并使条件隐式。我不认为这可能被认为更像pythonic。我怀疑它也会对其他实现产生影响,而不是对CPython。我没有弄明白你提到的诀窍,但你的答案过于简单。这让我想到了find一个备用路径。我刚刚添加了一个简短的“if”语句来增加偶数值。谢谢!我实际上不再那么确定我关于技巧的断言了。>_
>>> from itertools import takewhile, ifilter
>>> def fib():
a, b = 0, 1
while True:
yield a
a, b = b, a+b
>>> def is_even(x):
return x % 2 == 0
>>> sum(ifilter(is_even, (takewhile(lambda x: x<4000000, fib()))))
4613732