Python 101 基礎教學 (5) - 迴圈 for loop、while

在程式語言裡,如果要重複性的做某件事時,你就需要使用迴圈。Python 的迴圈用法與其他語言稍有不同,對初學者沒有差別,但先前學過其他語言的可能就要適應一下。

// js
for (let i = 0; i < 10; i++) {
	console.log('hi');
}
# python
for i in range(10):
	print('hi')

以上兩種語言的意思一樣,會印出 10 次的 'hi'。

Iterable(可疊代的)

Iterable 被翻譯為可疊代的,白話一點有點像是:這個東西是可以走過一遍的。當一個東西是 Iterable,代表他可以被使用於 Python 的 for loop裡。

string、list、tuple、dict、set 等都是一個 Iterable。如何判斷一個東西是Iterable,可以用 isinstance 判斷:

from collections import Iterable # 從collections這個模組載入Iterable方法

print(isinstance(123, Iterable)) # output: False
print(isinstance('hi', Iterable)) # output: True
print(isinstance([], Iterable)) # output: True
print(isinstance({}, Iterable)) # output: True

For Loop(迴圈)

知道了 Iterable 以後,就可以開始使用for loop。當迴圈開始時,從Iterable的最開始的元素走起,每走一個就進入迴圈裡執行你指派的工作,執行完後再走到下一個元素,重複直到結束。

# 語法如下:
# for [i] in [Iterable]:
#     do something

# 一些範例
# 以下會印出 1 2 3 (每一次的print會換行,這裡寫的不精準)
for i in [1, 2, 3]: # Iterable為[1,2,3],i會在每一迴圈裡分別為1,2,3
	print(i)

# 你可以對i做一些操作
# 以下會印出 2 3 4
if i in [1, 2, 3]:
	print(i + 1)

# 你可以不使用 i 
# 以下會印出3次 hi
for _ in [1, 2, 3]: # 當你不需要使用i時候,大家習慣性會用_作為變數
	print('hi')
 
# 你可以配合if做出更多事
# 以下會印出list裡面的偶數:2 4 6 8
for i in [1, 2, 3, 4, 5, 6, 7, 8]:
	if i % 2 == 0:
    	print(i)

# string也是Iterable
# 以下會印出 h e l l e
for i in 'hello':
	print(i)
     

Range

大部分的時候,我們要的就是簡單的重複做事,而且又想要i是有順序的,那就會使用 range 。使用 range 可以變化出不同數量、內容的 Iterable。

# range的語法如以下,最多可以給3個參數,
# 分別為起始數字start、停止數字stop(不包含)、差異數step
# 第一個參數與第三個可以省略,如果不填起始數字,預設為0,
# 第三個參數不填,預設是1
# range([start,] stop [, step])

# range(5)是一個Iterable,每一輪分別給出0,1,2,3,4
# 以下會印出 0 1 2 3 4
for i in range(5):
	print(i)

# range(1, 5) 會依序給出的序列為 1,2,3,4
# 以下印出 1 2 3 4
for i in range(1, 5):
	print(i)
    
# range(1, 10, 2) 會依序給出的序列為 1, 3, 5, 7, 9
# 第三個參數2會讓每次數字 +2
for i in range(1, 10, 2):
	print(i)
    
# range(1, 10, 2) 會依序給出的序列為 1, 3, 5, 7, 9
# 第三個參數(step)會讓每次數字 +2
for i in range(1, 10, 2):
	print(i)
    
# step可以是負的
# range(10, -1, -1) 給出 10,9,8,7,6,5,4,3,2,1,0
for i in range(10, -1, -1):
	print(i)

While Loop

while 後面接的是條件式,如果條件為 True 就會進入迴圈。但要注意要讓條件式在某個地方終止,不然就會造成無限迴圈。

# 把i初始化為0,每一次迴圈裡i<5就印出i,然後把i加上1
# 以下印出 0 1 2 3 4
i = 0
while i < 5:
	print(i)
    i += 1

# 無限迴圈(避免寫出這樣的例子)
# 因為while後面的條件式永遠是True,會一直進入迴圈停不下來
while True:
	print(1)

Nested For Loop

巢狀迴圈 Nested For Loop 是指迴圈裡面包含迴圈,邏輯初學者來說應該會很容易混亂,但熟悉以後會發現用法可以千變萬化。

# 印出5x5正方形
for _ in range(5):
    s = ''
    for _ in range(5):
        s += '*'
    print(s)

# output:
# *****
# *****
# *****
# *****
# *****

# 裡層迴圈利用外層迴圈的變量
for i in range(1, 11): # i從1到10
    x = 0
    # i=1時,j從0到1;i=2時,j從0到2...i=10時,j從0到10
    for j in range(i + 1): 
        x += j
    print(x)

# output:
# 1
# 3
# 6
# 10
# 15
# 21
# 28
# 36
# 45
# 55

練習

1.  使用range印出 1-10的平方數

1
4
9
16
25
36
49
64
81
100

2.  使用range印出:

*
**
***
****
*****

3.  使用range印出:

*****
 ****
  ***
   **
    *
Python 101 基礎教學 - 迴圈 for loop、while 練習解法參考
以下解法為參考,大家可以自行寫出自己不一樣的解法。 1. 使用range印出 1-10的平方數 149162536496481100 # solutionfor i in range(1, 11): print(i ** 2) # 或者用 i * i (** 2是2次方的意思) 2. 使用range 印出: *************** # solutionfor i in range(1, 6): s = ″ for j in range(i): s += ‘*’ print(s) # solution 2for i …

繼續閱讀:

Python 101 基礎教學 (6) - Function 函式
函式 function 我們自定義的一個區塊,區塊裡的程式只有在我們呼叫的時候才會執行。函式的好處包含了可以重複使用之外,也增加了易讀性。