关于用python模仿逻辑电路的一个小例子
class LogicGate:def __init__(self,n):
self.name = n
self.output = None
def getName(self):
return self.name
def getOutput(self):
self.output = self.performGateLogic()
return self.output
class BinaryGate(LogicGate):
def __init__(self,n):
LogicGate.__init__(self,n)
self.pinA = None
self.pinB = None
def getPinA(self):
if self.pinA == None:
return int(input("Enter Pin A input for gate "+self.getName()+"-->"))
else:
return self.pinA.getFrom().getOutput()
def getPinB(self):
if self.pinB == None:
return int(input("Enter Pin B input for gate "+self.getName()+"-->"))
else:
return self.pinB.getFrom().getOutput()
def setNextPin(self,source):
if self.pinA == None:
self.pinA = source
else:
if self.pinB == None:
self.pinB = source
else:
print("Cannot Connect: NO EMPTY PINS on this gate")
class AndGate(BinaryGate):
def __init__(self,n):
BinaryGate.__init__(self,n)
def performGateLogic(self):
a = self.getPinA()
b = self.getPinB()
if a==1 and b==1:
return 1
else:
return 0
class OrGate(BinaryGate):
def __init__(self,n):
BinaryGate.__init__(self,n)
def performGateLogic(self):
a = self.getPinA()
b = self.getPinB()
if a ==1 or b==1:
return 1
else:
return 0
class UnaryGate(LogicGate):
def __init__(self,n):
LogicGate.__init__(self,n)
self.pin = None
def getPin(self):
if self.pin == None:
return int(input("Enter Pin input for gate "+self.getName()+"-->"))
else:
return self.pin.getFrom().getOutput()
def setNextPin(self,source):
if self.pin == None:
self.pin = source
else:
print("Cannot Connect: NO EMPTY PINS on this gate")
class NotGate(UnaryGate):
def __init__(self,n):
UnaryGate.__init__(self,n)
def performGateLogic(self):
if self.getPin():
return 0
else:
return 1
class Connector:
def __init__(self, fgate, tgate):
self.fromgate = fgate
self.togate = tgate
tgate.setNextPin(self)
def getFrom(self):
return self.fromgate
def getTo(self):
return self.togate
def main():
g1 = AndGate("G1")
g2 = AndGate("G2")
g3 = OrGate("G3")
g4 = NotGate("G4")
c1 = Connector(g1,g3)
c2 = Connector(g2,g3)
c3 = Connector(g3,g4)
print(g4.getOutput())
main()
这是个魔方逻辑门的程序,我是在搞不懂 g3传入tgate.setNextPin()之后到 BinaryGate(LogicGate)再去执行def setNextPin(self,source)中source 到底是什么意思?该怎么去理解。求大神指点 tgate.setNextPin(self)是把gate传入 setNextPin函数中么? g3传入后,作为tgate,在Connector类使用tgate.setNextPin(self),
由于g3是或门,OrGate类,父类二进制门类BinaryGate才定义了setNextPin(self,source)
本身的这个函数是父类继承过来的而已 塔利班 发表于 2018-3-3 10:33
g3传入后,作为tgate,在Connector类使用tgate.setNextPin(self),
由于g3是或门,OrGate类,父类二进制门 ...
谢谢回答 但是我还是有些不理解,比如
g1 = AndGate('G1')
g3 = AndGate('G3')
c1 = Connector(g1,g3)
g1,g3 传入进 Connector,
然后g3.setNextPin 会把 self.fromgate 和 self.togate 都传入进 setNextPin ,
输出 self.fromgae ,self.togate
souce就是 g1,g3
是这样子理解吗? snakeshe 发表于 2018-3-3 13:03
谢谢回答 但是我还是有些不理解,比如
g1 = AndGate('G1')
g3 = AndGate('G3')
说实话,我都很不想看了= =,关键引用的继承太乱,初始化也来回引用,我教你个方法
去改写程序,将输出结果变成加法计算,来看看是不是这样{:10_316:}{:10_251:} 塔利班 发表于 2018-3-3 15:52
说实话,我都很不想看了= =,关键引用的继承太乱,初始化也来回引用,我教你个方法
去改写程序,将输出 ...
好的我试试看 谢谢你 snakeshe 发表于 2018-3-3 13:03
谢谢回答 但是我还是有些不理解,比如
g1 = AndGate('G1')
g3 = AndGate('G3')
这里的 source ,就是指向这 connector(g1,g3)这个类,之后把这个类赋给 self.pin,所以才可以调用 getFrom()的方法
页:
[1]