当前位置: 首页 > news >正文

《Python数据结构与算法分析》代码

为Bradley N. Miller与David L. Ranum的《Python数据结构与算法分析(第2版)》(人民邮电出版社出版出版,封面如下图1+)一书 整理复现书中对于初学者来说不太容易理解的代码。代码已测试通过,方便各位初学者道友参考对照学习。

image

 图1 封面

第一章 导论

1.4 Python基础  逻辑门电路

文件名:LogicGate.py

  1 class LogicGate:
  2     """
  3     超类
  4     """
  5     
  6     def __init__(self,n):
  7         self.label = n
  8         self.output = None
  9         
 10     def getLabel(self):
 11         return self.label
 12     
 13     def getOutput(self):
 14         self.output = self.performGateLogic()
 15         return self.output
 16     
 17 class BinaryGate(LogicGate):
 18     """
 19     双输入门
 20     """
 21     
 22     def __init__(self,n):
 23         super().__init__(n)
 24         
 25         self.pinA = None
 26         self.pinB = None
 27         
 28     def getPinA(self):
 29         if self.pinA == None:
 30             return int(input("Enter Pin A input for gate " + \
 31                          self.getLabel() + "-->"))
 32         else:
 33             return self.pinA.getFrom().getOutput()
 34         
 35     def getPinB(self):
 36         if self.pinB == None:
 37             return int(input("Enter Pin B input for gate " + \
 38                          self.getLabel() + "-->"))
 39         else:
 40             return self.pinB.getFrom().getOutput()
 41         
 42             
 43             
 44     def setNextPin(self,source):
 45         if self.pinA == None:
 46             self.pinA = source
 47         elif self.pinB == None:
 48             self.pinB = source
 49         else:
 50             raise RuntimeError("Error: NO EMPTY PINS")
 51     
 52 class UnaryGate(LogicGate):
 53     """
 54     但输入门
 55     """
 56     
 57     def __init__(self,n):
 58         super().__init__(n)
 59         
 60         self.Pin = None
 61     
 62     def getPin(self):
 63         if self.Pin == None:
 64             return int(input("Enter Pin input for gate" + \
 65                          self.getLabel()+"-->"))
 66         else:
 67             return self.Pin.getFrom().getOutput()
 68         
 69     def setNextPin(self,source):
 70         if self.Pin == None:
 71             self.Pin= source
 72         else:
 73             raise RuntimeError("Error: NO EMPTY PINS")
 74             
 75 class AndGate(BinaryGate):
 76     
 77     def __init__(self,n):
 78         super().__init__(n)
 79         
 80     def performGateLogic(self):
 81         
 82         a = self.getPinA()
 83         b = self.getPinB()
 84         if a == 0 or b == 0 :
 85             return 0
 86         else:
 87             return 1
 88 class OrGate(BinaryGate):
 89     def __init__(self,n):
 90         super().__init__(n)
 91         
 92         self.PinA = None
 93         self.PinB = None
 94         
 95     def performGateLogic(self):
 96         
 97         a = self.getPinA()
 98         b = self.getPinB()
 99         if a == 1 or b == 1 :
100             return 1
101         else :
102             return 0
103         
104 class NotGate(UnaryGate):
105     
106     def __init__(self,n):
107         super().__init__(n)
108         
109     def performGateLogic(self):
110         a = self.getPin()
111         return 0 if a else 1  # return int(not a)
112     
113     
114 class Connector:
115     
116     def __init__(self,fgate,tgate):
117         self.fromgate = fgate
118         self.togate = tgate
119         
120         tgate.setNextPin(self)
121         
122     def getFrom(self):
123         return self.fromgate
124     
125     def getTo(self):
126         return self.togate
127     
128 
129             
130         
131         

测试代码如下:

文件名 test.py

import LogicGateg1 = LogicGate.AndGate('G1')
# print(g1.getOutput())

g2 = LogicGate.AndGate("G2")
# print(g2.getOutput())

g3 = LogicGate.OrGate("G3")
# print(g3.getOutput())

g4 = LogicGate.NotGate("G4")
# print(g4.getOutput())

c1 = LogicGate.Connector(g1, g3)
c2 = LogicGate.Connector(g2, g3)
c3 = LogicGate.Connector(g3, g4)print(g4.getOutput())

 

http://www.wxhsa.cn/company.asp?id=337

相关文章:

  • AI 是否绑架了云原生创新?
  • Windows 7 局域网打印机共享设置
  • SPFA求负环
  • 磁盘存储器
  • 多变量的递归2-组合总和问题(每个数字可以使用多次)
  • 戴尔Precision 7865 塔式工作站|安装rocky liunx 8.10
  • 基于STM32F411的AM2320温湿度采集程序
  • jmeter测试mysql
  • 博弈论杂谈
  • 基于MATLAB的图像配准与拼接实现
  • ESP-IDF在vscode环境下编译速度
  • Docker容器
  • EtherCAT总线介绍及耦合器EK1100
  • centos服务器定时任务备份数据库脚本
  • 小红书全量笔记数据集(含标题、正文、标签、互动量、图片等),可用于NLP、推荐算法、大模型训练、爆款文章生成、精准营销与市场分析
  • PVE跨集群迁移虚机
  • CF2022E 题解 | 数学、并查集
  • 领悟2025.9.10
  • Codeforces Round 1049 (Div. 2)
  • 告别资料混乱!PJMan 让项目文件管理,简单到不用找
  • 公众号文章如何添加附件?微信公众号支持附件下载Word、Excel、PDF、PPT等
  • 揭秘LedgerCTF的AES白盒挑战:逆向工程与密码学分析
  • Java11-快速启动指南-全-
  • 三万小时PB级院线级电影数据集,包含完整视频、音频和字幕多模态资源,专为视频大模型训练和多模态研究设计,适用于文生视频生成、影视剪辑、语义检索及智能内容管理
  • openssl编程之sm3哈希代码示例
  • CRMEB标准版PHP订单列表功能解析与实战应用
  • timescaledb在ubuntu上的高可用部署步骤记录
  • Mybatis
  • vue3不允许缓存组件keep-alive直接包裹router-view
  • 你的部署流程已然落伍-热重启的失传艺术