Python:在 "If"循环中嵌套 "while"语句?

标签 python loops if-statement while-loop fibonacci

我是 Python 的新手,这就是为什么我在解决其他人可能会觉得容易的问题时遇到了麻烦。

此问题的背景:Euler Project,问题 2。此问题本质上要求我们将斐波那契数列中的所有偶数项相加,使得每个项都在 4,000,000 以下。我决定通过从封闭公式计算第 n 个斐波那契项来解决与许多在线解决方案略有不同的问题。现在,假设此函数称为 Fibonacci(n).

我基本上想做的是遍历未知数量的整数,这些整数表示斐波那契集的索引(即 1、2、3、4 等),并将每个值插入 Fibonacci(n)。 如果结果除以 2 没有余数,则将此 Fibonacci 数添加到某个初始设置为 0 的值。

这是我目前所拥有的:

def Fibonacci(n): 
    return (1/(5**0.5))*((((1+5**0.5)/2)**n)-(((1-5**0.5)/2)**n))

i=0
FibSum = 0
nFib = 0

while (nFib <= 10):

    nFib = Fibonacci(i)

    if(nFib%2==0):
        FibSum += nFib

    i += 1

print FibSum

(是的,如您所见,我将斐波那契数列限制在 10 而不是 4,000,000;这样做只是为了测试。)

现在,这是我的问题:当我运行这段代码时,我得到的是 2.0 而不是 10.0(2 和 8 是应该加在一起的两个斐波那契数)。

怎么会?我的猜测是循环在到达第三个斐波那契数 (2) 后停止并且不会继续超出该数。有人看到我的代码有问题吗?

如有任何问题,请发表评论。提前致谢。

最佳答案

Gal Dreiman 提供的解决方案很好,但是用 in 函数转换更好,下面是您修改后的代码:

def Fibonacci(n):
    return int((1/(5**0.5))*((((1+5**0.5)/2)**n)-(((1-5**0.5)/2)**n)))

关于Python:在 "If"循环中嵌套 "while"语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38069471/

相关文章:

python - `print` 解释为空白是什么?

python - 将数据结构持久保存到python中的文件的最简单方法?

javascript - 用 JavaScript 解决这个看似简单的数组循环难题

database - 为什么在为数据库设计关系时要避免循环?

javascript - Grunt 模板变量和 if else

python - wrap_socket() 得到了一个意外的关键字参数 'server_hostname' ?

Python检查字典中的列表是否满足两个条件

php - 使用 mysql 数组循环有限数量的 html

php - PDO MySQL SELECT 在 IF 语句中具有多个条件

c++ - 我的升序排序问题是一个好的解决方案吗?