我是Python的初学者,目前正在处理Project的问题(对于那些没有听说过的人来说,这里)。我已经解决了这个问题,但它给我留下了一些问题:
def fibsum():
result = []
a, b = 0, 1
while True:
a, b = b, a + b
print b
if b < 4000000 and b % 2 == 0:
result.append(b)
if b > 4000000:
break
print sum(result)
fibsum()当我使用PowerShell运行这个程序时,首先它会打印出我需要的所有数字(尽管,它会超过一个数字),然后最后打印出和:
1
2
3
5
8
...
3524578
5702887 <-- This is over 4,000,000. Why is this here?
4613732 <-- This is the answer.发布于 2013-06-21 21:03:24
1.在打印b之前,只需移动第二个条件
while True:
a, b = b, a + b
if b > 4000000:
break
print b
if b < 4000000 and b % 2 == 0:
result.append(b)2.不要在循环中打印b,而是在发生故障时打印result。
3.至于返回,非常清楚的是,您返回了函数之外,因此函数中的以下代码没有执行,因此没有填充列表。
yield用于创建生成器函数,函数的每次执行都返回下一个值。因此,您必须多次调用您的函数,从而将生成的值添加到外部定义的列表中。当没有什么可返回的时候,你的函数就会中断。
要更清楚地理解yield关键字的用法,请看下面的文章:在Python中,“产生”关键字是做什么的?
您可以像这样编辑代码以使用产率(尚未测试):
def fibsum():
a, b = 0, 1
while True:
a, b = b, a + b
if b > 4000000:
break
yield b
result = []
for val in fibsum():
if val < 4000000 and val % 2 == 0:
result.append(val)
print sum(result)因此,在for循环中,每次对fibsum()函数的调用都会根据条件生成下一个值,并将其添加到列表中。
https://stackoverflow.com/questions/17244236
复制相似问题