📅  最后修改于: 2023-12-03 14:58:27.320000             🧑  作者: Mango
本题需要实现一个线性数据结构来存储门以及与之相连的门。在一个仿真器中,门可以是输入、输出、组合逻辑或时序电路的组成部分。
在设计一个门的仿真器时,需要实现一个门的数据结构,该数据结构需要可以存储与门相连的输入和输出,以及计算门的输出。
门可以被组成电路的一个层次结构中。在该层次结构中,输出门可以被输入门链接。门和它们的数据连接可以被改变。
Gate 类应该支持以下接口:
class Gate:
def get_output(self):
pass
def set_input(self, idx, gate):
pass
def get_inputs(self):
pass
get_output()
get_output()
函数应该计算并返回门的输出。
set_input(idx, gate)
set_input(idx, gate)
函数应该将给定输入门连接到门的 idx
个输入。
例如,如果有一个 2-输入的门,并且希望与这个门相连,则应该调用 set_input(0, in_gate)
和 set_input(1, in_gate)
。
get_inputs()
get_inputs()
函数应该返回与门相连的输入门的列表。
将上述接口实现完成的代码提交,以 markdown 格式返回。
class Gate:
def get_output(self):
pass
def set_input(self, idx, gate):
pass
def get_inputs(self):
pass
本题需要实现门的嵌套数据结构。每个门的信息由以下属性组成:
inputs
: 一个列表,存储所有与该门相连的输入门。output
: 门的输出。name
: 门的名称。我们可以通过继承 Gate
类来实现具体的门类型。例如,BinaryGate
可以实现两个输入端口的二进制门,UnaryGate
实现一个输入端口的二进制门。
当我们需要计算某个门的输出时,我们可以递归调用所有与之相连的输入门的 get_output()
函数,并在计算完毕后使用该门的逻辑计算公式计算门的输出。
我们先实现一个 Gate
类,并继承 Gate
类实现具体的门类型。
class Gate:
def __init__(self, name):
self.output = None
self.name = name
self.inputs = []
def get_output(self):
pass
def set_input(self, idx, gate):
self.inputs[idx] = gate
def get_inputs(self):
return self.inputs
class BinaryGate(Gate):
def __init__(self, name):
super().__init__(name)
self.inputs = [None, None]
class AndGate(BinaryGate):
def get_output(self):
if self.output is not None:
return self.output
in0, in1 = self.get_inputs()
if in0.get_output() == 1 and in1.get_output() == 1:
self.output = 1
else:
self.output = 0
return self.output
class OrGate(BinaryGate):
def get_output(self):
if self.output is not None:
return self.output
in0, in1 = self.get_inputs()
if in0.get_output() == 1 or in1.get_output() == 1:
self.output = 1
else:
self.output = 0
return self.output
class UnaryGate(Gate):
def __init__(self, name):
super().__init__(name)
self.inputs = [None]
class NotGate(UnaryGate):
def get_output(self):
if self.output is not None:
return self.output
in0 = self.get_inputs()[0]
if in0.get_output() == 0:
self.output = 1
else:
self.output = 0
return self.output
以上代码实现了 Gate
类和四种门类型:And、Or、Not 和它们的基类二进制门 BinaryGate
以及其基类 UnaryGate
。
在计算门的输出时,我们递归调用了所有与之相连的输入门的 get_output()
函数,以便获取它们的输出。我们还使用了一个 output
变量来存储门的输出,以避免多次计算门的输出。
本题要求实现一个门的数据结构,每种门对应一个嵌套的数据结构。当我们需要计算某个门的输出时,我们递归调用所有与之相连的输入门的 get_output()
函数,并在计算完毕后使用该门的逻辑计算公式计算门的输出。
该代码实现了 Gate
类和四种门类型:And、Or、Not 和它们的基类二进制门 BinaryGate
以及其基类 UnaryGate
。