Python 101 基礎教學 (5) - 迴圈 for loop、while
在程式語言裡,如果要重複性的做某件事時,你就需要使用迴圈。Python 的迴圈用法與其他語言稍有不同,對初學者沒有差別,但先前學過其他語言的可能就要適應一下。
在程式語言裡,如果要重複性的做某件事時,你就需要使用迴圈。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印出:
*****
****
***
**
*
繼續閱讀: