我正在尝试使用python中的列表来打印斐波纳契系列。 这是我的代码
[1, 1, 2, 3, 2, 3, 5, 5, 5, 8]
输出
[0]
Category_id:1,
product:food
[1]
Category_id=1
product:fish
[2]
Category_id=1
product:vegetable
我没有收到错误!
答案 0 :(得分:3)
Python range
从0开始,你需要从生成元素2开始。从0开始,你得到前几个计算的负索引,从列表的末尾访问。要解决此问题,请将循环更改为for i in range(2, 8)
。
为了澄清似乎是混淆的原因,通过从零开始range
并使用否定索引,您最终将以下术语求和并附加到列表中:
f[2] = f[0-1] + f[0-2] = f[-1] + f[-2] (= f[1] + f[0]) = 1 + 1 = 2 # looking good
f[3] = f[1-1] + f[1-2] = f[0] + f[-1] (= f[0] + f[2]) = 1 + 2 = 3 # looking good
f[4] = f[2-1] + f[2-2] = f[1] + f[0] = 1 + 1 = 2 # oops!
f[5] = f[3-1] + f[3-2] = f[2] + f[1] = 2 + 1 = 3
从那时起,数字就在轨道上,但是从正确的索引偏移了2。
答案 1 :(得分:1)
f=[1,1]
for i in range(8):
f.append(f[i]+f[i+1])
print(f)
<强> RESULT 强>
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
答案 2 :(得分:1)
f=[1,1]
for i in range(8):
s=len(f)
f.append(f[s-1]+f[s-2]) #sum of last two elements
print(f)
或使用-1和-2作为最后两个元素的索引。
答案 3 :(得分:0)
如果您没有明确指定起点,您应该知道range
函数从0开始。在您的情况下,它应该是:for i in range(2, 8)
。
输出:
[1, 1, 2, 3, 5, 8, 13, 21]
另外,在Python中,你可以在数组中使用负索引从右边而不是左边计数,这就是你有这个奇怪结果的原因。
答案 4 :(得分:0)
添加到pjs的回答:当i = 0
时,您要添加f[-1]
和f[-2]
,其中索引-1
会为您提供列表中的最后一个元素,因此上。
要解决此问题,正如其他答案已经指出的那样,您需要为range()
设置正确的起点。
答案 5 :(得分:0)
脚本
f=[1,1]
for i in range(2,8):
print(i)
f.append(f[i-1]+f[i-2])
print(f)
输出
2
[1, 1, 2]
3
[1, 1, 2, 3]
4
[1, 1, 2, 3, 5]
5
[1, 1, 2, 3, 5, 8]
6
[1, 1, 2, 3, 5, 8, 13]
7
[1, 1, 2, 3, 5, 8, 13, 21]
问题是i
从0开始,f[-1], f[-2]
返回0。
开始使用范围从2和8代表前8个斐波纳契数。
删除调试打印
脚本
f=[1,1]
for i in range(2,8):
f.append(f[i-1]+f[i-2])
print(f)