4. (提高)有些超市设置有多个自助收银台,为便于管理,在自助收银区入口处顾客排成一队,每当一个自助收银台可以使用时,一个顾客就可以去结账。假设有两个自助收银台,按如上场景编写模拟程序。提示:考虑如何
时间: 2024-11-30 20:29:51 浏览: 23
这是一个简单的模拟排队系统的问题,我们可以使用Python语言来描述这个场景。这里我们可以创建一个`Queue`(队列)数据结构,代表顾客的队伍,以及两个状态表示的变量分别对应两个自助收银台。每个顾客都是一个`Customer`对象,它有一个`checkout`方法用于模拟结账过程。
```python
import queue
class Customer:
def __init__(self, name):
self.name = name
def checkout(self):
print(f"{self.name}开始结账")
# 这里只是一个简单模拟,实际上你可以添加更复杂的操作
return "已结账"
def manage_queue():
# 创建两个空的自助收银台
checkout_stations = [queue.Queue() for _ in range(2)]
# 假设我们有一个顾客列表
customers = ["Alice", "Bob", "Charlie", "David"]
for customer_name in customers:
# 模拟顾客到达并进入对应的队列
checkout_station = checkout_stations[0]
checkout_station.put(Customer(customer_name))
# 模拟收银台处理,当某个收银台空闲时,取出并结账一个顾客
while not checkout_station.empty():
current_customer = checkout_station.get()
checkout_result = current_customer.checkout()
if checkout_result == "已结账":
# 收银台完成,准备下一个顾客
checkout_station.task_done()
# 如果另一个收银台还有顾客等待,就切换到另一个
if not checkout_stations[1].empty():
checkout_stations[1], checkout_stations[0] = checkout_stations[0], checkout_stations[1]
# 调用函数启动模拟
manage_queue()
```
在这个模拟中,顾客按照名字的顺序依次到达,收银台会优先处理第一个队列。当第一个收银台忙完时,如果第二个队列有顾客,就会切换到第二个。这样实现了多路并发的模拟。
阅读全文