Mô phỏng dịch vụ khách hàng¶
Yêu cầu¶
Viết chương trình mô phỏng trung tâm dịch vụ khách hàng mà ở đó khách hàng được phục vụ từng người một. Chương trình phải sử dụng cấu trúc hàng đợi để quản lý những hoạt động của khách hàng trong khi chờ đến lượt phục vụ.
Input¶
Dữ liệu đầu vào gồm nhiều dòng. Mỗi dòng biểu thị một hoạt động diễn ra trong hàng đợi của khách hàng.
Có ba loại hoạt động:
ARRIVE customer_name
: Một khách hàng mới đến và được thêm vào cuối hàng đợi.SERVE
: Khách hàng đầu tiên trong hàng đợi được phục vụ và xóa khỏi hàng đợi.LEAVE customer_name
: Một khách hàng rời khỏi hàng đợi mà không được phục vụ.
Output¶
Dữ liệu đầu ra gồm:
- Thông báo các hoạt động diễn ra trong hàng đợi.
- Hàng đợi hiện hành.
Bộ test¶
Input mẫu¶
ARRIVE Musk
ARRIVE Gates
ARRIVE Arnault
SERVE
ARRIVE Musk
LEAVE Arnault
ARRIVE Bezos
SERVE
ARRIVE Zuckerberg
LEAVE Gates
ARRIVE Ellison
SERVE
SERVE
SERVE
Ouput mẫu¶
Musk đã tới.
Gates đã tới.
Arnault đã tới.
Đang phục vụ Musk.
Musk đã tới.
Arnault buồn quá nên về rồi.
Bezos đã tới.
Đang phục vụ Gates.
Zuckerberg đã tới.
Không có Gates nên không có chuyện rời hàng.
Ellison đã tới.
Đang phục vụ Musk.
Đang phục vụ Bezos.
Đang phục vụ Zuckerberg.
Tình trạng hàng đợi hiện tại: ['Ellison']
Cách giải đề xuất¶
Khởi tạo¶
Khai báo lớp Queue
của module queue
.
Khai báo biến data
chứa dữ liệu đầu vào.
Đọc dữ liệu đầu vào¶
-
Tham số
d
dùng để nhận chuỗi dữ liệu đầu vào, cụ thể ở đây là biếndata
. -
strip()
được thực hiện trước, dùng để cắt bỏ các khoảng trắng ở hai đầu củad
.splitlines()
được thực hiện sau, dùng để phân chia các dòng thành các phần tử của danh sáchlines
. -
Ứng với mỗi dòng
line
trong danh sáchlines
, dựa vào khoảng trắng giữa các từ, hàmsplit()
phân chia các từ thành các phần tử của danh sách con, ví dụ:['ARRIVE', 'Musk']
.operations
là danh sách lớn chứa các danh sách con.
Xử lý¶
Ứng với mỗi hoạt động (ARRIVE, SERVE, LEAVE), ta viết một hàm xử lý hoạt động đó.
Việc xử lý mỗi hoạt động trong bài này không có gì phức tạp, chỉ đơn giản là gọi hàm print()
để thông báo sự việc.
- Tham số
customer_name
dùng để nhận vào tên của khách hàng trong hoạt động ARRIVE.
-
Tham số
customer_name
dùng để nhận vào tên của khách hàng trong hoạt động LEAVE. -
found
là biến cờ hiệu ghi nhận đã tìm thấy tên của khách hàng trong hoạt động LEAVE hay chưa.
Tiếp theo, ta viết hàm process()
để gôm việc xử lý các hàm trên lại.
Trong đó, dùng vòng lặp for để duyệt từng hoạt động trong danh sách, ứng với mỗi hoạt động (ARRIVE, SERVE, LEAVE), ta gọi hàm tương ứng ra xử lý.
- Tham số
op_list
dùng để nhận vào danh sách các hoạt động cần xử lý, cụ thể ở đây là biếnoperations_list
.
In dữ liệu đầu ra¶
Trong chương trình chính, ta chỉ việc gọi các hàm đã viết ra thực hiện và xem kết quả.
Mã nguồn¶
Chương trình Python hoàn chỉnh đặt tại Google Colab.