CNF / DNF的可变真值表

时间:2018-02-01 23:35:38

标签: python python-3.x boolean-logic boolean-expression boolean-operations

我的代码目的是创建附加图片中的这个真值表,但它不能处理代码。此代码的输出与真值表

的结果不同

真相表:

The truth table image press here

它需要与图片中的真值表相同。我希望有人能弄清楚我的错误!

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
    ]

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

撇号'意味着否定。

您可以在第一列和第三列中对最后一行和一对进行分组。因此,对应于您的真值表的逻辑表达式是

2]

现在您已经了解了真值表的逻辑表达式,应该可以通过这样一个简单的函数将其打印出来:

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 maxtermsclauses)对应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

对于DNFT行会转换为minterms。 每个输入T产生一个非反转输入,而F产生反转输入。 DNF minterm是输入的逻辑AND

对于CNFF行对应clausesmaxterms。 每个输入T产生反向输入,而F产生非反转输入。 CNF maxterm / clause是输入的逻辑OR。每个输入都必须反转 WRT。到真值表行以防止F输出。