首页 > 代码库 > 将析取范式转化为主析取范式

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

 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\n16   my_input=raw_input( )17  18 def check(): #判断是否存在非法字符和查找所有字符并排序19   global my_input,all_letters20   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 \n28       return 029   all_letters = sorted(all_letters) # 字母按字典序排列30   return 131  32 def getValueSheet():  #获取真值表33   global my_input,all_letters,xiqu_result34   letter_len = len(all_letters) #所有的字母个数35   all_values = 2**letter_len    #产生的真值表的行数36   37   38   #判断是否存在非法命题,或者错误语法39   check_string = my_input40   for k in range(0,letter_len):41       check_string = check_string.replace(all_letters[k],0)42   try:43     result = eval(check_string) & 144   except Exception,e:45     return 046   47   48   print u\n真值表如图   \( ̄︶ ̄*\))\n49   print list(map(str,all_letters)),u50   for i in range(0,all_values):51     j=i52     value =http://www.mamicode.com/ []53     for k in range(0,letter_len):54        value.append(0)55     k=056     while j>0:57       value[k]=j%258       j = j/259       k +=160     value.reverse()61     this_parse = my_input62     for k in range(0,letter_len):63       this_parse = this_parse.replace(all_letters[k],str(value[k]))64     result = eval(this_parse) & 165     print list(map(str,value)), ,result66     if result ==1:67       xiqu_result.append(i)68   return 169 70 def printAll(): #打印命题公式,输出结果71   print u\n<-------------分割线------------>\n72   print u主析取范式为:73   print u,xiqu_result74   print u\nヽ(* ̄▽ ̄)ノ┻W┫75   76 def main():77   getInput()78   while check()!=1: #如果命题不合法,重新输入79     getInput()80   while getValueSheet()!=1: #如果语法错误,重新输入81     print u\n哼哼,你命题公式不正确,检查一下吧\n82     printAll()83     getInput()84     while check()!=1:85       getInput()86   printAll()87  88 main()89  

技术分享

 

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