我正在使用Python电路模拟器,该代码可在以下位置找到:
http://www.openbookproject.net/courses/python4fun/logic.html
我希望模拟示例中的电路:
所以按照这个例子,我做了一个这样的程序:
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
它甚至没有评估非门,代码有什么问题?
由于
答案 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)