2014-08-30 38 views
0

我使用一個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 resuls,然後,我作出改變的原因到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

你永遠不改變你的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) 
+0

我明白,但與門連接到非門,所以我想,當我從與門 – Little 2014-08-30 19:44:29

+0

修改輸入發生變化我的錯誤:我以錯誤的順序讀取連接參數。檢查我的編輯。 – 2014-08-30 19:48:49