Python程式設計
Lesson 6 - 迴圈
108期中考檢討第一題
# 請寫一個程式,讓使用者輸入兩張撲克牌,計算並輸出總和
card1 = input('輸入第一張牌')
card2 = input('輸入第二張牌')
if card1 == 'A':
card1 = 1
if card2 == 'A':
card2 = 1
print(int(card1) + int(card2))
108期中考檢討第二題
# 輸入一個正整數,判斷是5或7的倍數
number = int(input('輸入正整數'))
mod5 = number % 5
mod7 = number % 7
if number<=0:
print('不是正整數')
else:
if mod5==0 and mod7==0:
print('5 和 7的倍數')
elif mod5==0:
print('5的倍數')
elif mod7==0:
print('7的倍數')
else:
print('不是5 或 7的倍數')
程式基本概念程式與演算法
Algorithm
發音: Al-go-ri-thm
演算法: 完成一件工作的一系列步驟
Program
發音: Pro-gram
程式: 編程完成的演算法(可執行)
演算法(步驟)
向右移動一格
塗滿空格
向右移動一格
向下移動一格
塗滿空格
有5個程式指令:
上 下 左 右
填滿
程式
右
填滿
右
下
填滿
由星號出發
程式基本概念資料
Variable
發音: Va-ri-able
變數: 資料內容(可改變) 的存放空間
Data Type
發音: Da-ta Type
資料型別: 資料存放空間的類型
x = 5
y = input('請輸入數值')
指定
半徑 = int(input('輸入:')) // 字串轉整數
面積 = 3.14 * 半徑**2; // 平方, 乘法
運算
半徑字串 = input('輸入:') // 字串
半徑數值 = int(半徑字串) // 字串轉整數
面積 = 3.14 * 半徑數值**2; // 平方, 乘法
# 轉換函式: int(), float(), str(), chr()
型別轉換
程式基本概念流程控制
Loop
發音: loop
迴圈: 重複做的動作
Conditionals
發音: Con-di-shun-uls
條件判斷: 在某些情況才會執行的動作
for i in range(1,10,2):
print(i, end=',')
# 印出 2,4,6,8
total = n = 0
while(n < 10): # 條件式: n < 10
n += 1 # 自行改變 n值
total += n
# 加總1~10
for迴圈
while迴圈
if score<60:
print('不及格')
elif score<=80:
print('甲等')
else:
print('超出範圍')
選擇結構
電腦最擅長...
重複的工作
累加
費式數列
矩陣乘法
迴圈(Loop)語法
搜尋
電腦有多快(1/3)
MIPS: 百萬指令/秒
8位元CPU: 8086
Core i7-8086K
CPU cycle: cpu循環
電腦有多快(2/3)
執行: 不同類型指令
讀取
解碼
儲存
不同類型指令:算術運算、邏輯運算...
面積 = 半徑 ** 2 * 3.14
if 面積>100:
print('....')
elif:
print('....')
電腦有多快(3/3)
加法指令
浮點數加法指令
乘法指令
浮點數除法指令
CPU循環
少
多
小於1個循環
1~3個循環
1~7個循環
10~40個循環
迴圈loop (1/18)
問題:如何產生1000 個「Hello」?
print('Hello')
print('Hello')
print('Hello')
# ....省略...
print('Hello')
總共1000個print:共1000行
for i in range(1000):
print('Hello ')
迴圈版:2行
for迴圈語法?
range(1000)?
串列串列與For迴圈(2/18)
for 迴圈變數 in 數列:
程式區塊
基本語法回顧
For迴圈使用串列
數列: 可用range()建立
數列: 也可用串列建立
for 迴圈變數 in 串列:
程式區塊
使用串列建立數列
範例
fruits = ['香蕉', '鳳梨', '蘋果', '橘子']
for item in fruits:
print('水果名:%s' % item) # 印出迴圈變數值
水果名:香蕉
水果名:鳳梨
水果名:蘋果
水果名:橘子
執行結果
串列串列與For迴圈(3/18)
# ch7_3.py
players = ['Curry', 'Jordan', 'James', 'Durant', 'Obama']
for player in players:
print(player)
串列串列與For迴圈(4/18)
範例
# ch7_5.py
players = ['curry', 'jordan', 'james', 'durant', 'obama']
for player in players:
print(player.title( ) + ", it was a great game.")
print("I can not wait to see your next game, " + player.title( ))
Curry, it was a great game.
I can not wait to see your next game, Curry
Jordan, it was a great game.
I can not wait to see your next game, Jordan
James, it was a great game.
I can not wait to see your next game, James
Durant, it was a great game.
I can not wait to see your next game, Durant
Obama, it was a great game.
I can not wait to see your next game, Obama
執行結果
for迴圈內的程式區塊可以有多行
串列串列與For迴圈(5/18)
範例
# ch7_6.py
players = ['Curry', 'Jordan', 'James', 'Durant', 'Obama']
print("列印前3位球員")
for player in players[:3]:
print(player)
print("列印後3位球員")
for player in players[-3:]:
print(player)
列印前3位球員
Curry
Jordan
James
列印後3位球員
James
Durant
Obama
執行結果
for迴圈搭配擷取部份串列內容
迴圈函式:range() (6/18)
函式:range()
- 作用: 建立整數循序數列
- 循序數列:1,2,3,....依序改變的數列(例: 等差級數)
- 可用於迴圈(例如設定迴圈執行1000次)
數列變數 = range(整數值) # 單一參數
list1 = range(5) # 注意不能用list當變數名稱
print(list(list1)) # 因為list()是內建函式
print(list1) # 印出'range(0, 5)'
print(type(list1)) # 印出 list1型別
基本語法❶
產生 0 到 (整數值 - 1) 的數列
範例
range(0, 5)
[0, 1, 2, 3, 4]
<class 'range'>
執行結果
從0開始, 共5個
注意方括弧: 代表「串列」(最重要的資料型別)
list(range物件): 可將range物件轉為「串列」
迴圈函式:range() (7/18)
範例
# ch7_7.py
n = 5
number1 = list(range(n))
print("當n值是%d時的range( )串列 = " % n, number1)
n = 8
number2 = list(range(n))
print("當n值是%d時的range( )串列 = " % n, number2)
當n值是5時的range( )串列 = [0, 1, 2, 3, 4]
當n值是8時的range( )串列 = [0, 1, 2, 3, 4, 5, 6, 7]
執行結果
使用range()函數,產生串列的應用
範例
# ch7_8.py
n = 5
print("當n值是%d時的range( )串列元素:" % n)
for number in range(n):
print(number)
n = 8
print("當n值是%d時的range( )串列元素:" % n)
for number in range(n):
print(number)
當n值是5時的range( )串列元素:
0
1
2
3
4
當n值是8時的range( )串列元素:
0
1
2
3
4
5
6
7
迴圈函式:range() (8/18)
數列變數 = range(起始值, 終止值) # 二個參數
list2 = range(5, 10) # 數列5,6,7,8,9
list3 = range(-3, 3) # 數列-3,-2,-1,0,1,2
list4 = range(5, 3) # 空數列, 因為起始值較大
基本語法❷
產生 「起始值」 到 (終止值 - 1) 的數列
範例
迴圈函式:range() (9/18)
# ch7_9.py
start = 2
end = 6
number1 = list(range(start, end))
print("當start值是%2d, end值是%2d時的range( )串列 = " % (start, end), number1)
start = -2
end = 3
number2 = list(range(start, end))
print("當start值是%2d, end值是%2d時的range( )串列 = " % (start, end), number2)
start = -5
end = -1
number3 = list(range(start, end))
print("當start值是%2d, end值是%2d時的range( )串列 = " % (start, end), number3)
當start值是 2, end值是 6時的range( )串列 = [2, 3, 4, 5]
當start值是-2, end值是 3時的range( )串列 = [-2, -1, 0, 1, 2]
當start值是-5, end值是-1時的range( )串列 = [-5, -4, -3, -2]
執行結果
使用range()函數,產生串列的應用
迴圈函式:range() (10/18)
# ch7_10.py
start = 2
end = 6
print("當start值是%d, end值是%d時的range( )串列元素:" % (start, end))
for number in range(start,end):
print(number)
start = -2
end = 3
print("當start值是%d, end值是%d時的range( )串列元素:" % (start, end))
for number in range(start,end):
print(number)
start = -5
end = -1
print("當start值是%d, end值是%d時的range( )串列元素:" % (start, end))
for number in range(start,end):
print(number)
使用range()函數,產生串列的應用
迴圈函式:range() (11/18)
基本語法❸
數列變數 = range(起始值, 終止值, 間隔值) # 三個參數
list5 = range(2, 10, 2) # 數列2,4,6,8
list6 = range(100, 90, -3) # 數列100, 97, 94, 91
範例
產生從「起始值」開始,遞增「間隔值」,直到 (終止值 - 1) 的數列
迴圈函式:range() (12/18)
# ch7_11.py
start = 2
end = 9
step = 2
number1 = list(range(start, end, step))
print("當start值是%2d, end值是%2d, step值是%2d時的range( )串列 = " % (start, end, step), number1)
start = -2
end = 9
step = 3
number2 = list(range(start, end, step))
print("當start值是%2d, end值是%2d, step值是%2d時的range( )串列 = " % (start, end, step), number2)
start = 5
end = -5
step = -3
number3 = list(range(start, end, step))
print("當start值是%2d, end值是%2d, step值是%2d時的range( )串列 = " % (start, end, step), number3)
使用range()函數,產生串列的應用
當start值是 2, end值是 9, step值是 2時的range( )串列 = [2, 4, 6, 8]
當start值是-2, end值是 9, step值是 3時的range( )串列 = [-2, 1, 4, 7]
當start值是 5, end值是-5, step值是-3時的range( )串列 = [5, 2, -1, -4]
執行結果
迴圈函式:range() (13/18)
# ch7_12.py
start = 2
end = 9
step = 2
number1 = list(range(start, end, step))
print("當start值是%2d, end值是%2d, step值是%2d時的range( )串列元素:" % (start, end, step))
for number in range(start,end,step):
print(number)
start = -2
end = 9
step = 3
number2 = list(range(start, end, step))
print("當start值是%2d, end值是%2d, step值是%2d時的range( )串列元素:" % (start, end, step))
for number in range(start,end,step):
print(number)
start = 5
end = -5
step = -3
number3 = list(range(start, end, step))
print("當start值是%2d, end值是%2d, step值是%2d時的range( )串列元素:" % (start, end, step))
for number in range(start,end,step):
print(number)
使用range()函數,產生串列的應用
迴圈for迴圈更多應用 (14/18)
# ch7_14.py
n = int(input("請輸入整數:"))
number = list(range(n + 1)) # 建立串列
total = 0 # 總計
for i in number:
total += i
print("從1到%d的總和是 = " % n, total)
範例:輸入整數n,算出1+2+3+...+n的總和
...
sum = 0
for i in range(3, 13, 3):
sum += i
...
total += i的運作方式?
迴圈for迴圈更多應用 (15/18)
# ch7_15.py
n = int(input("請輸入整數:"))
total = 0 # 總計
for i in range(1, n+1):
total += i
print("從1到%d的總和是 = " % n, total)
範例:輸入整數n,算出1+2+3+...+n的總和(另一種寫法)
迴圈for迴圈更多應用 (16/18)
# ch7_16.py
squares = [] # 建立空串列
n = int(input("請輸入整數:"))
if n > 10 : n = 10 # 最大值是10
for num in range(1, n+1):
value = num * num # 元素平方
squares.append(value) # 加入串列
print(squares)
範例:輸入n值,求1到n的平方合 1²+2²+...+n²=?
# ch7_17.py
squares = [] # 建立空串列
n = int(input("請輸入整數:"))
if n > 10 : n = 10 # 最大值是10
for num in range(1, n+1):
squares.append(num ** 2) # 加入串列
print(squares)
範例3
students = ['張三', '李四', '趙大', '王五']
for i in range(len(students)):
print('編號 %d: 姓名:%s' % (i+1, students[i]))
編號 1: 姓名:張三
編號 2: 姓名:李四
編號 3: 姓名:趙大
編號 4: 姓名:王五
執行結果
students[i]: 串列第i個元素。從0起算
len()函式: 串列長度
迴圈for迴圈更多應用 (17/18)
練習:科目名稱串列與分數串列如下:
subjects = ['國文', '英文', '數學']
scores = [100, 80, 90]
國文科:100分 英文科:80分 數學科:90分
執行結果
請運用range(), len()等函式,將串列內容輸出如下:
迴圈for迴圈更多應用 (18/18)
Python迴圈語法
- for迴圈: 通常用於「迴圈次數固定」的清況
- while迴圈: 通常用於「迴圈次數不固定」的清況
- 巢狀迴圈: 迴圈內含另一層(或含多層)迴圈
- 跳出迴圈: break指令
- 跳過當輪迴圈: continue指令
for迴圈回顧(1/4)
用於固定次數的迴圈
for 迴圈變數 in 數列:
程式區塊
基本語法
for, in都是保留字
迴圈變數自行取名
數列: 可用range()建立
程式區塊: 需縮排,可多行
for 迴圈變數 in range(起始值, 終止值, 間隔值):
程式區塊
終止值, 間隔值 可省略
使用range()建立數列
範例
for i in range(1000):
print('Hello')
print('這是第幾輪 %d' % i) # 印出迴圈變數值
for迴圈回顧(2/4)
for迴圈開始
程式區塊
條件式
for迴圈結束
True
False
for n in range(5):
print(n, end=",")
0,1,2,3,4,
印出
條件式?
n < 5
for迴圈回顧(3/4)
for迴圈開始
顯示 i
i < n + 1
for迴圈結束
True
False
輸入正整數n
範例1 : 顯示正整數數列
- 輸入正整數n後,依序印出1到n
n = int(input('輸入正整數:'))
for i in range(1, n+1):
print(i, end=",")
輸入正整數:5
1,2,3,4,5,
執行結果
for迴圈回顧(4/4)
範例2 : 產生ASCII碼
- 輸入起始值,終止值後,依序印出對應的ASCII字元
s=int(input('輸入起始值:'))
e=int(input('輸入終止值:'))
for i in range(s, e+1): # 終止值也要列印, 所以e+1
print('ascii碼: %d, 字元:%s' % (i,chr(i)))
輸入起始值:65
輸入終止值:90
ascii碼: 65, 字元:A
ascii碼: 66, 字元:B
... 省略 ...
ascii碼: 90, 字元:Z
執行結果
chr(i): 整數轉字元
二進位
16進位
國際標準: 鍵盤上所有字元(也含控制字元)
ASCII編碼(二進位編碼)
控制字元
十進位
16進位
while迴圈(1/7)
用於沒有固定次數的迴圈
while(條件式):
程式區塊
基本語法
沒有迴圈變數
注意[條件式]是否會一直[成立]
程式區塊: 需縮排,可多行
條件式的括弧 可省略
範例
total = n = 0
while(n < 10): # 條件式: n < 10
n += 1 # n 不會自動增加
total += n # 數值加總
print('加總:%d' % total)
無窮迴圈
while迴圈(2/7)
while迴圈開始
程式區塊
條件式
while迴圈結束
True
False
迴圈每輪都必須再輸入
才能改變條件式的結果
輸入值是否為'q'
# ch7_26.py
msg1 = '人機對話專欄,告訴我心事吧...'
msg2 = '輸入 q 可以結束對話'
msg = msg1 + '\n' + msg2 + '\n' + '= '
input_msg = '' # 預設為空字串
while input_msg != 'q':
input_msg = input(msg)
print(input_msg)
條件式?
while迴圈(3/7)
# ch7_27.py
msg1 = '人機對話專欄,告訴我心事吧,我會重複你告訴我的心事!'
msg2 = '輸入 q 可以結束對話'
msg = msg1 + '\n' + msg2 + '\n' + '= '
input_msg = '' # 預設為空字串
while input_msg != 'q':
input_msg = input(msg)
if input_msg != 'q': # 如果輸入不是q才輸出訊息
print(input_msg)
改良ch7-26.py,'q'不會重複印出
# ch7_29.py
answer = 30 # 正確數字
guess = 0 # 設定所猜數字的初始值
while guess != answer:
guess = int(input("請猜1-100間的數字 = "))
if guess > answer:
print("請猜小一點")
elif guess < answer:
print("請猜大一點")
else:
print("恭喜答對了")
猜數字遊戲
while迴圈(4/7)
while迴圈開始
i += 1
total *= i
i < n
while迴圈結束
True
False
輸入正整數n
total = i = 1
範例 : 計算n階層n! = 1✕2✕...✕n
- 輸入正整數n後,算出n!
n = int(input('輸入正整數:'))
total = i = 1
while(i<n):
i += 1
total *= i
print('%d階層 = %d' % (n, total))
輸入正整數:5
5階層 = 120
執行結果
while迴圈(5/7)
範例 : 輸入m值,找出大於m值最小n!
- 例如m=1000, 因6!=720, 7!=5040,故最小n值為7
m = int(input('輸入正整數:'))
total = i = 1
while(total < m):
i += 1
total *= i
print('%d階層 = %d' % (i, total))
輸入正整數:6000
8階層 = 40320
執行結果
while迴圈(6/7)
練習:輸入正整數n之後,印出介於1~n之間所有偶數
輸入正整數:6
2,4,6,
執行結果
輸入正整數:17
2,4,6,8,10,12,14,16,
執行結果
while迴圈隨堂測驗(7/7)
題目:求大於1000的最小平方和
- 求最小的n值,滿足1²+2²+...+n²>1000
1加到1平方=1
1加到2平方=5
1加到3平方=14
1加到4平方=30
1加到5平方=55
1加到6平方=91
1加到7平方=140
1加到8平方=204
1加到9平方=285
1加到10平方=385
1加到11平方=506
1加到12平方=650
1加到13平方=819
1加到14平方=1015
最小的n值是: 14
執行結果
巢狀迴圈巢狀for迴圈(1/5)
基本語法
內、外:各有自己的迴圈變數
內程式區塊: 再往內縮排
範例
# 5張牌可重複抽, 所有可能的組合
for card1 in range(1, 6):
for card2 in range(1,6):
print('%d %d' % (card1, card2))
迴圈範圍內又有迴圈,可以好幾層
for 外迴圈變數 in 數列1:
for 內迴圈變數 in 數列2:
內程式區塊
巢狀迴圈巢狀for迴圈(2/5)
基本語法
範例
# 5張牌可重複抽, 所有可能的組合
for card1 in range(1, 6):
print('第%d張牌' % card1, end=":")
for card2 in range(1,6):
print('%d' % card2, end=",")
print('') # 換行
內層迴圈屬於「外程式區塊」的一部分
for 外迴圈變數 in 數列1:
程式碼-外程式區塊
for 內迴圈變數 in 數列2:
內程式區塊
程式碼-外程式區塊
縮排決定屬於哪個程式區塊
第1張牌:1,2,3,4,5,
第2張牌:1,2,3,4,5,
第3張牌:1,2,3,4,5,
第4張牌:1,2,3,4,5,
第5張牌:1,2,3,4,5,
執行結果
巢狀迴圈巢狀for迴圈(3/5)
範例:99乘法表
# 九九乘法表
for i in range(1,10):
for j in range(1,10):
print('%d*%d = %2d' % (i, j, i*j))
# 九九乘法表
for i in range(1,10):
for j in range(1,10):
print('%d*%d=%2d\t' % (i, j, i*j), sep='', end='')
print() # 換行
1*1= 1 1*2= 2 1*3= 3 1*4= 4 1*5= 5 1*6= 6 1*7= 7 1*8= 8 1*9= 9
2*1= 2 2*2= 4 2*3= 6 2*4= 8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18
3*1= 3 3*2= 6 3*3= 9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
4*1= 4 4*2= 8 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36
5*1= 5 5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45
6*1= 6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=54
7*1= 7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 7*8=56 7*9=63
8*1= 8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 8*9=72
9*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
基本寫法
考量輸出格式
巢狀迴圈巢狀for迴圈(4/5)
範例
height = int(input('三角形的高:'))
for i in range(1, height+1):
for j in range(1, i+1):
print('#', end = '')
print() # 換行, 外層迴圈
三角形的高:5
#
##
###
####
#####
執行結果
範例:以#字號畫出直角三角形
外圈變數i 用於改變內圈回合數
巢狀迴圈巢狀while迴圈(5/5)
範例:巢狀while迴圈輸出99乘法表
# ch7_31.py
i = 1 # 設定i初始值
while i <= 9: # 當i大於9跳出外層迴圈
j = 1 # 設定j初始值
while j <= 9: # 當j大於9跳出內層迴圈
result = i * j
print("%d*%d=%-3d" % (i, j, result), end=" ")
j += 1 # 內層迴圈加1
print() # 換行輸出
i += 1 # 外層迴圈加1
巢狀迴圈練習
三角形的高:5
#####
####
###
##
#
執行結果
練習:以#字號畫出倒直角三角形
提示: 迴圈變數改為「遞減」,#數量逐回合變少
迴圈特殊指令break(1/7)
基本語法
條件式若成立: 跳出迴圈
while迴圈也適用
break: 中途跳出迴圈(後續回合不再執行)
for 迴圈變數 in 數列1:
程式碼1...
if 條件式:
break
程式碼2...
迴圈後程式碼
for迴圈開始
程式區塊2
break
for迴圈結束
True
False
還有元素?
程式區塊1
True
False
break:不管有無元素,都跳出
# ch7_21.py
print("測試1")
for digit in range(1, 11):
if digit == 5:
break
print(digit, end=', ')
print( )
print("測試2")
for digit in range(0, 11, 2):
if digit == 5:
break
print(digit, end=', ')
迴圈特殊指令break(2/7)
基本語法
條件式2若成立: 跳出迴圈
範例
break: 中途跳出迴圈(後續回合不再執行)
while 條件式1:
程式碼1...
if 條件式2:
break
程式碼2...
迴圈後程式碼
# ch7_32.py
msg1 = '人機對話專欄,請告訴我妳喜歡吃的水果!'
msg2 = '輸入 q 可以結束對話'
msg = msg1 + '\n' + msg2 + '\n' + '= '
while True: # 這是while無限迴圈
input_msg = input(msg)
if input_msg == 'q': # 輸入q可用break跳出迴圈
break
else:
print("我也喜歡吃 %s " % input_msg.title( ))
迴圈特殊指令break(3/7)
a = int(input('輸入正整數a:'))
b = int(input('輸入正整數b:'))
if (a<=0 or b<=0): # 輸入不是正整數, 結束程式
print('請輸入2個正整數')
else:
for i in range(1, a*b+1):
if(i%a==0 and i%b==0):
break
print("%d和%d的最小公倍數是:%d" % (a, b, i) )
範例1:找尋最小公倍數
- 輸入正整數a, b; 找出兩者的最小公倍數
迴圈特殊指令break(4/7)
num = int(input('輸入大於1的正整數:'))
prime = True # 預設是質數
j = 2
while j<num:
if(num%j==0): # 找到任一個可整除的數
print('%d可被%d整除' % (j, num))
prime = False # 非質數
break
j=j+1 # j往上遞增
if(prime):
print('%d是質數' % num)
else:
print('%d不是質數' % num)
範例2:找尋質數
- 輸入正整數num, 確認num是不是質數
迴圈特殊指令break(5/7)
while True:
username = input('帳號:')
pwd = input('密碼')
if username == pwd:
break
else:
print('帳密錯誤,請重新輸入')
print('帳號密碼正確')
範例3:登入系統(範例5-4-1)
- 輸入帳號與密碼:帳號密碼一致,輸出「帳號與密碼正確」,否則輸出「帳密錯誤,請重新輸入」。
注意: 此為無窮迴圈寫法
迴圈特殊指令break(6/7)
for i in range(2, 1001):
prime = True
j=2
while j<i:
if i%j==0:
prime = False
break
j += 1 # j=j+1
if prime:
print('%d是質數' % i)
範例4:找尋2~1000所有質數
- 運用巢狀迴圈
迴圈特殊指令break隨堂測驗(7/7)
題目:當骰子擲出點數6時,程式停止,否則繼續執行
- 印出第幾輪,擲出幾點
迴圈特殊指令continue(1/3)
基本語法
條件式若成立: 跳出迴圈
while迴圈也適用
continue: 跳過該回合迴圈(後續回合繼續執行)
for 迴圈變數 in 數列1:
程式碼1...
if 條件式:
continue
程式碼2...
迴圈後程式碼
for i in range(1,11):
if i%2==0: # 跳過偶數
continue
print(i, end=",")
for迴圈開始
區塊3
continue
for迴圈結束
True
False
還有元素?
程式區塊1
True
False
continue: 部份元素跳過 或 特殊處理
區塊2
迴圈特殊指令continue(2/3)
練習:列出大於30分的得分場次
有6場得分超過30分
執行結果
# ch7_23.py
scores = [33, 22, 41, 25, 39, 43, 27, 38, 40]
games = 0
for score in scores:
if score < 30: # 小於30則不往下執行
continue
games += 1 # 場次加1
print("有%d場得分超過30分" % games)
迴圈特殊指令continue(3/3)
while迴圈範例:列出1~10之間的偶數
2
4
6
8
10
執行結果
# ch7_34.py
index = 0
while index <= 10:
index += 1
if ( index % 2 != 0 ): # 測試是否奇數
continue # 不往下執行
print(index) # 輸出偶數
迴圈特殊指令pass
pass指令:什麼都不做
# ch7_37.py
schools = ['明志科大', '台灣科大', '台北科大']
for school in schools:
pass
範例:程式尚未完成,先以pass取代迴圈區塊內容
迴圈其他補充串列.remove()用於測試條件(1/2)
while迴圈範例
刪除前的fruits ['apple', 'orange', 'apple', 'banana', 'apple']
刪除後的fruits ['orange', 'banana']
執行結果
# ch7_35.py
fruits = ['apple', 'orange', 'apple', 'banana', 'apple']
fruit = 'apple'
print("刪除前的fruits", fruits)
while fruit in fruits: # 只要串列內有apple迴圈就繼續
fruits.remove(fruit) # 務必要刪除,否則會形成無窮迴圈
print("刪除後的fruits", fruits)
迴圈其他補充串列.pop()用於測試條件(2/2)
範例:根據購買金額為顧客分類
VIP 買家資料 [['David', 2110], ['Durant', 2050], ['James', 1030]]
Gold買家資料 [['Jordan', 990], ['Curry', 893]]
執行結果
# ch7_36.py
buyers = [['James', 1030], # 建立買家購買紀錄
['Curry', 893],
['Durant', 2050],
['Jordan', 990],
['David', 2110]]
goldbuyers = [] # Gold買家串列
vipbuyers =[] # VIP買家串列
while buyers: # 執行買家分類迴圈分類完成迴圈才會結束
index_buyer = buyers.pop()
if index_buyer[1] >= 1000: # 用1000圓執行買家分類條件
vipbuyers.append(index_buyer) # 加入VIP買家串列
else:
goldbuyers.append(index_buyer) # 加入Gold買家串列
print("VIP 買家資料", vipbuyers)
print("Gold買家資料", goldbuyers)
enumerate物件
enumerate(串列) : 為串列產生「計數值」
(0, 'coffee')
(1, 'tea')
(2, 'wine')
0 coffee
1 tea
2 wine
****************
(10, 'coffee')
(11, 'tea')
(12, 'wine')
10 coffee
11 tea
12 wine
執行結果
# ch7_38.py
drinks = ["coffee", "tea", "wine"]
# 解析enumerate物件
for drink in enumerate(drinks): # 數值初始是0
print(drink)
for count, drink in enumerate(drinks):
print(count, drink)
print("****************")
# 解析enumerate物件
for drink in enumerate(drinks, 10): # 數值初始是10
print(drink)
for count, drink in enumerate(drinks, 10):
print(count, drink)
Python程式設計
By Leuo-Hong Wang
Python程式設計
Lesson 6: 迴圈設計
- 2,301