我是python的新手,我正在用它做作业。
我在Debian 8上使用PyEDA和Python3。
我创建了一个名为:
的变量R = exprvars('r', n, n)
n = 4
,这给了我:
farray([[r[0,0], r[0,1], r[0,2], r[0,3]],
[r[1,0], r[1,1], r[1,2], r[1,3]],
[r[2,0], r[2,1], r[2,2], r[2,3]],
[r[3,0], r[3,1], r[3,2], r[3,3]]])
然后,在一些逻辑之后,我用它创建一个CNF布尔函数f和一个BDD:
f = expr2bdd(f)
然后,表达式:
U = f.satisfy_one()
给了我:
{r[2,1]: 0, r[3,2]: 1, r[1,1]: 1, r[0,2]: 0, r[0,3]: 1, r[2,2]: 0, r[2,3]: 0, r[3,3]: 0, r[3,1]: 0, r[1,2]: 0, r[0,1]: 0, r[1,0]: 0, r[2,0]: 1, r[3,0]: 0, r[0,0]: 0, r[1,3]: 0}
但这是我无法理解的: 我在期待
U[R[0,0]]
要返回0,而是它给我
KeyError: r[0,0]
有什么问题? R[0,0]
给了我r[0,0]
,字典确实将它作为密钥。
[编辑]
当我说R[0,0]
给我r[0,0]
时,这意味着我使用pdb打印它,在U = f.satisfy_one()
之后放置一个断点:
(Pdb) p R[0,0]
r[0,0]
答案 0 :(得分:1)
这需要更多细节。
怎么说,r[0,0]
给了我assert list(U.keys())[0] == R[2,1]
?你打印过吗?
尝试验证您是否正在寻找相同的
print(list(type(U.keys())[0])
print(type(R[2,1])
查看值
U
看看它们是否匹配,只有匹配时,你才能收集它。
另外,检查{{1}}本身是否有任何方法可以为您执行查询。