Python 基礎
第二堂
2024 交大資訊逐夢營
講師:火鍋料換菜
算術運算子
(Arithmetic Operator)
算術運算子
- 類似一般的加減乘除
- 先乘除後加減
- 括號會先算
- 就跟國小數學一樣!
算術運算 | 運算子 | 範例 | 結果 |
---|---|---|---|
加法 | + | 1 + 2 | 3 |
減法 | - | 5 - 3 | 2 |
乘法 | * | 2 * 3 | 6 |
除法 | / | 5 / 2 | 2.5 |
下高斯除法⌊⌋ | // | 5 // 2 | 2 |
次方 | ** | 2 ** 5 | 32 |
取餘數 | % | 13 % 5 | 3 |
進階算術運算子
對一個變數做加減乘除,再存回同一個變數
運算子 | 範例 | 等同於 |
---|---|---|
+= | x += 1 | x = x + 1 |
-= | x -= 5 | x = x - 5 |
*= | x *= 3 | x = x * 3 |
/= | x /= 7 | x = x / 7 |
例題 1
計算下列算式,並印出執行結果
請大家打開 class-2 資料夾中的 01_calculate.py
參考解答
x = (10+(23**4+25))*101/34
print(x)
Output: 831396.3529411765
字串加法
print('chii'+'kawa')
字串加法
print('chii'+'kawa')
Output: chiikawa
數字加法 vs. 字串加法
print("數字加法:") print(1+2) print("字串加法:") print('1'+'2') print('1+2')
數字加法 vs. 字串加法
print("數字加法:") print(1+2) print("字串加法:") print('1'+'2') print('1+2')
Output: 數字加法: 3 字串加法: 12 1+2
判斷 (If)
if
如果... 就...
if 條件: 要執行的程式碼
如果符合條件
就執行程式碼
要怎麼列條件?
條件式 (Condition)
- 可能的結果:True / False
-
如何列出條件?
- 關係運算子
- 邏輯運算子
- 成員運算子
關係運算子
(Comparison Operator)
名稱 | 運算子 | 例子 | 結果 |
---|---|---|---|
大於 | > | 3 > 2 | True |
小於 | < | 3 < 2 | False |
不等於 | != | 3 != 2 | True |
等於 | == | 3 == 2 | False |
和 "=" 一樣嗎?
== vs. =
=:指派(assign)符號右邊的值給左邊
==:判斷符號兩側的數值是否相等
邏輯運算子
(Logical Operator)
- and(且)
- or(或)
- not(非)
邏輯運算子 - and
X Y | True | False |
True | True | False |
False | False | False |
X and Y
邏輯運算子 - or
X Y | True | False |
True | True | True |
False | True | False |
X or Y
邏輯運算子 - not
X | True | False |
not X | False | True |
not X
成員運算子
(Membership Operator)
- in
- not in
names = ['Bonnie', 'Vito', 'Johnny'] # 判斷串列中是否包含某元素 print('Johnny' in names) # 判斷字串是否包含某字母/子字串 print('a' in 'apple') print('ap' not in 'apple')
成員運算子
(Membership Operator)
names = ['Bonnie', 'Vito', 'Johnny'] # 判斷串列中是否包含某元素 print('Johnny' in names) # 判斷字串是否包含某字母/子字串 print('a' in 'apple') print('ap' not in 'apple')
Output: True True False
運算子優先級
- 算術運算子(+)
- 成員運算子(in)、關係運算子(>)
- not
- and
- or
例題 2
你是生活在奇妙世界的勞動鎧甲先生,負責考核除草檢定
例題 2
這天,吉伊和小八貓相約來考除草證
例題 2
請大家打開 class-2 資料夾中的 02_weed.py
例題 2
# 考生1: 吉伊
chii = {
"name" : "Chiikawa",
"color" : "white",
"height" : 30,
"weed" : 5
}
# 考生2: 小八貓
hachi = {
"name" : "Hachiware",
"color" : "white and blue",
"height" : 30,
"weed" : 4
}
作為審核員,你得到了兩位考生的資料
資料中紀錄考生的姓名、顏色、身高,以及現在的除草證等級
例題 2
請回答以下三個問題:
- 吉伊和小八貓的顏色一樣嗎?
- 吉伊和小八貓的身高一樣嗎?
- 如果除草證分為等級1~等級5,等級1最高階,請問吉伊的等級比較高階嗎?(假設他們的等級不同)
參考解答
# 修改Q1, Q2, Q3的結果,分別代表三個問題的答案
Q1 = chii["color"] == hachi["color"]
Q2 = chii["height"] == hachi["height"]
Q3 = chii["weed"] < hachi["weed"]
參考解答
# 修改Q1, Q2, Q3的結果,分別代表三個問題的答案
Q1 = chii["color"] == hachi["color"]
Q2 = chii["height"] == hachi["height"]
Q3 = chii["weed"] < hachi["weed"]
Output:
他們的顏色不一樣~
他們的身高一樣!
小八貓持有比較高階的除草證 ヽ(=^・ω・^=)丿
if
如果... 就...
if 條件: 要執行的程式碼
如果符合條件
就執行程式碼
縮排
if 條件1: # 區塊1 if 條件2: # 區塊2 # 區塊3
- 用來確定哪些語句屬於同一個區塊
- 同區塊,縮排長度相同
- 如果編輯器沒有自動縮排,按tab
- 相當於四個空白鍵
縮排
price = 100 if price <= 100: print("It's cheap.") print("Let's buy it!")
錯誤範例
if else
if 條件: 程式碼1 else: 程式碼2
如果符合條件 -> 執行程式碼1
如果不符合條件 -> 執行程式碼2
if else 範例
price = 300 if price >= 500: print("太貴了!") else: print("合理的價格。")
if else 範例
price = 300 if price >= 500: print("太貴了!") else: print("合理的價格。")
Output:
合理的價格。
例題 3
為了賺錢,吉伊、小八貓和烏薩奇組隊一起執行除草任務
例題 3
除草的過程中,可能會遇到會攻擊他們的奇美拉(怪物)。
給定三人的戰鬥力,加總後就是總戰鬥力。
如果他們的總戰鬥力比奇美拉低,他們就會撤退。
如果他們的總戰鬥力等於奇美拉,或比奇美拉高,他們就會攻擊。
例題 3
請大家打開 class-2 資料夾中的 03_fight.py
例題 3
monster = 500 # 奇美拉的戰鬥力
chiikawa = 30 # 吉伊的戰鬥力
hachiware = 50 # 小八貓的戰鬥力
usagi = 100 # 烏薩奇的戰鬥力
給定所有角色的戰鬥力,請問他們要攻擊還是撤退?
如果要撤退,請輸出「撤退!!」
如果要攻擊,請輸出「攻擊!!」
參考解答
# TODO: 印出他們採取攻擊還是撤退行動
total = chiikawa + hachiware + usagi
if total >= monster:
print("攻擊!!")
else:
print("撤退!!")
參考解答
# TODO: 印出他們採取攻擊還是撤退行動
total = chiikawa + hachiware + usagi
if total >= monster:
print("攻擊!!")
else:
print("撤退!!")
Output:
撤退!!
if elif else
if 條件1: 程式碼1 elif 條件2: 程式碼2 else: 程式碼3
if elif else
if 條件1: 程式碼1 elif 條件2: 程式碼2 else: 程式碼3
條件1
執行程式碼1
條件2
True
False
執行程式碼2
執行程式碼3
True
False
if elif else 範例
price = 50 if price >= 500: print("太貴了!") elif price <= 100: print("好便宜喔!") else: print("合理的價格。")
if elif else 範例
price = 50 if price >= 500: print("太貴了!") elif price <= 100: print("好便宜喔!") else: print("合理的價格。")
Output:
好便宜喔!
例題 4
吉伊為了增強自己的實力,想要練習單獨對抗奇美拉
例題 4
為了保障安全,他們決定根據戰鬥力來決定出戰的人選
例題 4
請大家打開 class-2 資料夾中的 04_fight_alone.py
例題 4
他們決定優先讓戰鬥力最低的吉伊出戰,再來是小八貓,最後是烏薩奇。
注意:為了確保安全,不能選擇戰鬥力比奇美拉還低的人出戰!
如果沒有單人適合出戰,他們會撤退。
monster = 70 # 奇美拉的戰鬥力
chiikawa = 30 # 吉伊的戰鬥力
hachiware = 50 # 小八貓的戰鬥力
usagi = 100 # 烏薩奇的戰鬥力
例題 4
他們決定優先讓戰鬥力最低的吉伊出戰,再來是小八貓,最後是烏薩奇。
注意:為了確保安全,不能選擇戰鬥力比奇美拉還低的人出戰!
如果沒有單人適合出戰,他們會撤退。
請印出該由誰戰鬥(例如:「吉伊戰鬥!!」)
或是選擇撤退(印出「撤退!!」)
# TODO: 印出誰要負責攻擊
if chiikawa >= monster:
print("吉伊戰鬥!!")
elif hachiware >= monster:
print("小八貓戰鬥!!")
elif usagi >= monster:
print("烏薩奇戰鬥!!")
else:
print("撤退!!")
參考解答
# TODO: 印出誰要負責攻擊
if chiikawa >= monster:
print("吉伊戰鬥!!")
elif hachiware >= monster:
print("小八貓戰鬥!!")
elif usagi >= monster:
print("烏薩奇戰鬥!!")
else:
print("撤退!!")
參考解答
Output:
烏薩奇戰鬥!!
迴圈 (Loop)
迴圈(loop)
- for 迴圈
- while 迴圈
- 巢狀迴圈
- continue & break
for 迴圈
for 變數 in 可迭代物: 要執行的程式碼
可迭代物
- 給迴圈一個範圍
- 迭代:重覆做一樣的事
- 常用:range(), string, list
range()
- range(終末值)
for i in range(5): print(i)
range()
- range(終末值)
for i in range(5): print(i)
Output: 0 1 2 3 4
range()
- range(起始值, 終末值)
for i in range(2,7): print(i)
range()
- range(起始值, 終末值)
for i in range(2,7): print(i)
Output: 2 3 4 5 6
range()
- range(起始值, 終末值, 遞增減)
for i in range(7,2,-1): print(i)
range()
- range(起始值, 終末值, 遞增減)
for i in range(7,2,-1): print(i)
Output: 7 6 5 4 3
string
for i in "Chiikawa": print(i)
把字串當成可迭代物
for i in "Chiikawa": print(i)
Output: C h i i k a w a
string
把字串當成可迭代物
for i in ['c','h','i',1,2,3]: print(i)
list
把串列當成可迭代物
for i in ['c','h','i',1,2,3]: print(i)
Output: c h i 1 2 3
list
把串列當成可迭代物
例題 5
近期,在吉伊家附近,出現會每天再生的奇美拉
例題 5
請大家打開 class-2 資料夾中的 05_monster.py
例題 5
monster_list = ["粉紅色奇美拉", "綠色奇美拉", "藍色奇美拉", "白色奇美拉", "咖啡色奇美拉"]
串列中列了每天都會再生的五種奇美拉
吉伊每天都會按照順序討伐他們
但他有時候狀態不好,沒有辦法討伐全部的奇美拉
例題 5
請讓吉伊輸入他當天討伐的怪物數量,並列印出當天討伐的怪物名稱
例題 5
請讓吉伊輸入他當天討伐的怪物數量,並列印出當天討伐的怪物名稱
範例輸出:
要討伐的怪物數量(1~5):3 # input
吉伊討伐了粉紅色奇美拉 # output
吉伊討伐了綠色奇美拉
吉伊討伐了藍色奇美拉
例題 5
請讓吉伊輸入他當天討伐的怪物數量,並列印出當天討伐的怪物名稱
範例輸出:
要討伐的怪物數量(1~5):3 # input
吉伊討伐了粉紅色奇美拉 # output
吉伊討伐了綠色奇美拉
吉伊討伐了藍色奇美拉
執行 x 次一樣的任務 可以用 for 迴圈!
參考解答
# TODO: 輸入要討伐的怪物數量(1~5),印出討伐的怪物名稱
num = int(input("要討伐的怪物數量(1~5):"))
for i in range(num):
print(f"吉伊討伐了{monster_list[i]}")
參考解答
# TODO: 輸入要討伐的怪物數量(1~5),印出討伐的怪物名稱
num = int(input("要討伐的怪物數量(1~5):"))
for i in range(num):
print(f"吉伊討伐了{monster_list[i]}")
Output:
要討伐的怪物數量(1~5):4
吉伊討伐了粉紅色奇美拉
吉伊討伐了綠色奇美拉
吉伊討伐了藍色奇美拉
吉伊討伐了白色奇美拉
while 迴圈
while 條件: 要執行的程式碼
條件式寫法和前面的 if 一樣!
while 迴圈
while 條件: 要執行的程式碼
條件
程式碼
結束迴圈
True
False
while 迴圈範例
i = 0 while i<5: print(i) i += 1
while 迴圈範例
i = 0 while i<5: print(i) i += 1
Output: 0 1 2 3 4
巢狀迴圈 (nested loop)
- 在迴圈中包覆其他迴圈
- 使用兩個以上的迭代變數
- 類似時鐘的概念
巢狀迴圈 (nested loop)
for i in range(12):
for j in range(60):
# 分針走一格
# 時針走一格
巢狀迴圈範例
name = ["Bill", "Benson"]
action = ["熬夜趕作業", "吃了一塊蛋糕"]
for i in name:
for j in action:
print(f"{i} {j}")
巢狀迴圈範例
name = ["Bill", "Benson"]
action = ["熬夜趕作業", "吃了一塊蛋糕"]
for i in name:
for j in action:
print(f"{i} {j}")
Output: Bill 熬夜趕作業 Bill 吃了一塊蛋糕 Benson 熬夜趕作業 Benson 吃了一塊蛋糕
例題 6
小八貓和烏薩奇得知吉伊家附近有很多奇美拉,決定來幫他討伐,順便除草賺錢
例題 6
他們決定三個人輪流,一天討伐一隻奇美拉
例題 6
請大家打開 class-2 資料夾中的 06_monster_turn.py
例題 6
monster_list = ["粉紅色奇美拉", "綠色奇美拉", "藍色奇美拉", "白色奇美拉", "咖啡色奇美拉"]
character_list = ["吉伊", "小八貓", "烏薩奇"]
給定怪物和角色的串列
他們三人決定按照順序,一人各討伐一種奇美拉一次
三人輪流
一層 for 迴圈
怪物也輪流
另一層 for 迴圈
例題 6
monster_list = ["粉紅色奇美拉", "綠色奇美拉", "藍色奇美拉", "白色奇美拉", "咖啡色奇美拉"]
character_list = ["吉伊", "小八貓", "烏薩奇"]
他們三人決定按照順序,一人各討伐一種奇美拉一次
請根據順序列印出討伐的過程
範例輸出:
第 1 天: 吉伊討伐了粉紅色奇美拉
第 2 天: 小八貓討伐了粉紅色奇美拉
第 3 天: 烏薩奇討伐了粉紅色奇美拉
第 4 天: 吉伊討伐了綠色奇美拉
第 5 天: 小八貓討伐了綠色奇美拉
...
參考解答
# TODO: 根據天數,印出負責討伐的人和討伐的怪物
day = 1
for m in monster_list:
for c in character_list:
print(f"第 {day} 天: {c}討伐了{m}")
day += 1
參考解答
# TODO: 根據天數,印出負責討伐的人和討伐的怪物
day = 1
for m in monster_list:
for c in character_list:
print(f"第 {day} 天: {c}討伐了{m}")
day += 1
Output:
第 1 天: 吉伊討伐了粉紅色奇美拉
第 2 天: 小八貓討伐了粉紅色奇美拉
第 3 天: 烏薩奇討伐了粉紅色奇美拉
第 4 天: 吉伊討伐了綠色奇美拉
第 5 天: 小八貓討伐了綠色奇美拉
第 6 天: 烏薩奇討伐了綠色奇美拉
第 7 天: 吉伊討伐了藍色奇美拉
第 8 天: 小八貓討伐了藍色奇美拉
第 9 天: 烏薩奇討伐了藍色奇美拉
第 10 天: 吉伊討伐了白色奇美拉
第 11 天: 小八貓討伐了白色奇美拉
第 12 天: 烏薩奇討伐了白色奇美拉
第 13 天: 吉伊討伐了咖啡色奇美拉
第 14 天: 小八貓討伐了咖啡色奇美拉
第 15 天: 烏薩奇討伐了咖啡色奇美拉
continue & break
- continue
- 跳過該次迭代剩下的程式碼,執行下一次
- break
- 跳出目前的迴圈結構
continue
跳過該次迭代剩下的程式碼,執行下一次
for i in range(5):
if i == 2:
continue
print(i)
continue
for i in range(5):
if i == 2:
continue
print(i)
Output: 0 1 3 4
跳過該次迭代剩下的程式碼,執行下一次
break
跳出目前的迴圈結構
for i in range(5):
if i == 2:
break
print(i)
break
跳出目前的迴圈結構
for i in range(5):
if i == 2:
break
print(i)
Output: 0 1
例題 7
前來支援的小八貓和烏薩奇,其實各自有特別害怕的奇美拉
例題 7
請大家打開 class-2 資料夾中的 06_monster_turn.py
我們要在例題 6 的程式碼上加入一些變化
例題 7
monster_list = ["粉紅色奇美拉", "綠色奇美拉", "藍色奇美拉", "白色奇美拉", "咖啡色奇美拉"]
character_list = ["吉伊", "小八貓", "烏薩奇"]
給定怪物和角色的串列(和例題6一樣)
我們得知:
小八貓特別害怕藍色奇美拉
烏薩奇特別害怕白色奇美拉
例題 7
monster_list = ["粉紅色奇美拉", "綠色奇美拉", "藍色奇美拉", "白色奇美拉", "咖啡色奇美拉"]
character_list = ["吉伊", "小八貓", "烏薩奇"]
小八貓特別害怕藍色奇美拉,他會逃跑,並輪到下一個順位的烏薩奇戰鬥。
烏薩奇特別害怕白色奇美拉,他會帶著大家一起逃跑,終止討伐的過程。
要如何用程式實現這個過程呢?
例題 7
範例輸出:
第 1 天: ...
...
小八貓遇到藍色奇美拉,小八貓逃走了
...
烏薩奇遇到白色奇美拉,全體撤退
# 輸出結束
小八貓 v.s. 藍色奇美拉:小八貓逃跑,輪到烏薩奇戰鬥
烏薩奇 v.s. 白色奇美拉:烏薩奇帶著大家一起逃跑
例題 7
範例輸出:
第 1 天: ...
...
小八貓遇到藍色奇美拉,小八貓逃走了
...
烏薩奇遇到白色奇美拉,全體撤退
# 輸出結束
小八貓 v.s. 藍色奇美拉:小八貓逃跑,輪到烏薩奇戰鬥
烏薩奇 v.s. 白色奇美拉:烏薩奇帶著大家一起逃跑
- Hint 1:當有兩層迴圈,可能需要 break 一次以上
- Hint 2:可以使用一個 True / False 值來判斷何時要 break
參考答案
# TODO: 根據天數,印出負責討伐的人和討伐的怪物
flag = False
day = 1
for m in monster_list:
for c in character_list:
if c == "小八貓" and m == "藍色奇美拉":
print("小八貓遇到藍色奇美拉,小八貓逃走了")
continue
elif c == "烏薩奇" and m == "白色奇美拉":
print("烏薩奇遇到白色奇美拉,全體撤退")
flag = True
break
print(f"第 {day} 天: {c}討伐了{m}")
day += 1
if flag == True:
break
參考答案
# TODO: 根據天數,印出負責討伐的人和討伐的怪物
flag = False
day = 1
for m in monster_list:
for c in character_list:
if c == "小八貓" and m == "藍色奇美拉":
print("小八貓遇到藍色奇美拉,小八貓逃走了")
continue
elif c == "烏薩奇" and m == "白色奇美拉":
print("烏薩奇遇到白色奇美拉,全體撤退")
flag = True
break
print(f"第 {day} 天: {c}討伐了{m}")
day += 1
if flag == True:
break
Output:
第 1 天: 吉伊討伐了粉紅色奇美拉
第 2 天: 小八貓討伐了粉紅色奇美拉
第 3 天: 烏薩奇討伐了粉紅色奇美拉
第 4 天: 吉伊討伐了綠色奇美拉
第 5 天: 小八貓討伐了綠色奇美拉
第 6 天: 烏薩奇討伐了綠色奇美拉
第 7 天: 吉伊討伐了藍色奇美拉
小八貓遇到藍色奇美拉,小八貓逃走了
第 8 天: 烏薩奇討伐了藍色奇美拉
第 9 天: 吉伊討伐了白色奇美拉
第 10 天: 小八貓討伐了白色奇美拉
烏薩奇遇到白色奇美拉,全體撤退
總結
總結
- 算術運算子
- 判斷
- 迴圈
- 算術運算子
- 加減乘除
- 進階算術運算子
- 字串加法
- 算術運算子
- 加減乘除
- 進階算術運算子
- 字串加法
- 判斷
- 條件式
- 關係、邏輯、成員
- if...elif...else...
- 條件式
- 算術運算子
- 加減乘除
- 進階算術運算子
- 字串加法
- 判斷
- 條件式
- 關係、邏輯、成員
- if...elif...else...
- 條件式
- 迴圈
- 可迭代物
- range(), string, list
- for 迴圈、while 迴圈
- 巢狀迴圈
- continue & break
- 可迭代物
class-2
By bonniechuang
class-2
- 108