進階的 match...case 用法範例(Python 3.10+ 適用):
# 2025/03/26-00:03
def process_command(cmd):
match cmd:
case "start":
print("啟動中...")
case "stop":
print("停止程式")
case "restart":
print("重新啟動")
case _:
print("未知指令")
process_command("restart") # 輸出:重新啟動
python
複製編輯
# 2025/03/26-00:05
def compare(x, y):
match (x, y):
case (a, b) if a > b:
return "x 大於 y"
case (a, b) if a < b:
return "x 小於 y"
case (a, b) if a == b:
return "x 等於 y"
print(compare(5, 3)) # 輸出:x 大於 y
case 之後不能寫像 case x >= y: 這種判斷式。
可以 match 一個 tuple 或變數結構,再用 if 加條件守衛。
if sale >= 38000:
print(f' 銷售金額 7折優惠 {sale*.7:,}' )
elif sale >= 28000:
print(f' 銷售金額 8折優惠 {sale*.8:,}' )
elif sale >= 18000:
print(f' 銷售金額 9折優惠 {sale*.9:,}' )
elif sale >= 8000:
print(f' 銷售金額 9.5折優惠 {sale*.95:,}')
這段用 if...elif 判斷銷售金額範圍,其實不能直接用 match case 判斷 sale >= xxxx,但可以透過 match 結合 if 條件守衛(guard)來實現類似的效果:
# 2025/03/26-00:08
def calc_discount(sale):
match sale:
case s if s >= 38000:
print(f' 銷售金額 7折優惠 {s * 0.7:,.0f}')
case s if s >= 28000:
print(f' 銷售金額 8折優惠 {s * 0.8:,.0f}')
case s if s >= 18000:
print(f' 銷售金額 9折優惠 {s * 0.9:,.0f}')
case s if s >= 8000:
print(f' 銷售金額 9.5折優惠 {s * 0.95:,.0f}')
case _:
print('未達優惠門檻')
# 範例:
calc_discount(30000) # 銷售金額 8折優惠 24,000
x=int(input("請輸入一個數值x"))
y=int(input("請輸入一個數值y"))
op=str(input("請輸入一個符號"))
if op=="+":
print(f'{x}+{y} anser:{x+y}' )
elif op=='-':
print(f'{x}-{y} anser:{x-y}' )
elif op=='*':
print(f'{x}*{y} anser:{x*y}' )
elif op=='/':
print(f'{x}/{y} anser:{x/y}' )
elif op=='//':
print(f'{x}//{y} anser:{x//y}' )
elif op=='%':
print(f'{x}%{y} anser:{x%y}' )
你這段程式可以很漂亮地改寫成 match...case,因為 op 是明確的符號值(字串),這正好適合用 match。
python
複製編輯
# 2025/03/26-00:12
x = int(input("請輸入一個數值 x:"))
y = int(input("請輸入一個數值 y:"))
op = input("請輸入一個符號(+ - * / // %):")
match op:
case "+":
print(f'{x} + {y} answer: {x + y}')
case "-":
print(f'{x} - {y} answer: {x - y}')
case "*":
print(f'{x} * {y} answer: {x * y}')
case "/":
print(f'{x} / {y} answer: {x / y}')
case "//":
print(f'{x} // {y} answer: {x // y}')
case "%":
print(f'{x} % {y} answer: {x % y}')
case _:
print("不支援的運算符號")
temp=float(input('請輸入溫度數值'))
cf=str(input("攝式請輸入F,華式請輸入C "))
if cf=="F":
print(f" {(temp-32)*5/9} C")
elif cf=="C":
print(f" {9/5*temp+32} F")
這段「溫度轉換」程式也很適合改成 match...case,因為 cf 是明確的選項("F" 或 "C"),完全符合 match 用法。
python
複製編輯
# 2025/03/26-00:15
temp = float(input("請輸入溫度數值:"))
cf = input("攝氏請輸入 F,華氏請輸入 C:")
match cf:
case "F":
c = (temp - 32) * 5 / 9
print(f"{temp}°F = {c:.2f}°C")
case "C":
f = 9 / 5 * temp + 32
print(f"{temp}°C = {f:.2f}°F")
case _:
print("請輸入正確的單位代碼(F 或 C)")
使用 :.2f 控制小數點顯示 2 位數
提示輸入內容時,用「°F」與「°C」讓輸出更清楚