這是一次上機(jī)練習(xí)題,其實很簡單,但卻給我難住了??傆X得我的解法很繁瑣,期待最優(yōu)解。
通過這道題,我也發(fā)現(xiàn)了自己在python基礎(chǔ)上存在著不足,本篇文章來討論這道題的最優(yōu)解,并且復(fù)習(xí)一下python中列表的基礎(chǔ)知識。
題目:
計算Fibonacci數(shù)
實現(xiàn)一個計算Fibonacci數(shù)的簡單函數(shù),并利用其實現(xiàn):輸入一個正整數(shù)n(0<n≤100000),輸出小于n的所有Fibonacci數(shù)。所謂Fibonacci數(shù)列就是滿足任一項數(shù)字是前兩項的和(最開始兩項均定義為1)的數(shù)列,例如:1,1,2,3,5,8,13,21,…。函數(shù)fib(n)用列表返回[1, n]中的所有Fibonacci數(shù)。函數(shù)接口定義:def fib(n)其中n是用戶傳入的參數(shù)。
裁判測試程序樣例:
/* 請在這里填寫答案 */
n=int(input())
fiblist=fib(n)
print(fiblist)
輸入樣例:
20
輸出樣例:
[1, 1, 2, 3, 5, 8, 13]
解法:?
# -*- codeing = utf-8 -*-
# @Time : 2022/11/23 20:09
# @Author : 可樂不加糖
# @File : Fibonacci.py
# @Software: PyCharm
'''
解題思路:題目中n表示斐波那契數(shù)的最大值,我先把n當(dāng)作輸出斐波那契數(shù)的個數(shù),
將輸出的斐波那契數(shù)存放到列表list1中,然后再將列表list1中的元素
取出來,一一與n作比較,將小于n的元素存放到列表list2中,返回list2
即得到所有小于n的斐波那契數(shù)。
'''
def fib(n):
list1 = [1]
list2 = []
if n == 1 :
return list1
if n == 2 :
list1.append(1)
return list1
if n >= 3 :
list1.append(1)
for i in range(2, n):
list1.append(list1[i - 1] + list1[i - 2])
# for循環(huán)遍歷list1中的元素,一一與n作比較
for i in list1:
if i < n: # 如果list1中的元素小于n,就添加到list2中
list2.append(i)
return list2
n = int(input()) # 用戶輸入一個正整數(shù)
fiblist = fib(n)
print(fiblist)
輸出樣例:?
?通過代碼可以發(fā)現(xiàn),我用了兩個列表。第一個列表存放n個斐波那契數(shù),第二個列表存放小于n
的斐波那契數(shù)。做這個題的時候,我一直卡在列表的遍歷上,將根據(jù)元素遍歷和根據(jù)索引遍歷傻傻分不清,導(dǎo)致運(yùn)行報錯。
所以,有必要在復(fù)習(xí)一下列表的遍歷。
1.while循環(huán)遍歷列表
list1 = [1, 3, 5, 'kk']
i = 0
while i < len(list1):
print(list1[i])
i += 1
2.for循環(huán)根據(jù)元素直接遍歷列表
list1 = [1, 3, 5, 'kk']
for i in list1:
print(i)
3.for循環(huán)根據(jù)索引遍歷列表
list1 = [1, 3, 5, 'kk']
for i in range(len(list1)):
print(i, list1[i])
# 運(yùn)行結(jié)果:
'''
0 1
1 3
2 5
3 kk
'''
詳解:?
list1 = [1, 3, 5, 'kk']
l = len(list1) # 獲取列表的長度/獲取列表中元素個數(shù)
print(l)
i = range(l) # 根據(jù)元素的個數(shù),生成一個包含n個元素的整數(shù)序列,這里可以認(rèn)為索引列表
print(i)
# 遍歷索引列表,獲取到每一個索引,在根據(jù)索引值來獲取指定的元素
for j in i:
print(j, list1[j])
?
?文章來源地址http://www.zghlxwxcb.cn/news/detail-477950.html
4.創(chuàng)建對應(yīng)的枚舉對象,再遍歷枚舉對象
enumerate()是python的內(nèi)置函數(shù),在字典上是枚舉、列舉的意思。對于一個可迭代的或可遍歷的對象,enumerate將其組成一個索引序列,利用它可以同時獲得索引和值。
list1 = [1, 3, 5, 'kk']
for i in enumerate(list1):
print(i)
# 運(yùn)行結(jié)果:
'''
(0, 1)
(1, 3)
(2, 5)
(3, 'kk')
'''
5.使用迭代器遍歷列表
list1 = [1, 3, 5, 'kk']
# 通過循環(huán),訪問迭代器,獲取列表中的每個元素
for i in iter(list1):
print(i)
# 運(yùn)行結(jié)果:
'''
1
3
5
kk
'''
?文章來源:http://www.zghlxwxcb.cn/news/detail-477950.html
?
?
?
到了這里,關(guān)于Python以列表返回斐波那契數(shù)列的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!