將析取範式轉化爲主析取範式

 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>='A'and 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  

相關文章
相關標籤/搜索