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(和