Python中的电路门

时间:2014-04-08 15:39:52

标签: python

我从以下来源下载了一个名为logic.py的Python程序:

http://www.openbookproject.net/courses/python4fun/logic.html

通过阅读源代码,它似乎并不那么难以理解,但我得到的问题是XOR门的实现,我已经使用门标记了数字,我认为这是正确的,代码如下:

enter image description here

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])     (**)

因为我看到NOT门(I1)的输出连接到AND门(A1)的第二个输入,然后I2的输出连接到A2的第二个输入。最后,A1和A2的两个输出(都是C)连接为或门的输入。那么(*和**)的目的是什么?我不知道它们在电路中的位置。

任何提示?

PD。我已经使用Python 2.5和2.7测试了该程序;在这两种情况下,我在以下行中收到错误:

print(int(F3.Cout.value), end='')

它在test4bit函数中,所以我不得不擦除它;我说过,以防有人得到同样的错误。

更新:根据他们给我的解决方案,这条特殊的路线:

self.A.connect([self.A1.A, self.I2.A])

我想这是从AND门A1输入A作为输入A,但它在代码中的位置是什么?那是我迷失的部分。

由于

2 个答案:

答案 0 :(得分:2)

两条线都显示一条输入,连接到两个独立门的输入。例如,这一行:

self.A.connect([self.A1.A, self.I2.A])

显示整体输入A连接到两个输入:AND门A1上的输入A和NOT门A上的输入I2。接线图中用红色圆圈/方形表示:

Annotated wiring diagram

self.B.connect([self.I1.A, self.A2.A])对XOR门的B输入执行相同的操作,将其连接到I1A2(上面的蓝色圆圈)。


您在print中看到的错误是因为它是Python 3中的一个函数。对于Python 2.x,您只需执行print "Stuff I want printed"

答案 1 :(得分:0)

我可以在@thegrinner的答案中添加所有双输入元素的输入名称:" A"和" B"。并且一个输入元素具有名为" A"的输入。你的电路也有外部输入" A"和" B"和输出引脚名为" C"。 因此,在self.B.connect([self.I1.A, self.A2.A])行,您将XOR门的外部输入引脚连接到引脚" A"内部门I1(反相器)和A2(逻辑 - 以及输入引脚" A")。