Python 斐波那契-我被卡住了

Python 斐波那契-我被卡住了,python,Python,所以我是编程新手(从我愚蠢的问题中你会看到)。 我真的被这一点困住了: def Fibonnaci(): num = int(raw_input("How many numbers? ")) i = 1 if num ==0: fib = [] elif num ==1: fib = [1] elif num ==2: fib = [1,1] elif num >2: fib =

所以我是编程新手(从我愚蠢的问题中你会看到)。 我真的被这一点困住了:

def Fibonnaci():
    num = int(raw_input("How many numbers? "))
    i = 1
    if num ==0:
        fib = []
    elif num ==1:
        fib = [1]
    elif num ==2:
        fib = [1,1]
    elif num >2:
        fib = [1,1]
    while i < (num - 1):
        fib.append(fib[i] + fib[i -1])
        i += 1
    return fib
print Fibonnaci()
def Fibonnaci():
num=int(原始输入(“多少个数字?”)
i=1
如果num==0:
fib=[]
elif num==1:
fib=[1]
elif num==2:
fib=[1,1]
elif num>2:
fib=[1,1]
而i<(num-1):
fib.append(fib[i]+fib[i-1])
i+=1
回音
打印Fibonnaci()
我没有得到的是
fib.append(fib[I]+fib[I-1])

假设我在输入中选择的数字是
5
。因此,
fib
列表将包含
[1,1]
。然后
i
将是
1
。现在我感到困惑。如果
fib[i]
中的
i
1
,则
i-1
0
1+0
1
,然后打印输出应为
[1,1,1,3,5]
。这实际上是在我删除
fib
时发生的。只将其保留为
fib.append(i+(i-1))

所以我假设fib正在做一些重要的事情,但我不知道是什么。因为此时
i=1
。那么列表是如何得到
2
的呢?输出为
1,1,2,3,5
。 即使
fib[i]
意味着
i
现在是
2
,因为列表中有
[1,1]
,那么它将变成
2+1=3
,因此
fib
现在是
[1,1,3]


我希望我没有把你完全弄糊涂(因为我把自己弄糊涂了)

i
在这里只是一个计数器。最后一部分可以这样更改:

# we need to repeat n-2 times (i.e. once for a list of 3)
for i in range(num-2):
    # fib is the array of numbers we already have
    # we append sum of the last two elements n-2 times
    fib.append(fib[-1] + fib[-2])  
return fib

在原始示例中,由于
i
fib
的长度相同,因此将其用作索引。因此,
fib[i]
是最后一个元素,
fib[i-1]
是最后一个元素,但这里只有一个计数器。最后一部分可以这样更改:

# we need to repeat n-2 times (i.e. once for a list of 3)
for i in range(num-2):
    # fib is the array of numbers we already have
    # we append sum of the last two elements n-2 times
    fib.append(fib[-1] + fib[-2])  
return fib

在原始示例中,由于
i
fib
的长度相同,因此将其用作索引。因此,
fib[i]
是最后一个元素,
fib[i-1]
是最后一个元素,但如果写入
fib[i]
,则表示表达式扩展为索引
i
上列表
fib
中的值。假设我们构建了
fib
,它是:

fib = [1,1]
第一次迭代 现在
i=1
我们执行以下行:

fib.append(fib[i]+fib[i-1])
现在这意味着什么,首先将表达式展开,将
i
替换为
1
,我们这样读:

fib.append(fib[1]+fib[1-1])

现在,
fib
fib[1]
)的第二个(列表从索引
0
开始)值是
1
,第一个元素(
fib[0]
)也是如此,因此我们将其扩展为:

fib.append(1+1)
或:

现在Python将执行此操作,
fib
现在是:

fib = [1,1,2]
第二次迭代 更改
fib
后,
i
将更新(现在
i=2
),因此我们进行下一次迭代。在此迭代中,我们再次执行:

fib.append(fib[i]+fib[i-1])
由于
i=2
,我们可以将其替换为:

fib.append(fib[2]+fib[1])
现在,列表的第三个(
fib[2]
)和第二个(
fib[1]
)元素分别是
1
2
(您可以在上一节末尾对此进行检查),因此Python将运行:

fib.append(2+1)
因此,这相当于:

fib.append(3)
所以在这个迭代之后,
fib
等于:

fib = [1,1,2,3]

重复此过程,直到
i
到达边界。因此,每次Python都会读取迄今为止构建的
fib
列表的最后两个元素,将它们相加,并将其添加到列表的末尾(
fib
)。最后,如果达到界限,则返回结果。

如果写入
fib[i]
则表示表达式扩展到索引
i
上列表
fib
中的值。假设我们构建了
fib
,它是:

fib = [1,1]
第一次迭代 现在
i=1
我们执行以下行:

fib.append(fib[i]+fib[i-1])
现在这意味着什么,首先将表达式展开,将
i
替换为
1
,我们这样读:

fib.append(fib[1]+fib[1-1])

现在,
fib
fib[1]
)的第二个(列表从索引
0
开始)值是
1
,第一个元素(
fib[0]
)也是如此,因此我们将其扩展为:

fib.append(1+1)
或:

现在Python将执行此操作,
fib
现在是:

fib = [1,1,2]
第二次迭代 更改
fib
后,
i
将更新(现在
i=2
),因此我们进行下一次迭代。在此迭代中,我们再次执行:

fib.append(fib[i]+fib[i-1])
由于
i=2
,我们可以将其替换为:

fib.append(fib[2]+fib[1])
现在,列表的第三个(
fib[2]
)和第二个(
fib[1]
)元素分别是
1
2
(您可以在上一节末尾对此进行检查),因此Python将运行:

fib.append(2+1)
因此,这相当于:

fib.append(3)
所以在这个迭代之后,
fib
等于:

fib = [1,1,2,3]

重复此过程,直到
i
到达边界。因此,每次Python都会读取迄今为止构建的
fib
列表的最后两个元素,将它们相加,并将其添加到列表的末尾(
fib
)。最后,如果达到界限,则返回结果。

是否要编写一个打印斐波那契数的程序?如果
i==1
,则
fib[i]==fib[1]==1
fib[i-1]==fib[0]==1
。因此,
fib[i]+fib[i-1]==1+1==2
,列表被修改为
fib.append(2)
。斐波那契序列从1,1,2,3,5开始;从1开始,将这两个数字相加,结果为2,并将其添加到列表中。我不是专门测试你的代码的,但是你是说数组包含1,1,2,3,5,而你希望它包含1,1,3,5吗?@Makoto(和