iT邦幫忙

0

Python 中的「match 」/ 「switch」:一個不存在卻又存在的概念

  • 分享至 

  • xImage
  •  

從 Python 3.10 開始,
引入了一個新的 match-case 語句,
提供了一種更簡潔和高效的方式來進行模式匹配。

x = 3
match x:
    case 1:
        print("x is 1")
    case 2:
        print("x is 2")
    case _:
        print("x is neither 1 nor 2")

並非所有的 if...elif...else 都能直接用 match-case 來替換。這主要由於 match-case 在設計上更偏向於模式匹配,而 if...elif...else 則更注重條件判斷。

  • 複雜條件判斷: 當 if...elif...else 中包含複雜的邏輯判斷、算術運算或函數調用時,match-case 可能無法直接表達。
  • 浮點數比較: 浮點數的精度問題可能導致 match-case 的匹配不準確。
  • 多個條件組合: 當需要同時滿足多個條件時,match-case 的表達方式可能會變得比較繁瑣。
# 複雜條件判斷
x = 5
if x > 3 and x < 10 and x % 2 == 0:
    print("x is an even number between 3 and 10")

上述的條件判斷涉及多個邏輯運算子,要使用 match-case 來表達會比較困難。

結合 match-case、if-else 和 _ 通配符,用來模擬一個簡單的飲料販賣機的 Python 範例:

def vending_machine(choice):
    match choice:
        case "可樂":
            if stock["可樂"] > 0:
                print("請取走一罐可樂")
                stock["可樂"] -= 1
            else:
                print("可樂已售罄")
        case "雪碧":
            if stock["雪碧"] > 0:
                print("請取走一罐雪碧")
                stock["雪碧"] -= 1
            else:
                print("雪碧已售罄")
        case "芬達":
            if stock["芬達"] > 0:
                print("請取走一罐芬達")
                stock["芬達"] -= 1
            else:
                print("芬達已售罄")
        case _:
            print("無此飲料,請重新選擇")

# 初始化飲料庫存
stock = {
    "可樂": 5,
    "雪碧": 3,
    "芬達": 2
}

# 客戶選擇
choice = input("請選擇飲料(可樂/雪碧/芬達):")
vending_machine(choice)

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言