码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-09-18 07:46:53      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:

 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  

技术分享

 

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

标签:

原文地址:http://www.cnblogs.com/dlut-li/p/5880306.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!