Python脚本的代码输出不是预期的

时间:2017-01-01 01:05:16

标签: python

前驱:我是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会自动识别我不知道的东西吗?

明白我在说什么?

3 个答案:

答案 0 :(得分:1)

在Python中,sequence[-1]引用列表中的最后一项,sequence[-2]引用倒数第二项。这简化了很多列表编程 - 我在两天前在这个网站的答案中使用了负数索引。有些原因Python代码通常比其他语言的代码短,负指数只是一个原因。此技术也适用于字符串 - 请参阅有关切片字符串的部分中的here以获取更多详细信息。

因此索引永远不会超出您的代码范围。每次通过循环时,都会添加-1-2项,这是循环中的最后两个数字。这正是Fibonacci序列所需要的。

答案 1 :(得分:1)

原始算法中的

t可能让您感到困惑。这是毫无意义的IMO。在您的第二个算法(t += 1)中,如果您将t=0更改为t=2,它应该按预期工作。

答案 2 :(得分:0)

您在每次迭代时将项目附加到列表中,并且序列的大小越来越大。在每一步中,你从它拿两个最后的项目总和,这样就没有错误。