📜  门| GATE CS 1996 |问题21(1)

📅  最后修改于: 2023-12-03 14:58:18.312000             🧑  作者: Mango

门 | GATE CS 1996 | 问题21

本文是 GATE(印度高等教育资格考试)计算机科学的 CS 1996 年试题中的问题21,是一道有关编程的问题。

题目描述

你需要编写一个程序来模拟简单的门控系统。系统有两个闸门:入口闸门和出口闸门。当一个人通过入口闸门时,系统应该计数他们进入系统。当一个人通过出口闸门时,系统应该计数他们离开系统。系统应该能够回答以下问题:

  1. 系统中当前有多少人?
  2. 系统中最多有多少人同时在系统中?
  3. 有多少人今天进入了系统?

为了简化问题,我们假设每个人都通过入口闸门进入,通过出口闸门离开。

代码实现
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 对象,并模拟了一个人通过入口闸门进入系统,然后通过出口闸门离开系统的过程。我们分别检查了系统中的当前人数、最大人数和总计入人数是否正确,并确保删除人员后系统的计数器是否正确。