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

Function with nested WHILE loop producing unexpected results

我在大学里学习 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(我的函数的参数)?

首先,您的代码并非低效,因为它是一种迭代生成斐波那契数的方法。

其次,以下代码将纠正您的代码中有关附加值超出 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' 因为您将 'b' 的值附加到列表中它的值之后更改为 '13'。因此,在最后一个循环中,当值 'b = 8' 时,新的更新值将是 'b=13'.

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