Python中的电路门

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

我从以下来源下载了一个用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
        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])