Python - Câu lệnh Match-Case: Hướng dẫn cho người mới bắt đầu

Xin chào các bạn, các nhà lập trình Python mới! Hôm nay, chúng ta sẽ khám phá một trong những tính năng mới hơn của Python: câu lệnh match-case. Hãy suy nghĩ về nó như một chiếc cúp sứ của Thụy Sỹ cho việc xử lý các tình huống khác nhau trong mã của bạn. Hãy cùng nhau bắt đầu hành trình thú vị này!

Python - Match-Case Statement

Câu lệnh Match-Case là gì?

Câu lệnh match-case, được giới thiệu trong Python 3.10, giống như phiên bản siêu anh hùng của cấu trúc if-elif-else. Nó cho phép chúng ta so sánh một giá trị với nhiều mẫu và thực thi mã dựa trên mẫu phù hợp đầu tiên.

Cú pháp cơ bản

match subject:
case pattern1:
# Mã cho pattern1
case pattern2:
# Mã cho pattern2
case _:
# Trường hợp mặc định

Hãy chia sẻ điều này với một ví dụ thú vị:

def greet_superhero(hero):
match hero:
case "Spider-Man":
print("Với quyền lớn đến đến trách nhiệm lớn!")
case "Iron Man":
print("Tôi là Iron Man.")
case "Black Widow":
print("Tôi luôn phải dọn dẹp sau các anh em.")
case _:
print("Tôi không biết siêu anh hùng đó, nhưng họ có lẽ rất tuyệt vời!")

greet_superhero("Spider-Man")
greet_superhero("Wonder Woman")

Trong ví dụ này, chúng ta đang so sánh biến hero với các tên siêu anh hùng khác nhau. Trường hợp _ hoạt động như trường hợp mặc định, bắt các siêu anh hùng không được nhận diện.

Các trường hợp kết hợp trong câu lệnh Match

Đôi khi, chúng ta muốn xử lý nhiều mẫu với cùng một đoạn mã. Python đã cung cấp cho chúng ta!

def classify_number(num):
match num:
case 0:
print("Số không là một số duy nhất!")
case 1 | 2 | 3:
print("Đây là một số dương nhỏ.")
case -1 | -2 | -3:
print("Đây là một số âm nhỏ.")
case _:
print("Đây là một số lớn hơn.")

classify_number(2)
classify_number(-2)
classify_number(100)

Ở đây, chúng ta sử dụng toán tử | để kết hợp các trường hợp. Nó giống như nói "hoặc" trong tiếng Anh.

Danh sách làm đối số trong câu lệnh Match Case

Câu lệnh match-case không chỉ dành cho các giá trị đơn giản. Nó còn có thể xử lý các cấu trúc phức tạp như danh sách!

def analyze_coordinates(point):
match point:
case [0, 0]:
print("Gốc tọa độ")
case [0, y]:
print(f"Tọa độ trên trục Y tại y = {y}")
case [x, 0]:
print(f"Tọa độ trên trục X tại x = {x}")
case [x, y]:
print(f"Điểm tại ({x}, {y})")
case _:
print("Không phải là điểm 2D hợp lệ")

analyze_coordinates([0, 0])
analyze_coordinates([5, 0])
analyze_coordinates([3, 4])
analyze_coordinates([1, 2, 3])

Ví dụ này cho thấy chúng ta có thể so sánh với các mẫu danh sách. Nó như là cung cấp cho mã của bạn khả năng xem xét bên trong danh sách!

Sử dụng "if" trong các điều "Case"

Đối với những lần chúng ta cần chính xác hơn trong việc khớp, chúng ta có thể thêm các điều kiện bảo vệ bằng cách sử dụng if:

def categorize_age(age):
match age:
case n if n < 0:
print("Cảnh báo nhân vật du hành thời gian! Độ tuổi âm phát hiện.")
case n if n < 13:
print("Bạn là một đứa trẻ. Hãy tận hưởng tuổi thanh xuân của bạn!")
case n if n < 20:
print("Chào mừng đến tuổi thiếu niên!")
case n if n < 65:
print("Cuộc sống trưởng thành, chúng ta sẵn sàng!")
case _:
print("Trí tuệ đến với tuổi. Bạn đã đầy đủ nó!")

categorize_age(8)
categorize_age(15)
categorize_age(30)
categorize_age(70)

Ở đây, chúng ta sử dụng các điều kiện if để tối ưu hóa các trường hợp của mình. Nó như là cung cấp cho câu lệnh match của bạn một chiếc kính lúp!

Ứng dụng thực tế

Bây giờ, chúng ta đã quay lại các khái niệm cơ bản, hãy xem xét một ví dụ phức tạp hơn kết hợp nhiều khía cạnh của câu lệnh match-case:

def process_command(command):
match command.split():
case ["quit"]:
print("Thoát chương trình. Tạm biệt!")
return False
case ["hello" | "hi" | "hey", name]:
print(f"Xin chào, {name}! Rất vui được gặp bạn.")
case ["add", *numbers] if all(n.isdigit() for n in numbers):
result = sum(int(n) for n in numbers)
print(f"Tổng là: {result}")
case ["multiply", *numbers] if all(n.isdigit() for n in numbers):
result = 1
for n in numbers:
result *= int(n)
print(f"Tích là: {result}")
case _:
print("Tôi không hiểu lệnh đó.")
return True

while True:
user_input = input("Nhập lệnh: ")
if not process_command(user_input):
break

Ví dụ này minh họa một trình xử lý lệnh có thể xử lý nhiều loại đầu vào khác nhau:

  • Nó có thể thoát chương trình
  • Nó có thể chào bạn
  • Nó có thể cộng hoặc nhân các số
  • Nó có thể xử lý các lệnh không rõ một cách thanh lịch

Câu lệnh match-case sáng lên trong các tình huống như này, khi chúng ta cần xử lý nhiều loại đầu vào trong một cách rõ ràng và ngắn gọn.

Kết luận

Câu lệnh match-case là một công cụ mạnh mẽ trong bộ công cụ Python của bạn. Nó cho phép mã có thể đọc và duy trì dễ dàng hơn khi xử lý nhiều điều kiện. Hãy nhớ, như bất kỳ công cụ nào, nó liên quan đến việc sử dụng trong các tình huống đúng. Đừng bắt buộc nó khi một câu lệnh if-else đơn giản đã đủ, nhưng hãy tận dụng nó khi bạn cần xử lý các tình huống phức tạp của việc khớp mẫu.

Khi bạn tiếp tục hành trình với Python, bạn sẽ tìm thấy nhiều tình huống hơn nữa mà câu lệnh match-case có thể đơn giản hóa mã của bạn và làm nó trở nên tự nhiên hơn. Chúc các bạn lập trình vui vẻ, và may mắn với các khớp luôn tìm thấy trường hợp phù hợp!

Bảng tham khảo nhanh

Tính năng Ví dụ
Match-Case cơ bản match value: case pattern: ...
Trường hợp mặc định case _: ...
Các trường hợp kết hợp case pattern1 | pattern2: ...
Khớp danh sách case [x, y]: ...
Điều kiện bảo vệ case pattern if condition: ...

Hãy nhớ, thực hành làm chủ. Vì vậy, hãy thử nghiệm với các mẫu này, và xem kỹ năng Python của bạn sẽ bay cao!

Credits: Image by storyset