您的位置:首页 > 编程语言 > Python开发

Python 初学笔记:逻辑门练习

2014-04-30 22:08 549 查看
正在学习Problem Solving with Algorithms and Data Structures using 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() #可将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

class NorGate(BinaryGate):
def __init__(self, n):
BinaryGate.__init__(self, n)
def performGateLogic(self):
if self.getPinA():
return 0
elif self.getPinB():
return 0
else:
return 1

class NandGate(AndGate):
def __init__(self, n):
AndGate.__init__(self, n)
def performGateLogic(self):
if not self.getPinA():
return 1
elif not self.getPinB():
return 1
else:
return 0
#return not AndGate.performGateLogic(self)

def main():

g1 = AndGate("G1")
g2 = AndGate("G2")
g3 = OrGate("G3")
g4 = NorGate("G4")
g5 = NandGate("G5")
g6 = NotGate("G6")
c4 = Connector(g5, g1)
c5 = Connector(g4, g1)
c1 = Connector(g1, g3)
c2 = Connector(g2, g3)
c3 = Connector(g3, g6)
print(g6.getOutput())

main()


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Python beginner