Sau khi nhận được nhiều yêu cầu từ bạn đọc về chủ đề “bài tập lập trình Python”, Got It đã sưu tầm những bài tập Python thực sự giúp các bạn đang học ngôn ngữ này, hoặc những người đang làm việc liên quan đến nó, hiểu được cách mà Python hoạt động.
Bài viết sau sẽ đưa ra 5 câu hỏi để kiểm tra kiến thức Python của bạn. Thay vì chỉ đưa ra những câu hỏi ghi nhớ, Got It muốn có thể giúp bạn củng cố kiến thức, hiểu biết về các khái niệm trong Python.
Nào, hãy cũng xem các câu hỏi và đăng câu trả lời của bạn trong phần bình luận nhé.
Mục lục
- Lưu ý trước khi làm 5 bài tập lập trình Python
- 1. Logging sử dụng Decorator trong Python
- 2. Duyệt cây (Tree Traversal) bằng hàm đệ quy (Recursion)
- 3. Làm phẳng một danh sách các từ điển lồng nhau thành một danh sách nhiều từ điển được làm phẳng
- 4. Code xử lý lỗi (Error Handling) và đa tiến trình (Multi-Process)
- 5. Package và Modules
- Kết
Lưu ý trước khi làm 5 bài tập lập trình Python
- Dưới mỗi bài tập sẽ là các chủ đề lớn mà câu hỏi đề cập đến. Từ đó, vào cuối bài tập, bạn sẽ cảm thấy đã hiểu được Python từ đầu đến cuối và sâu sắc hơn.
- Hãy nhớ rằng có nhiều cách để bóc một quả cam, vì vậy hãy giải quyết các câu hỏi theo cách bạn hiểu chúng. Câu trả lời sẽ được đăng trong một blog sắp tới.
1. Logging sử dụng Decorator trong Python
1. Implement một calculator class với các hàm sau:
Sum(a,b), Multiply(a,b), Divide(a,b) và Subtract(a,b)
2. Import thư viện logging
3. Decorate mỗi phương thức của calculator class với một phương thức tuỳ chỉnh ghi lại các giá trị của a và b. Implement cả phương thức tuỳ chỉnh của logger.
4. Thực thi calculator.Sum(a,b)
và nó sẽ in ra các giá trị của a và b. Ví dụ:
Giá trị đầu vào của A và B là ‘123’ và ‘234’ # if a =123 and b=234
Bài tập này sẽ kiểm tra:
- Liệu bạn có hiểu các lệnh Pip (bắt buộc khi import các thư viện) không
- Cách tạo lớp và hàm với các đối số trong Python
- Cách sử dụng decorators
2. Duyệt cây (Tree Traversal) bằng hàm đệ quy (Recursion)
Implement một class: Node (sẽ được dùng để đại diện cho một cây). Ví dụ:
class Node(object):
def __init__(self, name):
self.name= name
self.children = []
def add_child(self, obj):
self.children.append(obj)
Mỗi node có một tên và các lớp con, ví dụ:
a = Node('A')
a_goal = Node('Goal')
a.add_child(a_goal)
2. In ra tất cả các đường dẫn của cây có thể dẫn bạn đến nút có tên “Goal”.
3. Cây có thể có N số cấp (1>N>100). Node Goal cũng có thể có các lớp con.
Ví dụ trong cây dưới đây, code của bạn sẽ in ra các đường dẫn sau:
A->Goal
A->B->Goal
A->D->Goal
A->F->H->L->Goal
Tất cả các đường dẫn khác không dẫn bạn đến nút Goal. Hãy viết code của bạn sao cho có thể được unit test.
Bài tập này sẽ kiểm tra:
- Hiểu biết của bạn về đệ quy
- Cách bạn ngăn chặn việc đi vào vòng lặp vô hạn – nó sẽ kiểm tra các vòng lặp, biểu thức và logic điều kiện của bạn
- Sự hiểu biết về cấu trúc dữ liệu và phạm vi biến của bạn
3. Làm phẳng một danh sách các từ điển lồng nhau thành một danh sách nhiều từ điển được làm phẳng
- Tạo một đối tượng chứa danh sách các từ điển.
- Mỗi mục trong danh sách là một từ điển chứa một số khóa.
- Mỗi khóa của từ điển sẽ chứa một giá trị. Giá trị có thể thuộc kiểu chuỗi hoặc một kiểu từ điển. Khi giá trị thuộc loại từ điển thì nó ngụ ý rằng nó là một từ điển lồng trong một từ điển.
- Mỗi từ điển có thể chứa một số lượng khóa khác nhau.
- Lặp lại các mục và tạo một từ điển duy nhất để lưu trữ các khóa ở cùng cấp độ. Ví dụ: nếu bạn lặp lại các mục và mỗi mục chứa một từ điển với hai khóa, ví dụ: “Tên” và “Họ” và cả hai khóa đều chứa các giá trị kiểu chuỗi thì chỉ cần trả về bộ sưu tập từ điển (vì nó đã phẳng).
- Tuy nhiên, nếu nó chứa các khóa “Tên”, “Họ” và “Địa điểm đã ghé thăm”, trong đó Địa điểm đã ghé thăm chính là danh sách các từ điển mà mỗi mục của từ điển đều chứa hai khóa “Tên địa điểm” và “Ngày ghé thăm”, thì kết quả sẽ là hai danh sách. Danh sách đầu tiên nên chứa một bộ sưu tập các từ điển với khóa “Tên” và “Họ”. Danh sách thứ hai phải chứa các khóa “Tên địa điểm”, “Ngày ghé thăm” và ParentId, trong đó ParentId sẽ chứa khóa “Tên” của từ điển đầu tiên.
- Lấy giá trị của ParentId làm giá trị của khóa đầu tiên của từ điển mẹ, ví dụ trong ví dụ trên, “Tên” được chọn làm ParentId.
Đối với mỗi từ điển lồng nhau, hãy tạo một từ điển mới.
Kết quả cuối cùng sẽ là một số từ điển phẳng đại diện cho một từ điển lồng nhau
Ví dụ: nếu đây là input của bạn:
sample_object = [
{'Name':'Farhad', 'Surname:'Malik', 'Blogs':{'BlogName:'Python1','Date1':'20180901'}},
{'Name':'Farhad2', 'Surname:'Malik2', 'Blogs':{'BlogName:'Python3','Date1':'20180101'}}
]
Thì kết quả nên là:
dictionary_1 = [
{'Name':'Farhad', 'Surname:'Malik'},
{'Name':'Farhad2', 'Surname:'Malik2'}
]
dictionary_2 = [
{'ParentId':'Farhad', 'BlogName:'Python1','Date1':'20180901'},
{'ParentId':'Farhad2','BlogName:'Python3','Date1':'20180101'}
]
Điều quan trọng là phải đảm bảo rằng các item ở cùng cấp độ thuộc cùng một từ điển.
Bài tập này sẽ kiểm tra:
- Sự hiểu biết của bạn về từ điển, mảng và set.
- Cách kiểm tra các khóa và giá trị.
- Cách chuyển các tham số tùy chọn.
- Cách làm phẳng một đối tượng JSON.
4. Code xử lý lỗi (Error Handling) và đa tiến trình (Multi-Process)
- Thực hiện ba bài tập trên, làm cho code chạy trên nhiều tiến trình
- Sử dụng try/catch và catch exceptions nếu thích hợp
- Ghi chép hiệu suất của code
- Viết các unit test cho mỗi bài tập với cả positive và negative test
Bài tập này sẽ kiểm tra:
- Cách chạy code trên nhiều tiến trình hơn
- Cách bắt ngoại lệ và log code sao cho có ích
5. Package và Modules
- Tạo các lớp và code mà bạn đã implement ở trên thành một package có nhiều modules
- Hiểu cách đặt và import tệp
- Tạo một main class để điều khiển mọi thứ
- Viết ra một ứng dụng bảng điều khiển chạy các unit tests của bạn thông qua dòng lệnh (command line) và thông báo cho bạn các bài test đó đã pass hay fail.
Bài tập này sẽ kiểm tra:
- Cách hiểu và xem cách các package và module hoạt động
- Hiểu biết về ngôn ngữ lập trình Python
Kết
Bài viết này đã đưa ra 5 bài tập lập trình Python mà Got It cho rằng rất phù hợp với những ai muốn kiểm tra kiến thức, kỹ năng lập trình Python của mình.
Hãy comment câu trả lời của bạn ở phần comment và làm thêm những bài tập Python có lời giải hoặc làm các dự án đã được Got It tuyển chọn nhé.
Happy coding!