📅  最后修改于: 2023-12-03 15:12:39.372000             🧑  作者: Mango
本次GATE MOCK 2017 |第53章 是一道关于门的编程题目。该题目考察了程序员对数据结构和算法的掌握能力,以及对思维逻辑问题的解决能力。
在这个题目中,程序员需要设计一种数据结构来模拟门的开闭状态。门可以是开着的、关着的、或半开半闭的。程序员需要能够查询门的状态,并能够打开或关闭门。同时,程序员需要记录门的开闭历史,以便进行统计和分析。
实现一个门类,要求包括以下功能:
门的状态可以是以下三种:
开闭历史应该记录每一次开门或关门的时间和状态,并可以输出统计信息,如门开启的总时间和门关闭的总时间等。
门的状态可以通过以下函数进行查询和设置:
class Gate:
def is_closed(self) -> bool:
pass
def is_open(self) -> bool:
pass
def is_half_open(self) -> bool:
pass
def open(self) -> None:
pass
def close(self) -> None:
pass
门的开闭历史可以通过以下函数进行记录和查询:
class Gate:
def get_history(self) -> List[Tuple[datetime, str]]:
pass
def get_total_open_time(self) -> int:
pass
def get_total_close_time(self) -> int:
pass
为了实现以上功能,我们可以用一个布尔值来表示门的状态,即开或关。同时,我们可以用另一个布尔值来表示门是否处于半开半闭状态。
门的每一次开闭操作将记录下来,并存放在一个列表中。每次开门或关门时记录时间戳,并且记录门的状态,以便于后续进行分析。
import datetime
from typing import List, Tuple
class Gate:
def __init__(self):
self.is_open_status = False
self.is_half_open_status = False
self.history_list = []
def __str__(self):
return "Gate is Open" if self.is_open_status else "Gate is Closed"
def is_closed(self) -> bool:
return not self.is_open_status and not self.is_half_open_status
def is_open(self) -> bool:
return self.is_open_status and not self.is_half_open_status
def is_half_open(self) -> bool:
return self.is_half_open_status
def open(self) -> None:
if not self.is_open_status:
self.history_list.append((datetime.datetime.now(), "Open"))
self.is_open_status = True
self.is_half_open_status = False
def close(self) -> None:
if self.is_open_status or self.is_half_open_status:
self.history_list.append((datetime.datetime.now(), "Close"))
self.is_open_status = False
self.is_half_open_status = False
def get_history(self) -> List[Tuple[datetime.datetime, str]]:
return self.history_list
def get_total_open_time(self) -> int:
open_time = 0
close_time = 0
history = self.get_history()
for i in range(len(history)):
if i % 2 == 0:
close_time += (history[i + 1][0] - history[i][0]).total_seconds()
else:
open_time += (history[i + 1][0] - history[i][0]).total_seconds()
if self.is_open_status:
open_time += (datetime.datetime.now() - history[-1][0]).total_seconds()
return int(open_time)
def get_total_close_time(self) -> int:
open_time = 0
close_time = 0
history = self.get_history()
for i in range(len(history)):
if i % 2 == 0:
close_time += (history[i + 1][0] - history[i][0]).total_seconds()
else:
open_time += (history[i + 1][0] - history[i][0]).total_seconds()
if self.is_closed():
close_time += (datetime.datetime.now() - history[-1][0]).total_seconds()
return int(close_time)
门 | GATE MOCK 2017 |第53章 是一道优秀的编程题目,它不仅考察了程序员的数据结构和算法能力,还考察了程序员的思维逻辑能力。通过这个题目的练习,程序员可以提升自己的编程水平和解决问题的能力,更好地提升自己在职场上的竞争力。