首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyEDA:将文本字符串转换为DNF表单

PyEDA:将文本字符串转换为DNF表单
EN

Stack Overflow用户
提问于 2020-05-20 21:59:38
回答 1查看 134关注 0票数 0

我是Python的初学者。我正在尝试使用PyEDA将文本字符串转换为DNF形式。我的代码可以很好地处理这个字符串。

X&(X1|X2) -->或( And(X,X1),And(X,X2))

但是,当我尝试使用下面提到的字符串时,它不能按预期工作。有人能帮我找出哪里出了问题吗?

谢谢!

输入字符串:

代码语言:javascript
复制
X[0]&(X[1]|X[2])&X[3]|X[0]&X[3]

预期输出:

代码语言:javascript
复制
or(and(X[0],X[1],X[3]),and(X[0],X[2],X[3]), and(X[0],X[3])

代码:

代码语言:javascript
复制
import pyeda
from pyeda.inter import *

s = 'X[0]&(X[1]|X[2])&X[3]|X[0]&X[3]'

X=exprvars('x',4)

bs = expr(s)

expression = bs.to_dnf()

expression

当前输出:

代码语言:javascript
复制
And(X[0], X[3])
EN

回答 1

Stack Overflow用户

发布于 2020-05-20 23:24:21

to_dnf函数的文档明确指出它将:

返回析取范式的等价表达式。

在您的预期输出中,您声明您想要:

代码语言:javascript
复制
or(and(X[0],X[1],X[3]), and(X[0],X[2],X[3]), and(X[0],X[3])

然而,如果你检查这个表达式,你会发现top合取的最后一个操作数实际上总是比前两个操作数“更真实”。换句话说,如果最后一个操作数为真,那么前两个操作数也为真。这意味着整个or可以减少到第三个操作数。

因为to_dnf只需要返回一个等价的表达式,所以您不能责怪它执行这种缩减,并且结果是正确的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61915063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档