2017-01-01 99 views
2

前体:我是Python的新手,但是我环顾四周,无法弄清楚我的问题。实际上,我想要一个斐波那契数列,所以输出结果很好,但我不明白它为什么起作用。我期待别的东西。Python脚本的代码输出不是预期的结果

这里是我写的:

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] 

不应该输出是某种像“列表索引超出范围”错误的?

它不应该是别的吗?像这样的,也许:

[1, 2, null, null, null] 

这是我期待有写获得斐波那契序列(注意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会自动识别我不知道的东西吗?

了解我在说什么?

回答

1

在Python,sequence[-1]是指在列表中的最后一个项目,并sequence[-2]指的是下一个到最后一个项目。这简化了许多列表编程 - 而且我在两天前在本网站的答案中使用了负面指数。有一些原因会导致Python代码通常比其他语言的代码短,而负指数只是其中一个原因。这种技术也适用于字符串 - 关于切分字符串的部分,请参阅here了解更多细节。

所以指数是从来没有超出范围,在你的代码。每次循环添加项目-1-2,这是循环中的最后两个数字。这正是Fibonacci序列所需要的。

+0

非常感谢!这很有道理。是的,对于一个完美的斐波纳契序列!我没有意识到Python可能带有负面指数,并且它对应于列表的后端。这应该有很多其他的东西帮助!非常感谢! – kitekid99

+0

@ kitekid99你应该接受这个答案 – Uriel

1

在原来的算法t可能有你感到困惑。这是没有意义的海事组织。在第二种算法(t += 1中的算法)中,如果将t=0更改为t=2,它应该按预期工作。

+0

这只会不断增加INT 1和int 2 – kitekid99

+0

我的意思是在你的第二个例子是改变'吨= 0'到'T = 2',其中你有'T + = 1'最后。 –

+0

我的不好,误解了你的回答。是的,这也应该起作用。 – kitekid99

0

你追加到在每次迭代和你的序列大小列表中的项目也越来越大。在每个步骤中,您从其中取出最后两个项目进行求和,因此没有错误。