Python中的电路门
我从以下来源下载了一个用Python编写的名为logic.py的程序: 通过阅读源代码,似乎不难理解,但我遇到的问题是XOR门的实现,我用我认为正确的门标记了图,代码如下:Python中的电路门,python,Python,我从以下来源下载了一个用Python编写的名为logic.py的程序: 通过阅读源代码,似乎不难理解,但我遇到的问题是XOR门的实现,我用我认为正确的门标记了图,代码如下: class Xor(Gate2): def __init__(self, name): Gate2.__init__(self, name) self.A1 = And("A1") # See circuit drawing to follow connections
class Xor(Gate2):
def __init__(self, name):
Gate2.__init__(self, name)
self.A1 = And("A1") # See circuit drawing to follow connections
self.A2 = And("A2")
self.I1 = Not("I1")
self.I2 = Not("I2")
self.O1 = Or("O1")
self.A.connect([self.A1.A, self.I2.A])
self.B.connect([self.I1.A, self.A2.A])
self.I1.B.connect([self.A1.B ])
self.I2.B.connect([self.A2.B ])
self.A1.C.connect([self.O1.A ])
self.A2.C.connect([self.O1.B ])
self.O1.C.connect([self.C ])
我的问题是,以下部分在做什么:
self.A.connect([self.A1.A, self.I2.A]) (*)
self.B.connect([self.I1.A, self.A2.A]) (**)
因为在我看来,非门(I1)的输出连接到与门(A1)的第二个输入,然后I2的输出连接到A2的第二个输入。在端部,A1和A2的两个输出(均为C)连接为或门的输入。那么(*和**)的目的是什么?我看不出它们在电路中的连接位置
有小费吗
警察局。我使用Python2.5和2.7对程序进行了测试;在这两种情况下,我在下面的行中得到了一个错误:
print(int(F3.Cout.value), end='')
它在test4bit函数中,所以我必须删除它;我说过,以防万一有人犯了同样的错误
更新:根据他们给我的解决方案,这一行:
self.A.connect([self.A1.A, self.I2.A])
我想这是从与门A1作为输入A连接起来的,但是在代码中它是在哪里说的呢?这就是我迷失的部分
谢谢两行都显示了一个连接到两个独立门输入的输入。例如,这一行:
self.A.connect([self.A1.A, self.I2.A])
显示整体输入A
连接到两个输入:和门A1上的输入A
,非门I2上的输入A
。在接线图中用红色圆圈/正方形表示:
线路self.B.connect([self.I1.A,self.A2.A])
对异或门的B
输入执行相同的操作,将其连接到I1
和A2
(上面的蓝色圆圈)
您在打印时看到的错误是因为它是Python 3中的一个函数。对于Python2.x,您只需打印“我想要打印的东西”我可以添加到@thegrinner答案中,即所有两个输入元素都有名为“A”和“B”的输入。一个输入元素具有名为“A”的输入。此外,您的电路具有外部输入“A”和“B”以及名为“C”的输出引脚。
因此,在线路
self.B.connect([self.I1.A,self.A2.A])
上,将异或门的外部输入引脚连接到内部门I1(逆变器)和A2(逻辑and,也连接到输入引脚“A”)的引脚“A”。我假设.A
表示门的输入,在这种情况下,到A1的一个输入与I2(导线A)的输入相同,A2的一个输入与I1的输入(导线B)相同。出现该错误的原因是python 2中不存在print
函数,它是在python 3中添加的,作为print
关键字的替换。您可能应该使用python 3来运行此代码。谢谢@thegrinner,但是他们如何将A和B重新连接到电路?;我看不到代码后面提到了A和B。因为A和B似乎不会在代码中再次调用。@Little代码通过将输入作为列表传入来同时连接两个管脚-因此,如果您只想将输入B转到not门,您应该使用self.B.connect([self.I1.A])
。