在 Python 中，`match` 语句（Python 3.10+ 引入的结构化模式匹配）非常适合实现计算器。下面给你几种写法。

## 基础版：match 匹配运算符

```python

def calculator(a, op, b):
    match op:
        case '+':
            return a + b
        case '-':
            return a - b
        case '*':
            return a * b
        case '/':
            if b == 0:
                return "错误：除数不能为 0"
            return a / b
        case '//':
            return a // b
        case '%':
            return a % b
        case '**':
            return a ** b
        case _:  # 默认分支，相当于 else
            return "未知运算符"
print(calculator(10, '+', 5))   # 15
print(calculator(10, '/', 0))   # 错误：除数不能为 0
print(calculator(10, '^', 5))   # 未知运算符
```

## 进阶版：match 同时匹配多个值

python

```python
def calculator(a, op, b):
    match (op, b):          # 匹配元组，可同时判断运算符和数值
        case ('+', _):
            return a + b
        case ('-', _):
            return a - b
        case ('*', _):
            return a * b
        case ('/', 0):      # 专门处理除零
            return "错误：除数不能为 0"
        case ('/', _):
            return a / b
        case _:
            return "未知运算符"
```



### . Python 的这个功能比传统 `switch` 强大得多

传统 `switch` 只能做**值的相等比较**：


```C
// C 语言，只能比较值
switch (x) {
    case 1: ...
    case 2: ...
    default: ...
}
```
而 Python 的 `match` 能做的是**结构化模式匹配**（structural pattern matching）——不仅能比相等，还能：

python

```python
match command:
    case ["go", direction]:        # 匹配列表结构并解构
        move(direction)
    case {"action": "quit"}:       # 匹配字典
        quit()
    case Point(x=0, y=0):          # 匹配对象属性
        print("原点")
    case [x, *rest]:               # 匹配并捕获剩余元素
        print(f"首元素 {x}，其余 {rest}")
    case str() | bytes():          # 匹配类型
        print("是字符串")
```

这已经**不是传统意义上的 `switch` 了**，所以 Python 官方特意选了 `match` 这个词，避免让人误以为它只是 C 风格 `switch` 的替代品。