📜  门| GATE-CS-2015(Set 2)|问题29(1)

📅  最后修改于: 2023-12-03 15:42:17.620000             🧑  作者: Mango

门 | GATE-CS-2015(Set 2)|问题29

这道题目来自于 2015 年 GATE-CS 的题目集,要求我们使用 Python 语言实现一个 door 类,该类可以模拟一个具有特定状态的门的行为。

题目描述

门有三个状态:开、关和锁定。门的状态可以用整数 012 来表示。门有两个操作:打开和关闭。门还有一个状态变量,该变量可以用布尔类型表示,表示门是否被锁定。

门的行为规则如下:

  • 如果门被锁定,则不能打开或关闭。
  • 如果门已经关闭,则可以打开(状态变成 1)。
  • 如果门已经打开,则可以关闭(状态变成 0)。
  • 如果门已经锁定,则不能打开或关闭。

门类的接口如下:

class Door:
    def __init__(self, state = 0, locked = False):
        pass
    
    def is_locked(self):
        pass
    
    def is_closed(self):
        pass
    
    def open(self):
        pass
    
    def close(self):
        pass

其中,__init__ 方法用于构造一个门对象,state 参数表示门的初始状态,取值为 0、1 或 2;locked 参数表示门的初始状态是否为锁定状态。

is_locked 方法用于判断门是否被锁定,返回一个布尔类型值。

is_closed 方法用于判断门是否关闭,返回一个布尔类型值。

open 方法用于将门打开,返回值为布尔类型,表示门是否被成功打开。

close 方法用于将门关闭,返回值为布尔类型,表示门是否被成功关闭。

解题思路

根据题目中的行为规则,我们可以写出如下的 Door 类实现:

class Door:
    def __init__(self, state = 0, locked = False):
        self.state = state
        self.locked = locked
    
    def is_locked(self):
        return self.locked
    
    def is_closed(self):
        return self.state == 0
    
    def open(self):
        if not self.locked:
            if self.is_closed():
                self.state = 1
                return True
            else:
                return False
    
    def close(self):
        if not self.locked:
            if not self.is_closed():
                self.state = 0
                return True
            else:
                return False
测试样例

我们可以使用如下的代码片段来对 Door 类进行测试:

# 测试样例
door = Door()
assert door.is_closed() == True
assert door.is_locked() == False

door.locked = True
assert door.open() == False
assert door.close() == False

door.locked = False
assert door.open() == True
assert door.is_closed() == False

assert door.close() == True
assert door.is_closed() == True

其中,我们对门的初始化状态进行了测试,随后测试门是否能够被锁定,以及门的打开和关闭操作是否合法。