從本實例學到什麼
- range函數的用法。
- 輸出一個整數,佔10列列寬。
- 每輸出5個數,換行。
實例程序
題目描述
用數組存儲並輸出Fibonacci數列的前20項,按5個一行輸出。
Fibonacci數列的規律是:第1項是1,第2項是1。第k項等於第k-1項加上第k-2項之和(k=3, 4, …)。
輸出格式:
每行輸出5個Fibonacci數,每個數輸出佔10列列寬。
輸出樣例:
1 1 2 3 5
8 13 21 34 55
89 144 233 377 610
987 1597 2584 4181 6765
上述題目的參考答案
fib = [1, 1] #fib是列表,存儲了Fibonacci數列的前兩項
for i in range(2, 20):
fib.append(fib[i-1] + fib[i-2]) #求出Fibonacci數列的第3-20項
for i in range(20):
print("%10d"%fib[i], end='') #格式控制串"%10d"使得輸出fib[i]佔10列。end=''使得輸出不換行。
if i % 5 == 4:
print() #每5個,換行一次
知識點講解
-
在效果上,range(2, 20)生成了以下列表[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]。注意不包含20。因此,上述代碼中的第2,3行的循環執行了18次。
-
在效果上,range(20)生成了以下列表[0,1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]。注意該列表不包含20。因此,上述代碼中的第4-7行的循環執行了20次。
-
調用range()函數的完整寫法是: range(<起點>, <終點>, <增量>)。作用是生成等差序列。舉例說明如下:
(3-1) range(0, 5, 1)。起點是0, 終點是5, 增量是1。效果上,生成的等差序列是[0, 1, 2, 3, 4],不包含5。序列的增量是1。
(3-2)range(0, 5, 2)。起點是0, 終點是5, 增量是2。效果上,生成的等差序列是[0, 2, 4],序列最後一個元素不能大於也不能等於含5。序列的增量是2。
(3-3)range(5, 0, -1)。起點是5, 終點是0, 增量是-1。效果上,生成的等差序列是[5, 4, 3, 2, 1],序列最後一個元素不能小於或等於0。序列增量是-1。 -
調用range()函數,可以只傳入兩個參數。寫法是: range(<起點>, <終點>)。這意味着省略了增量這個參數。此時,增量是1——增量的默認值是1。反過來說,增量不是1的話,不能省略第三個從參數,即增量參數。舉例說明如下:
(4-1)range(0, 5)。與(3-1)的用法等效。增量是1。
(4-2) range(2, 8)。起點是2,終點是8,增量是1。效果上,生成的等差序列是[2, 3, 4, 5, 6, 7],不包含8——序列的最後一個元素不能大於等於8。
(4-3)range(0, 5, 2)。增量是2,不能省略。
(4-4)range(5, 0, -1)。增量是-1,不能省略。 -
調用range()函數,可以只傳入一個參數。寫法是: range(<終點>)。這意味着省略了起點和增量這兩個參數。此種情形下,起點是0,增量是1。起點參數的默認值是0,增量參數的默認值是1。舉例說明如下:
(5-1)range(5)。與上面的(4-1), (3-1)的用法等同。起點是0,增量是1。
(5-2)range(8)。生成的等差序列是[0, 1, 2, 3, 4, 5, 6, 7]。起點是0,增量是1。 -
調用range()函數,完整的寫法要傳入3個參數,依次是起點,重點和增量。傳入2個參數時,省略了增量,意味着增量是1。傳入1個參數時,省略了起點和增量,意味着起點是0,增量是1。
小結
- 調用range()函數的完整寫法是: range(<起點>, <終點>, <增量>)。作用是生成等差序列,相鄰元素之間的差值是<增量>。注意,序列不包含終點。
- 調用range()函數,完整的寫法要傳入3個參數,依次是起點,重點和增量。傳入2個參數時,省略了增量,意味着增量是1。傳入1個參數時,省略了起點和增量,意味着起點是0,增量是1。