我的代码目的是创建附加图片中的这个真值表,但它不能处理代码。此代码的输出与真值表
的结果不同真相表:
它需要与图片中的真值表相同。我希望有人能弄清楚我的错误!
def cnf(a, b, c, d):
return [
[a, b, c, d], #2
[not a, not b, not c, d], #3
[not a, not b, c, not d], #4
[ not a, not b, c, d], #5555
[a, not b, c, d], #6
[a, not b, c, not d], #777 [
[a, not b, not c, d], #8
[a, not b, c, d], #1 [a, not b, not c, not d],
]
def dnf(a, b, c, d):
return [
[not a, b, c, d], #1
[ a, not b, not c, d],
[a, not b , not c, not d], #7777 [a, not b , c, not d],
[ not a, b , not c, not d], #6
[a, b, not c, not d], #5
[ a, b , not c, d], #4
[a, b , c, not d], #3
[not a, not b , not c, not d], #2
]
答案 0 :(得分:1)
因此,对应于该真值表的Karnaugh map是:
C'D' C'D CD CD' A'B' 1 0 0 0 A'B 1 0 1 0 AB 0 0 1 0 AB' 1 1 1 1
撇号'
意味着否定。
您可以在第一列和第三列中对最后一行和一对进行分组。因此,对应于您的真值表的逻辑表达式是
现在您已经了解了真值表的逻辑表达式,应该可以通过这样一个简单的函数将其打印出来:
def is_it_true(a, b, c, d):
return (a and not b or not a and not c and not d or b and c and d)
答案 1 :(得分:1)
DNF
minterms
直接与真值表的T
行相关
而CNF
maxterms
(clauses
)对应F
行。
DNF CNF
A B C D f A B C D A B C D
15 T T T T T T T T T a b c d
14 T T T F F F F F T !a !b !c d
13 T T F T F F F T F !a !b c !d
12 T T F F F F F T T !a !b c d
11 T F T T T T F T T a !b c d
10 T F T F T T F T F a !b c !d
09 T F F T T T F F T a !b !c d
08 T F F F T T F F F a !b !c !d
07 F T T T T F T T T !a b c d
06 F T T F F T F F T a !b !c d
05 F T F T F T F T F a !b c !d
04 F T F F T F T F F !a b !c !d
03 F F T T F T T F F a b !c !d
02 F F T F F T T F T a b !c d
01 F F F T F T T T F a b c !d
00 F F F F T F F F F !a !b !c !d
对于DNF
,T
行会转换为minterms
。
每个输入T
产生一个非反转输入,而F
产生反转输入。
DNF
minterm是输入的逻辑AND
。
对于CNF
,F
行对应clauses
或maxterms
。
每个输入T
产生反向输入,而F
产生非反转输入。
CNF
maxterm
/ clause
是输入的逻辑OR
。每个输入都必须反转
WRT。到真值表行以防止F
输出。