具有嵌套WHILE循环的函数会产生意外结果

时间:2017-03-20 00:20:48

标签: python list loops while-loop fibonacci

我正在大学学习python,并且一直遇到一些概念,主要是循环。我需要帮助理解为什么我的代码产生了错误的结果:

def fibonacci(maxint):
    a, b = 0, 1
    LIST = [a, b]
    while b < maxint:
        a, b = b, a + b
        LIST.append(b)
    return LIST

为了测试脚本,我需要调用该函数并在控制台中将10作为参数传递:

>>>fibonacci(10)

输出应显示为:

[0, 1, 1, 2, 3, 5, 8]

但实际上是打印:

[0, 1, 1, 2, 3, 5, 8, 13]

有人可以分析我的代码并告诉我以下内容:

  1. 哪里效率低下?
  2. 为什么它超出界限并循环过去10(来自我的函数的参数)?

1 个答案:

答案 0 :(得分:1)

首先,您的代码效率不高,因为它是用于生成斐波纳契数的迭代方法。

其次,以下代码将纠正您的代码中有关maxint以外的值的问题:

def fibonacci(maxint):
    a, b = 0, 1
    LIST = [a]
    while b < maxint:
        LIST.append(b) # appending the b's value to the list before it is updated.
        a, b = b, a + b
    return LIST

您的代码正在打印 '13',因为在将值更改为'13'后,您将'b'的值附加到列表中/ strong>即可。因此,在'b = 8'的值的最后一个循环中,新更新的值将是'b = 13'

>>>fibonacci(10)
>>>[0, 1, 1, 2, 3, 5, 8]