Python 和斐波那契 [列表] 生成器
Python and fibonnaci [list] generator
我一直在尝试使用 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()
声明仅供我参考,所以我知道发生了什么。
在 return 我得到:
[1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]
144
9
所以一切正常,除了我打算在超过 100 之前完成排序。
那为什么我有144呢?我做错了什么?
只需在循环中放置一个 if 语句即可。
while max(fib) <= 100:
if(fib[n]+fib[n+1] > 100):
break
fib.append(fib[n]+fib[n+1])
n = n+1
break语句的作用是,如果满足中断条件,程序立即跳出循环。
而且你的循环条件有点低效,因为它必须在每次迭代时检查列表 fib 中的最大值。
更简单的方法是这样
while (fib[n]+fib[n+1] < 100):
fib.append(fib[n]+fib[n+1])
n = n+1
这样您的代码就不必在每次迭代时检查最大值
没有错,你想要的错了
因为89+55是144所以生成的多于100,你希望序列小于100,而不是它们相加后的值。
尝试在代码中使用 "if" 语句。
如上所述,问题是当 max(fib)
为 89 时,您的循环仍会再执行一次,因为它仍然小于 100。因此,它会在找到 max(fib)
大于100.
虽然肯定有其他方法可以做到这一点,但为了保持您的一般循环结构,您可以这样做:
while fib[n]+fib[n+1] < 100:
fib.append(fib[n]+fib[n+1])
n = n+1
>>> fib
[1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
这是开始编程时常犯的错误:)
您正在测试 'fib' 中的最大值是否仍在 100 以下,然后 然后 您正在添加一个新数字。因此,当您测试时,fib 仍然是 [1, 2, 3, 5, 8, 13, 21, 34, 55, 89],然后在循环中添加 144。
几件事:
- 斐波那契数列以
1, 1, 2, ...
开头
- 您检查最大元素是否小于
100
,而不是检查 下一个 元素是否小于 100
.
所以,第一个显然很容易纠正,只需将 fib
声明为 [1, 1]
即可。
至于第二个,你可以使用一个 while True
循环,如果下一个元素大于 100
,然后你 break
退出循环,或者你可以有一个变量它存储下一个并检查它是否小于 100
作为 while
.
的评估
所以,在这一行之后:
fib = [1, 1]
您可以使用:
next = 2
while next <= 100:
fib.append(next)
next += fib[-2]
或
while True:
next = fib[-2] + fib[-1]
if next > 100:
break
fib.append(next)
两者都给出:
[1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
当你这样做时
while max(fib) <= 100:
你想检查下一个数字是否大于 100,但你实际上是在检查列表中当前最大的数字是否大于 100。
所以,程序不会说“144 大于 100,我们不要相加”,而是“89 小于 100,我们相加 144!”
要解决此问题,您需要检查要添加的 next 的数字有多大。您可以在 while 循环中使用 if
语句来执行此操作,并使用不同的变量来保存是否应该退出循环。例如:
fib = [1,1]
n = 0
quit = False
while not quit:
next_num = fib[n]+fib[n+1]
if next_num <= 100:
fib.append(next_num)
n = n+1
else:
quit = True
print(fib)
print(max(fib))
print(n)
此外,正如 所说,斐波那契数列以“1, 1, 2”开头
您遇到的错误非常简单。您正在检查 fib
中的最大数字是否小于或等于 100,但是当您将最后两项相加时,最终值可能会更大。
您可以通过在将新值添加到列表之前检查它来解决此问题。
此外,在 Python 中,您可以通过执行
访问列表的最后一项
fib[-1]
因此,您可以通过更改代码以使用负索引来删除 n
。
最后,斐波那契数列应该以 1, 1 而不是 1, 2 开头。
fib = [1, 1]
while True:
n = fib[-1] + fib[-2]
if n >= 100:
break
fib.append(n)
print(fib)
这么多回复:)
最后我选择了:
while fib[n]+fib[n+1] < 100
fib.append(fib[n]+fib[n+1])
n = n+1
在我看来这是最简单的(还有很多东西要学)
但我很高兴这里展示了这么多不同的方法。我会尽力记住它们。而且我知道了我的逻辑哪里错了,这也很好。
谢谢
我一直在尝试使用 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()
声明仅供我参考,所以我知道发生了什么。
在 return 我得到:
[1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]
144
9
所以一切正常,除了我打算在超过 100 之前完成排序。 那为什么我有144呢?我做错了什么?
只需在循环中放置一个 if 语句即可。
while max(fib) <= 100:
if(fib[n]+fib[n+1] > 100):
break
fib.append(fib[n]+fib[n+1])
n = n+1
break语句的作用是,如果满足中断条件,程序立即跳出循环。
而且你的循环条件有点低效,因为它必须在每次迭代时检查列表 fib 中的最大值。
更简单的方法是这样
while (fib[n]+fib[n+1] < 100):
fib.append(fib[n]+fib[n+1])
n = n+1
这样您的代码就不必在每次迭代时检查最大值
没有错,你想要的错了
因为89+55是144所以生成的多于100,你希望序列小于100,而不是它们相加后的值。
尝试在代码中使用 "if" 语句。
如上所述,问题是当 max(fib)
为 89 时,您的循环仍会再执行一次,因为它仍然小于 100。因此,它会在找到 max(fib)
大于100.
虽然肯定有其他方法可以做到这一点,但为了保持您的一般循环结构,您可以这样做:
while fib[n]+fib[n+1] < 100:
fib.append(fib[n]+fib[n+1])
n = n+1
>>> fib
[1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
这是开始编程时常犯的错误:)
您正在测试 'fib' 中的最大值是否仍在 100 以下,然后 然后 您正在添加一个新数字。因此,当您测试时,fib 仍然是 [1, 2, 3, 5, 8, 13, 21, 34, 55, 89],然后在循环中添加 144。
几件事:
- 斐波那契数列以
1, 1, 2, ...
开头
- 您检查最大元素是否小于
100
,而不是检查 下一个 元素是否小于100
.
所以,第一个显然很容易纠正,只需将 fib
声明为 [1, 1]
即可。
至于第二个,你可以使用一个 while True
循环,如果下一个元素大于 100
,然后你 break
退出循环,或者你可以有一个变量它存储下一个并检查它是否小于 100
作为 while
.
所以,在这一行之后:
fib = [1, 1]
您可以使用:
next = 2
while next <= 100:
fib.append(next)
next += fib[-2]
或
while True:
next = fib[-2] + fib[-1]
if next > 100:
break
fib.append(next)
两者都给出:
[1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
当你这样做时
while max(fib) <= 100:
你想检查下一个数字是否大于 100,但你实际上是在检查列表中当前最大的数字是否大于 100。
所以,程序不会说“144 大于 100,我们不要相加”,而是“89 小于 100,我们相加 144!”
要解决此问题,您需要检查要添加的 next 的数字有多大。您可以在 while 循环中使用 if
语句来执行此操作,并使用不同的变量来保存是否应该退出循环。例如:
fib = [1,1]
n = 0
quit = False
while not quit:
next_num = fib[n]+fib[n+1]
if next_num <= 100:
fib.append(next_num)
n = n+1
else:
quit = True
print(fib)
print(max(fib))
print(n)
此外,正如
您遇到的错误非常简单。您正在检查 fib
中的最大数字是否小于或等于 100,但是当您将最后两项相加时,最终值可能会更大。
您可以通过在将新值添加到列表之前检查它来解决此问题。
此外,在 Python 中,您可以通过执行
访问列表的最后一项fib[-1]
因此,您可以通过更改代码以使用负索引来删除 n
。
最后,斐波那契数列应该以 1, 1 而不是 1, 2 开头。
fib = [1, 1]
while True:
n = fib[-1] + fib[-2]
if n >= 100:
break
fib.append(n)
print(fib)
这么多回复:)
最后我选择了:
while fib[n]+fib[n+1] < 100
fib.append(fib[n]+fib[n+1])
n = n+1
在我看来这是最简单的(还有很多东西要学)
但我很高兴这里展示了这么多不同的方法。我会尽力记住它们。而且我知道了我的逻辑哪里错了,这也很好。
谢谢