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 初学笔记:地址簿练习
- 零基础入门学习Python学习笔记第四讲【短路逻辑】
- Python学习笔记 —— 逻辑语句
- Python初学笔记(1)
- 初学ML笔记N0.1——线性回归,分类与逻辑斯蒂回归,通用线性模型
- 初学ML笔记N0.1——线性回归,分类与逻辑斯蒂回归,通用线性模型
- Python学习笔记(一)——初学Python
- python初学笔记(六)---实例学python
- [python]学习笔记4-关于列表去重练习
- 笨办法学Python学习笔记 练习26
- Python练习笔记——编写一个阶乘函数
- Python 初学笔记:递归解决0-1背包问题
- Python初学练习02:简易通讯录
- Python初学练习01:简易登录验证
- 初学python-练习_1使用python编写计算班级学生平均分程序
- python初学的笔记
- 初学ML笔记N0.1——线性回归,分类与逻辑斯蒂回归,通用线性模型
- 初学ML笔记N0.1——线性回归,分类与逻辑斯蒂回归,通用线性模型
- python初学笔记-类和装饰
- python练习笔记——map | sum | pow 的应用