Học bằng cách đọc theo thứ tự

Bài tập Tổng kết Cú pháp Python — Kết hợp luồng điều khiển, hàm và ngoại lệ

Ba bài: lọc và bình phương bằng comprehension, safe_divide với try / except, và decorator @double nhân đôi giá trị trả về. Tổng kết kiến thức chương cú pháp bằng thực hành tay.

Bài 1: Lọc và biến đổi bằng comprehension

Kết hợp bộ lọc if bên trong list comprehension với toán tử lũy thừa `. Chọn ra chỉ những phần tử khớp với điều kiện và biến chúng thành thứ khác** — đó là cách dùng cơ bản của comprehension.

3 bước trong comprehension
range(1, 16)1 đến 15if n % 3 == 0or n % 5 == 03 / 5 / 6 / 9 / 10 / 12 / 15n ** 2bình phương từng phần tử[9, 25, 36, 81,100, 144, 225]lọc bằng if** 2thành list
Dựng list mới qua ba giai đoạn: lặp → lọc → biến đổi.

Từ các số 1 đến 15, hãy lấy ra các bội của 3 hoặc 5, rồi thu thập bình phương của chúng vào một list và in ra.

Một list comprehension một dòng là đủ.

Python Editor

Chạy code để xem đầu ra

Bài 2: Xây hàm chia an toàn với try / except

Viết safe_divide(a, b) sao cho không bị crash khi mẫu số là 0. Bài này kết hợp def để định nghĩa hàm, try / except để bắt ngoại lệ, và dùng return để gửi về các giá trị khác nhau tùy vào điều xảy ra.

try / except định tuyến lời gọi như thế nào
safe_divide(a, b)lời gọitry:return a / bThành công5.0except:print + return NoneKhi lỗiNonethành côngchia cho 0
Khi thành công, giá trị được trả về từ trong try. Khi lỗi, điều khiển nhảy sang khối except tương ứng.

Viết một hàm safe_divide nhận hai số ab. Bình thường nó trả về a / b, nhưng đừng để lỗi chia cho 0 làm sập chương trình — khi điều đó xảy ra, hãy in "Không cho phép chia cho 0" và trả về None.

Gọi safe_divide(10, 2)safe_divide(10, 0) lần lượt rồi print() mỗi giá trị trả về để kiểm tra.

Python Editor

Chạy code để xem đầu ra

Bài 3: Thay đổi giá trị trả về của hàm bằng decorator

Xây một decorator @double nhân đôi mọi giá trị mà hàm được bọc trả về — mà không chạm tới thân hàm. Bài này buộc bạn phải tự viết pattern decorator: một hàm nhận một hàm và trả về một hàm mới.

Cách một decorator được kết nối
def add(a, b):return a + b@double= double(add)wrapper(*args)= add(*args) * 2add(3, 5) → 16(8 nhân đôi)bọctrả về wrappergọi
Decorator là một hàm nhận một hàm và trả về một hàm mới. @double giống như add = double(add).

Viết một decorator double nhân đôi giá trị trả về của bất kỳ hàm nào nó được áp dụng.

Sau đó áp dụng double lên một hàm đơn giản add(a, b) trả về a + b, gọi add(3, 5), và print() kết quả. Nếu decorator được kết nối đúng, kết quả sẽ khác với một tổng thông thường.

Python Editor

Chạy code để xem đầu ra

Bạn đã hoàn thành tốt phần này

Đó là kết thúc của Cú pháp Python. Bạn đã đi qua luồng điều khiển với điều kiện, vòng lặp, và ngoại lệ, định nghĩa hàm với def / lambda, comprehension, hàm bậc cao, decorator, và generator — gần như mọi công cụ bạn cần để điều khiển một chương trình. Giờ bạn có thể tự viết những hàm nhận giá trị, biến đổi chúng, và trả về kết quả.

Chương tiếp theo, Lập trình hướng đối tượng Python, là về định nghĩa kiểu của riêng bạn: viết class, thiết lập constructor với __init__, kế thừa, đa hình, đóng gói, các special method như __add__, context manager với with, và type hint. Đó là cách bạn gói dữ liệu và hành vi vào cùng một thiết kế.