将析取范式转化为主析取范式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将析取范式转化为主析取范式相关的知识,希望对你有一定的参考价值。

 1 #coding=utf-8
 2 
 3 my_input = ‘‘ #输入命题
 4 all_letters=[] #所有字母
 5 xiqu_result=[] #主析取结果
 6 
 7 def getInput():  #从键盘获取输入
 8   global my_input
 9   print u\n 请输入任意一个命题,规则如下:
10   print u" 1.‘~‘表示非"
11   print u" 2.‘&‘表示合取"
12   print u" 3.‘|‘表示析取 "
13   print u" 7.可以使用括号‘()‘"
14   print u" 8.优先级为‘()‘-->‘~‘-->‘&‘-->‘|‘"
15   print u  o((>ω< ))o\n
16   my_input=raw_input( )
17  
18 def check(): #判断是否存在非法字符和查找所有字符并排序
19   global my_input,all_letters
20   all_letters=[]
21   for c in my_input:
22     if c>=Aand c<=Z or c>=a and c<=z:
23       if c not in all_letters:
24         all_letters.append(c)
25     elif c not in [~,&,|,(,)]:
26       print u\n ( ̄ε(# ̄)☆╰╮( ̄▽ ̄///)\n     #存在非法字符返回警告
27       print u 非法字符知道吗, o(* ̄▽ ̄*)o \n
28       return 0
29   all_letters = sorted(all_letters) # 字母按字典序排列
30   return 1
31  
32 def getValueSheet():  #获取真值表
33   global my_input,all_letters,xiqu_result
34   letter_len = len(all_letters) #所有的字母个数
35   all_values = 2**letter_len    #产生的真值表的行数
36   
37   
38   #判断是否存在非法命题,或者错误语法
39   check_string = my_input
40   for k in range(0,letter_len):
41       check_string = check_string.replace(all_letters[k],0)
42   try:
43     result = eval(check_string) & 1
44   except Exception,e:
45     return 0
46   
47   
48   print u\n真值表如图   \( ̄︶ ̄*\))\n
49   print list(map(str,all_letters)),u
50   for i in range(0,all_values):
51     j=i
52     value = []
53     for k in range(0,letter_len):
54        value.append(0)
55     k=0
56     while j>0:
57       value[k]=j%2
58       j = j/2
59       k +=1
60     value.reverse()
61     this_parse = my_input
62     for k in range(0,letter_len):
63       this_parse = this_parse.replace(all_letters[k],str(value[k]))
64     result = eval(this_parse) & 1
65     print list(map(str,value)), ,result
66     if result ==1:
67       xiqu_result.append(i)
68   return 1
69 
70 def printAll(): #打印命题公式,输出结果
71   print u\n<-------------分割线------------>\n
72   print u主析取范式为:
73   print u,xiqu_result
74   print u\nヽ(* ̄▽ ̄)ノ┻W┫
75   
76 def main():
77   getInput()
78   while check()!=1: #如果命题不合法,重新输入
79     getInput()
80   while getValueSheet()!=1: #如果语法错误,重新输入
81     print u\n哼哼,你命题公式不正确,检查一下吧\n
82     printAll()
83     getInput()
84     while check()!=1:
85       getInput()
86   printAll()
87  
88 main()
89  

技术分享

 

以上是关于将析取范式转化为主析取范式的主要内容,如果未能解决你的问题,请参考以下文章

枚举真值表生成主合取范式 主析取范式

为啥用析取范式表达代码很重要?

利用真值表法求取主析取范式以及主合取范式的实现(C++)

数理逻辑命题逻辑的等值演算与推理演算 ( 命题逻辑 | 等值演算 | 主合取 ( 析取 ) 范式 | 推理演算 ) ★★

Python(离散数学实验)求不超过4个命题变元任意公式的主合取范式主析取范式真值表和成真赋值

以合取范式书写条件