📌  相关文章
📜  门| Sudo GATE 2020 Mock II(2019 年 1 月 10 日)|问题 6(1)

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

介绍

这是一道Sudo GATE 2020 Mock II的编程挑战,题号为问题6。本题目要求寻找一个名为“门”的类的实现,该类能够实现开门和关门的基本功能,并能够记录门上次被更新状态的时间。

挑战要求

本题要求实现一个名为“门”的类。该类应该有以下方法:

  • open(): 用于将门打开。
  • close(): 用于关闭门。
  • get_status(): 用于查询门当前的状态,返回值类型为字符串("open"或"close")。
  • set_status(status): 用于设置门的状态,输入参数为"open"或"close"。注意,此方法并不会直接将门打开或关闭,只会更新门的状态和时间戳。
  • get_last_change_time(): 用于查询门上次被更新状态的时间,返回值类型为时间戳。

门的初始状态应该为关闭状态,初始时间戳应该为0。

目标实现

请根据以上的挑战要求,实现名为“门”的类,具体实现请参考下方代码:

class Door:
    def __init__(self):
        self.status = "close"
        self.last_change_time = 0

    def open(self):
        self.status = "open"
        self.last_change_time = time.time()

    def close(self):
        self.status = "close"
        self.last_change_time = time.time()

    def set_status(self, status):
        self.status = status
        self.last_change_time = time.time()

    def get_status(self):
        return self.status

    def get_last_change_time(self):
        return self.last_change_time

使用方法

可以使用以下代码在python中检验这个类的正确性:

door = Door()

# 初始状态应该是关闭状态
assert door.get_status() == "close"

# 开门并检查状态和时间更新
door.open()
assert door.get_status() == "open"
assert door.get_last_change_time() > 0

# 关门并检查状态和时间更新
door.close()
assert door.get_status() == "close"
assert door.get_last_change_time() > 0

# 设置状态为“开”,并检查状态和时间更新
door.set_status("open")
assert door.get_status() == "open"
assert door.get_last_change_time() > 0