我从以下来源下载了一个名为logic.py的Python程序:
http://www.openbookproject.net/courses/python4fun/logic.html
通过阅读源代码,它似乎并不那么难以理解,但我得到的问题是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]) (**)
因为我看到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,但它在代码中的位置是什么?那是我迷失的部分。
由于
答案 0 :(得分:2)
两条线都显示一条输入,连接到两个独立门的输入。例如,这一行:
self.A.connect([self.A1.A, self.I2.A])
显示整体输入A
连接到两个输入:AND门A1上的输入A
和NOT门A
上的输入I2
。接线图中用红色圆圈/方形表示:
行self.B.connect([self.I1.A, self.A2.A])
对XOR门的B
输入执行相同的操作,将其连接到I1
和A2
(上面的蓝色圆圈)。
您在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")。