首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Project Euler #2 - Python v3.2.3

Project Euler #2 - Python v3.2.3
EN

Stack Overflow用户
提问于 2012-04-20 00:23:07
回答 2查看 504关注 0票数 1

我在欧拉项目中遇到了problem 2的麻烦。目标是找到Fibonacci序列中值不超过400万的偶数值项的总和。由于某些原因,我一直得到0作为我的输出。我做错了什么?

代码语言:javascript
复制
total = 0
count = 0
term = 0
fibonacciMemo = {0:0, 1:1}

def main ():
    term = fibonacci (count)
    while (term <= 4000000):
        if (term % 2 == 0):
            total += term
        count += 1

def fibonacci (n):
    if not n in fibonacciMemo:
        fibonacciMemo [n] = fibonacci (n - 1) + fibonacci (n - 2)
    return fibonacciMemo [n]

print (total)
EN

回答 2

Stack Overflow用户

发布于 2012-04-20 00:28:15

这是因为你从来没有调用main或者fibonacci。你只需分配

代码语言:javascript
复制
total = 0
count = 0
term = 0
fibonacciMemo = {0:0, 1:1}

然后

代码语言:javascript
复制
print (total)

如果要执行main,则必须显式调用它,例如,将main()放在print (total)之前

您的代码中还有另一个问题。您尝试从函数内部递增全局变量total。这是行不通的,除非你给这个函数声明了global。在第一次使用total之前,可以通过将global total放入函数中来完成此操作。count和term也有同样的问题。而且看起来你的控制流程也有问题。这不会生成正确的答案。

票数 4
EN

Stack Overflow用户

发布于 2012-04-20 00:34:39

将以下代码行添加到脚本的底部:

代码语言:javascript
复制
if __name__ == "__main__":
    main()

当您将该文件作为Python脚本运行时,它将调用main()

顺便说一句,Project Euler问题有一个更好的解决方案,你可以直接生成偶数斐波那契项而不是过滤。现在就养成寻找聪明解决方案的习惯,否则当问题变得具有挑战性时,你会碰壁。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10232465

复制
相关文章

相似问题

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