带有嵌套 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]
有人可以分析我的代码并告诉我以下内容吗:
- 哪里效率低?
- 为什么它会越界并循环超过 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]
我在大学里学习 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]
有人可以分析我的代码并告诉我以下内容吗:
- 哪里效率低?
- 为什么它会越界并循环超过 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]