首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python:在循环中生成和打印

Python:在循环中生成和打印
EN

Stack Overflow用户
提问于 2013-06-21 21:00:15
回答 1查看 5.5K关注 0票数 1

我是Python的初学者,目前正在处理Project的问题(对于那些没有听说过的人来说,这里)。我已经解决了这个问题,但它给我留下了一些问题:

代码语言:javascript
复制
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运行这个程序时,首先它会打印出我需要的所有数字(尽管,它会超过一个数字),然后最后打印出和:

代码语言:javascript
复制
1
2
3
5
8
...
3524578
5702887 <-- This is over 4,000,000. Why is this here?
4613732 <-- This is the answer.
  1. 在循环达到超过4,000,000的第一个值之前,我能让它停止迭代吗?
  2. 为了节省空间,如果我决定使用打印,是否可以以列表格式(,,,)打印所有的值?
  3. 当我将原代码中的打印替换为产率或返回(对于变量b)时,程序将不会输出任何内容,尽管仍然存在 打印总数(结果) 在功能的末尾。
  4. 有什么方法可以使这更容易,而不必定义结果和附加值呢?当以类似于实际结果的格式返回值时,sum()似乎无法工作。
EN

Stack Overflow用户

回答已采纳

发布于 2013-06-21 21:03:24

1.在打印b之前,只需移动第二个条件

代码语言:javascript
复制
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中,“产生”关键字是做什么的?

您可以像这样编辑代码以使用产率(尚未测试):

代码语言:javascript
复制
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()函数的调用都会根据条件生成下一个值,并将其添加到列表中。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17244236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档