📅  最后修改于: 2023-12-03 14:58:18.312000             🧑  作者: Mango
本文是 GATE(印度高等教育资格考试)计算机科学的 CS 1996 年试题中的问题21,是一道有关编程的问题。
你需要编写一个程序来模拟简单的门控系统。系统有两个闸门:入口闸门和出口闸门。当一个人通过入口闸门时,系统应该计数他们进入系统。当一个人通过出口闸门时,系统应该计数他们离开系统。系统应该能够回答以下问题:
为了简化问题,我们假设每个人都通过入口闸门进入,通过出口闸门离开。
class GateControl:
def __init__(self):
self.current_count = 0
self.max_count = 0
self.total_entries = 0
def enter(self):
self.current_count += 1
self.total_entries += 1
if self.current_count > self.max_count:
self.max_count = self.current_count
def exit(self):
self.current_count -= 1
def get_current_count(self):
return self.current_count
def get_max_count(self):
return self.max_count
def get_total_entries(self):
return self.total_entries
gate = GateControl()
gate.enter() # one person enters
assert gate.get_current_count() == 1
assert gate.get_max_count() == 1
assert gate.get_total_entries() == 1
gate.exit() # the person leaves
assert gate.get_current_count() == 0
assert gate.get_max_count() == 1
assert gate.get_total_entries() == 1
gate.enter() # another person enters
assert gate.get_current_count() == 1
assert gate.get_max_count() == 1
assert gate.get_total_entries() == 2
gate.enter() # yet another person enters
assert gate.get_current_count() == 2
assert gate.get_max_count() == 2
assert gate.get_total_entries() == 3
gate.exit() # one person leaves
assert gate.get_current_count() == 1
assert gate.get_max_count() == 2
assert gate.get_total_entries() == 3
gate.exit() # the other person leaves
assert gate.get_current_count() == 0
assert gate.get_max_count() == 2
assert gate.get_total_entries() == 3
我们定义了一个名为 GateControl
的闸门控制类,其中包括一个人数计数器、一个最大人数记录器和一个总计入人数计数器。在类的构造函数中,我们初始化三个计数器的值为零。
该类包含三个公共方法:enter()
,exit()
和 get_current_count()
。enter()
方法用于模拟一个人通过入口闸门进入系统,增加了当前计数器的值和总计入人数计数器的值,并更新了最大人数记录器的值。exit()
方法用于模拟一个人通过出口闸门离开系统,减少当前计数器的值。get_current_count()
方法返回当前系统中的人数。
此外,该类还包含三个私有方法:get_max_count()
、get_total_entries()
和 reset()
。get_max_count()
方法返回系统中的最大人数。get_total_entries()
方法返回系统中总计入人数。reset()
方法用于重置所有计数器的值,但由于该方法未被用到,所以我们在代码中未作解释。
在测试代码中,我们创建了一个 GateControl
对象,并模拟了一个人通过入口闸门进入系统,然后通过出口闸门离开系统的过程。我们分别检查了系统中的当前人数、最大人数和总计入人数是否正确,并确保删除人员后系统的计数器是否正确。