前驱:我是Python的新手,但我环顾四周,无法弄清楚我的问题。实际上,我想要一个Fibonacci序列,所以输出很好,但我不明白为什么它有效。我在期待别的东西。
这是我写的:
sequence=[1,2]
t=0
for i in range(9):
term=sequence[t-1]+sequence[t-2]
sequence.append(term)
print(sequence)
这是输出:
[1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144]
输出不应该是某种错误,比如'list index out of range'?
OR
不应该是别的吗?像这样,也许:
[1, 2, null, null, null]
这是我期望为了获得Fibonacci序列而必须写的(注意t + = 1):
sequence=[1,2]
t=0
for i in range(9):
term=sequence[t-1]+sequence[t-2]
sequence.append(term)
t+=1
print(sequence)
但是,那个输出:
[1, 2, 3, 4, 3, 5, 7, 7, 8, 12, 14]
那么,为什么这对Fibonacci序列起作用? Python会自动识别我不知道的东西吗?
明白我在说什么?
答案 0 :(得分:1)
在Python中,sequence[-1]
引用列表中的最后一项,sequence[-2]
引用倒数第二项。这简化了很多列表编程 - 我在两天前在这个网站的答案中使用了负数索引。有些原因Python代码通常比其他语言的代码短,负指数只是一个原因。此技术也适用于字符串 - 请参阅有关切片字符串的部分中的here以获取更多详细信息。
因此索引永远不会超出您的代码范围。每次通过循环时,都会添加-1
和-2
项,这是循环中的最后两个数字。这正是Fibonacci序列所需要的。
答案 1 :(得分:1)
t
可能让您感到困惑。这是毫无意义的IMO。在您的第二个算法(t += 1
)中,如果您将t=0
更改为t=2
,它应该按预期工作。
答案 2 :(得分:0)
您在每次迭代时将项目附加到列表中,并且序列的大小越来越大。在每一步中,你从它拿两个最后的项目总和,这样就没有错误。