在 match...case 中,沒有 nocase 這個參數可以自動處理大小寫或無效輸入,但我們可以自己寫 防呆機制 來確保輸入正確!✅
🛡️ ✅ 加入防呆的方式
📝 主要有兩種方法可以做到:
🎯 1️⃣ 在 match...case 之前檢查運算符是否合法
用 if 判斷 op 是否在允許的符號中
如果不在,提示「不支援的運算符號」
# 2025/03/28-00:14
# 防呆:先檢查是否是合法符號
x = int(input("請輸入一個數值 x:"))
y = int(input("請輸入一個數值 y:"))
op = input("請輸入一個符號(+ - * / // %):").strip()
# 檢查符號是否在允許範圍
valid_ops = ["+", "-", "*", "/", "//", "%"]
if op not in valid_ops:
print("不支援的運算符號,請重新輸入!")
else:
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 "/":
if y == 0:
print("除數不能為 0!")
else:
print(f'{x} / {y} answer: {x / y}')
case "//":
if y == 0:
print("除數不能為 0!")
else:
print(f'{x} // {y} answer: {x // y}')
case "%":
if y == 0:
print("除數不能為 0!")
else:
print(f'{x} % {y} answer: {x % y}')
🎯 2️⃣ 在 case _ 裡加 nocase 防呆功能
如果你不想在 match 之前檢查,也可以用 case _ 來當「預設防呆」,但這是 匹配所有不符的情況。
# 2025/03/28-00:14
x = int(input("請輸入一個數值 x:"))
y = int(input("請輸入一個數值 y:"))
op = input("請輸入一個符號(+ - * / // %):").strip()
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 "/":
if y == 0:
print("除數不能為 0!")
else:
print(f'{x} / {y} answer: {x / y}')
case "//":
if y == 0:
print("除數不能為 0!")
else:
print(f'{x} // {y} answer: {x // y}')
case "%":
if y == 0:
print("除數不能為 0!")
else:
print(f'{x} % {y} answer: {x % y}')
case _: # 預設情況,無效運算符號
print("不支援的運算符號,請重新輸入!")
🧠 防呆要注意的兩個重點
防止除數為 0
/, //, % 會在除數為 0 時引發錯誤,所以要檢查 y == 0。
防止輸入不合法符號
用 case _ 處理不支援的符號,或在 match 之前先驗證 op。
🎁 進階挑戰:加入自動重新輸入
如果你想要在輸入錯誤時「要求重新輸入」,可以搭配 while 迴圈來完成:
# 2025/03/28-00:14
# 防呆 + 重新輸入機制
valid_ops = ["+", "-", "*", "/", "//", "%"]
# 取得合法運算符號
while True:
op = input("請輸入一個符號(+ - * / // %):").strip()
if op in valid_ops:
break
print("不支援的運算符號,請重新輸入!")
# 取得數值
x = int(input("請輸入一個數值 x:"))
y = int(input("請輸入一個數值 y:"))
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 "/":
if y == 0:
print("除數不能為 0!")
else:
print(f'{x} / {y} answer: {x / y}')
case "//":
if y == 0:
print("除數不能為 0!")
else:
print(f'{x} // {y} answer: {x // y}')
case "%":
if y == 0:
print("除數不能為 0!")
else:
print(f'{x} % {y} answer: {x % y}')
🚀 這樣就萬無一失了!
現在可以:
✅ 防止輸入不合法的運算符號
✅ 防止除數為 0
✅ 可以自動要求重新輸入正確的符號