【发布时间】:2018-03-24 12:57:36
【问题描述】:
我一直在尝试使用 Python 3 生成斐波那契数列。由于我对编程完全陌生,因此我使用的是基本工具。在这种情况下列出作为练习。 我遇到的问题是,当我希望它停止时停止序列。
例如,我需要一个高达 100 的斐波那契,所以我写了这个:
fib = [1,2]
n = 0
while max(fib) <= 100:
fib.append(fib[n]+fib[n+1])
n = n+1
print(fib)
print(max(fib))
print(n)
print() 声明只是为了我的利益,所以我会知道发生了什么。
作为回报,我得到:
[1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]
144
9
所以一切正常,除了我打算在它超过 100 之前完成排序。 那为什么我有144呢?我做错了什么?
【问题讨论】:
-
因为在你上次迭代的时候,
fib中的最后一项是89,所以小于100。因为那个时候条件仍然满足,所以还是多生成一个。 -
您实际上是在检查数组的最大值是否小于 100。当达到 89 时,最大值为 89,因此执行 while 函数内部的代码。您要做的是将值附加到列表中,仅小于 100。
-
用
fib[-1]替换max(fib)更快,因为fib列表总是排序的,因此最大元素总是最后一个。