📜  门| GATE-CS-2001 |问题 20(1)

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

门 | GATE-CS-2001 | 问题 20

这道题目要求我们实现一个门类,具有开门和关门的功能,同时具有保护机制,只有当门的状态为关闭时才能进行开门操作。

设计思路

我们可以定义一个门类,该类包含以下属性和方法:

属性
  1. is_open:表示门的状态,取值为布尔型(True表示门开着,False表示门关着)。
  2. is_locked:表示门的保护机制是否开启,取值为布尔型(True表示保护机制开启,False表示保护机制关闭)。
方法
  1. open():开门方法,当门处于关闭状态并且保护机制关闭时,将门状态设置为开启。
  2. close():关门方法,将门状态设置为关闭。
  3. lock():开启保护机制方法,保护机制开启后无法进行开门操作。
  4. unlock():关闭保护机制方法,保护机制关闭后可以进行开门操作。

在门类的实现中,应该对保护机制和状态进行判断,确保门的状态在合理范围内。

代码实现

以下是基于Python的门类的实现:

class Door:
    def __init__(self):
        self.is_open = False
        self.is_locked = False

    def open(self):
        if not self.is_open and not self.is_locked:
            self.is_open = True
            return "Door is opened."
        elif self.is_locked:
            return "Door is locked. Cannot open."
        else:
            return "Door is already open."

    def close(self):
        self.is_open = False
        return "Door is closed."

    def lock(self):
        if not self.is_locked and not self.is_open:
            self.is_locked = True
            return "Door is locked."
        elif self.is_open:
            return "Cannot lock. Door is not closed."
        else:
            return "Door is already locked."

    def unlock(self):
        self.is_locked = False
        return "Door is unlocked."
测试样例

以下是对门类实现的测试样例:

door = Door()

# 关闭门并锁上保护机制
door.close()
door.lock()

# 开门(保护机制开启)
assert door.open() == "Door is locked. Cannot open."
assert door.is_open == False

# 关闭门并解锁保护机制
door.close()
door.unlock()

# 关闭门(门已经是关闭状态)
assert door.close() == "Door is closed."
assert door.is_open == False

# 开门(保护机制关闭)
assert door.open() == "Door is opened."
assert door.is_open == True

# 开门(门已经是开启状态)
assert door.open() == "Door is already open."
assert door.is_open == True

# 关闭门
assert door.close() == "Door is closed."
assert door.is_open == False

# 关闭门(门已经是关闭状态)
assert door.close() == "Door is closed."
assert door.is_open == False

# 锁上保护机制
assert door.lock() == "Door is locked."
assert door.is_locked == True

# 锁上保护机制(保护机制已经是开启状态)
assert door.lock() == "Door is already locked."
assert door.is_locked == True

# 解锁保护机制
assert door.unlock() == "Door is unlocked."
assert door.is_locked == False