📅  最后修改于: 2023-12-03 15:28:39.466000             🧑  作者: Mango
本次 GATE CS Mock 考试的问题 27 是围绕着“门”展开的。该问题要求你实现一个门的抽象模型,该模型具有一个“请求进入”方法,以及一个“是否允许进入”的方法。以下是该问题的完整描述:
假设有一个门的抽象模型,该模型具有一个“请求进入”方法,以及一个“是否允许进入”的方法。门有两种类型:普通门和 VIP 门。普通门只允许普通访客进入,而 VIP 门可以允许 VIP 访客进入。
对于普通门,请求进入后应直接允许进入。对于 VIP 门,根据门口的访客类型与门的类型决定是否允许进入。具体来说,如果门口的访客类型大于等于 VIP,则允许进入;否则禁止进入。
请你实现 Door 类,该类包含如下方法:
Door(bool is_vip_door)
初始化方法,比较简单,只需在构造函数中传入门的类型,即可创建一个 Door 对象。void request_entry(Person p)
该方法接受一个 Person 对象作为参数,表示请求进入门。对于 VIP 门,应根据上述规定决定是否允许进入;对于普通门,直接允许进入。bool enter_request_granted(Person p)
该方法接受一个 Person 对象作为参数,表示该访客请求是否允许进入门。在本次模拟考试中,你需要完成 Door 类的实现,并通过样例测试来验证你的实现是否正确。
对于以下代码:
d = Door(True)
p1, p2, p3 = Person(False), Person(True), Person(False)
d.request_entry(p1)
d.request_entry(p2)
d.request_entry(p3)
print(d.enter_request_granted(p1))
print(d.enter_request_granted(p2))
print(d.enter_request_granted(p3))
程序应该输出以下结果:
True
True
False
Door 类可以采用以下实现:
class Door:
def __init__(self, is_vip_door):
self.is_vip_door = is_vip_door
def request_entry(self, person):
if self.is_vip_door and not person.is_vip:
print("VIP requested, but non-VIP door.")
return False
return True
def enter_request_granted(self, person):
return self.request_entry(person)
上述代码实现了 Door 类,其中 request_entry()
方法实现了门的进入请求方法,enter_request_granted()
方法实现了门的是否允许进入判断方法。具体来说,如果门是 VIP 门而访客不是 VIP,则禁止进入;否则允许进入。
如果你对这段代码中的语法和细节存在疑惑,可以参考以下解释:
Person
类可以按照下面的方式实现:
class Person:
def __init__(self, is_vip):
self.is_vip = is_vip
类中的 self
参数代表了类实例本身。你可以将其理解为 Java 中的 this
,即表示当前对象。这是 Python 类语法中的一个特点,需要花功夫熟练掌握。
__init__()
方法是 Python 的构造方法,用于初始化对象。在本例中,Door 类的构造方法需要传递一个 is_vip_door
的参数,该参数表示门的类型(VIP 还是非 VIP)。
request_entry()
方法中的参数 person
是一个 Person 对象,表示访客信息。Door 类需要根据门的类型与访客类型来判断是否允许进入。如果门口的访客类型不符合门的类型要求,则禁止进入,否则允许进入。
enter_request_granted()
方法的实现很简单,调用 request_entry()
方法即可。这种写法的好处是代码简洁,易读。