python中的电路,类不工作

时间:2014-08-30 19:33:31

标签: python

我正在使用Python电路模拟器,该代码可在以下位置找到:

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

我希望模拟示例中的电路:

enter image description here

所以按照这个例子,我做了一个这样的程序:

from logic import *
def main():
    a=And("a1")
    a.C.monitor=1
    a.A.set(1)
    a.B.set(1)
    n=Not("n1")
    a.C.connect(n.A)
    n.B.monitor=1
    a.A.set(0)

给我以下答案:

Connector a1-C set to 1
Connector a1-C set to 0
Connector n1-B set to True

对于我所看到的,并且因为变量监视器被“打开”,它首先输出1.1 = 1的结果,然后由于我对A输入所做的改变,它显示0.1 = 0的结果;最后一个答案是真值,因为没有门。

当我使用输入门时,我遇到了一个问题:

def main():
    a=And("a1")
    a.C.monitor=1
    a.A.set(0)
    a.B.set(0)
    n=Not("n1")
    a.C.connect(n.A)
    n.B.monitor=1
    a.B.set(1)

显示的唯一答案是:

Connector a1-C set to 0

它甚至没有评估非门,代码有什么问题?

由于

1 个答案:

答案 0 :(得分:0)

您永远不会更改NOT门的输入。由于模拟器仅监视状态变化 - 该门没有显示任何内容。

在"开始"在你的程序中,AND门的输出为0:

a=And("a1")
a.C.monitor=1
a.A.set(0)
a.B.set(0)

仅一个分支设置为1不会更改AND的输出。您必须将两个输入设置为1才能触发状态更改:

n=Not("n1")
n.B.monitor=1
a.C.connect(n.A)
a.B.set(1)
a.A.set(1)

显然,简单的模拟器不会监控"更改"由于设置了初始状态。

添加一堆print(n.B.value)表示仅在输入更改时才会触发状态更改。没有连接时:

n=Not("n1")
print(n.B.value)
n.B.monitor=1
print(n.B.value)
a.C.connect(n.A)
print(n.B.value)
a.B.set(1)
print(n.B.value)
a.A.set(1)
print(n.B.value)

显示:

None
None
None                      <-- after connect
None                      <-- after a.B.set(1)
Connector a1-C set to 1
Connector n1-B set to False
False                     <-- after a.A.set(1)