📌  相关文章
📜  门| GATE-CS-2015(套装2)|问题 26(1)

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

门| GATE-CS-2015(套装2)|问题 26

这道题要求我们实现一个抽象数据类型——门(Gate),具体来说是按位运算的门,支持 AND、OR 和 NOT 操作。我们需要实现以下操作:

  • Gate.output():获取门的输出。
  • Gate.getInput1()Gate.getInput2():获取门的两个输入。
  • Gate.performGateLogic():根据门的具体类型和输入计算输出。

我们可以先实现一个基类 LogicGate,表示逻辑门,其中包括输入和输出等基本信息,以及 performGateLogic() 方法,由子类实现具体的门类型和门的操作。

class LogicGate:
    def __init__(self, label):
        self.label = label
        self.output = None
    
    def getLabel(self):
        return self.label
    
    def getOutput(self):
        self.output = self.performGateLogic()
        return self.output
    
    def performGateLogic(self):
        raise NotImplementedError

对于具体的门类型,我们可以分别实现子类,如 AndGateOrGateNotGate

AndGateperformGateLogic() 方法返回两个输入的与运算结果:

class AndGate(LogicGate):
    def __init__(self, label):
        super().__init__(label)
        self.input1 = None
        self.input2 = None
    
    def getInput1(self):
        return self.input1
    
    def setInput1(self, input1):
        self.input1 = input1
    
    def getInput2(self):
        return self.input2
    
    def setInput2(self, input2):
        self.input2 = input2
    
    def performGateLogic(self):
        if self.input1 is None or self.input2 is None:
            raise ValueError("Missing input(s)")
        return self.input1 and self.input2

OrGateperformGateLogic() 方法返回两个输入的或运算结果:

class OrGate(LogicGate):
    def __init__(self, label):
        super().__init__(label)
        self.input1 = None
        self.input2 = None
    
    def getInput1(self):
        return self.input1
    
    def setInput1(self, input1):
        self.input1 = input1
    
    def getInput2(self):
        return self.input2
    
    def setInput2(self, input2):
        self.input2 = input2
    
    def performGateLogic(self):
        if self.input1 is None or self.input2 is None:
            raise ValueError("Missing input(s)")
        return self.input1 or self.input2

NotGateperformGateLogic() 方法返回输入的否定结果:

class NotGate(LogicGate):
    def __init__(self, label):
        super().__init__(label)
        self.input = None
    
    def getInput(self):
        return self.input
    
    def setInput(self, input):
        self.input = input
    
    def performGateLogic(self):
        if self.input is None:
            raise ValueError("Missing input")
        return not self.input

最后,我们可以进行测试:

>>> g1 = AndGate("G1")
>>> g1.setInput1(False)
>>> g1.setInput2(True)
>>> g1.getOutput()
False

>>> g2 = OrGate("G2")
>>> g2.setInput1(True)
>>> g2.setInput2(False)
>>> g2.getOutput()
True

>>> g3 = NotGate("G3")
>>> g3.setInput(True)
>>> g3.getOutput()
False

以上就是门的实现了。