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

 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  

时间: 2024-08-15 13:00:14

将析取范式转化为主析取范式的相关文章

PatentTips - 在物联网中进行数据过滤的方法和装置

背景技术 [0001] 本发明涉及物联网,特别涉及在物联网进行数据过滤的方法和装置. [0002] 物联网是新一代信息技术的重要组成部分,特指物物相连的网络.具体地,物联网是指通过各种信息传感设备,如传感器.射频识别(RFID)技术.全球定位系统.红外感应器.激光扫描器.气体感应器等各种装置与技术,实时采集任何需要监控.连接.互动的物体或过程,采集其声.光.热.电.力学.化学.生物.位置等各种需要的信息,与互联网结合形成的一个巨大网络.物联网目的是实现物与物.物与人.所有的物品与网络的连接,以方

理解析取范式及合取范式的意义

初学离散数学的同学一定会对析取范式与合取范式的意义有所困惑.首先单就它的使用环境来分析,析取范式有一点想电路里的或门,合取范式有一点像电路里的与门.而且它们的真值表是一模一样的.我们就会纳闷,怎么不叫"或取范式"."与取范式",这样不是更加的明了直观吗? 当然它这么叫肯定是有它的道理在的.要不然,离散数学就不像离散数学了,而是像电路离散数学了. 离散数学,作为多门学科的一个核心指导学科.它有很强概括作用和实际作用.很多你很费劲才能搞懂的问题,用了离散数学,你就会发现

将命题转化为主析取命范式和主合取范式

1 #coding=utf-8 2 3 my_input = '' #输入字符串,即输入的原始命题 4 all_letters = [] #命题中所有的字母 5 my_parse = '' 6 hequ_result=[] 7 xiqu_result=[] 8 9 def getInput(): 10 global my_input 11 print u'\n 请输入任意一个命题,规则如下:' 12 print u" 1.'~'表示非" 13 print u" 2.'&

iOS开发之---将时间戳,转化成时间字符串。

1.将一个NSDate,转化成时间字符串. NSDate *date = [NSDate date]; NSDateFormatter *fmt = [[NSDateFormatter alloc] init]; fmt.dateFormat = @"yyyy-MM-dd"; NSString *dateStr = [fmt stringFromDate:date];

将华氏温度转换成摄氏温度或将摄氏温度转化成华氏温度。(需考虑多种不合法的情况尽量转化为合法的)

//华氏温度与摄氏温度转换,编写一个程序,将华氏温度转换成摄氏温度或将摄氏温度转化成华氏温度. //要求程序运行时从控制台读入温度值及单位,并输出另一种温度值及单位,例如:若用户输入27 C则 //程序输出 81F:若用户输入96 F,则程序输出36 C(其中C代表摄氏温度,F代表华氏温度),华氏温度与摄氏温度转化的公式为: //C = 5 (F - 32) / 9 //F = 9 C / 5 + 32 //要求输入的温度值是整数,输出的温度值也是四舍五入后的整数. package 第三天_练习

stringstream对基本类型之间的方便转化

stringstream利用流,可以对基本类型之间进行很方便的转化. 今天周赛标程里有,所以搜索了下,还觉得挺有用的,比sprintf好用,因为sprintf还要记住种种转换符号,烦都烦死了,这个利用流方便转化比较方便. 直接贴代码: #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<sstream> using namespace std

android时间格式的转化,String,Date,long

long time=System.currentTimeMillis(); System.out.println(time); SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); java.util.Date d1=new Date(time); String now=format.format(d1); System.out.println(now); long t = 0; try { java.

iview中使用Tag时进行数据的变化和实现将输入内容转化为标签输出数组

上代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>iview example</title> <link rel="stylesheet" type="text/css" href="http://unpkg.com/iview/dist/styles/iview.css"

java中获取当前系统时间,并与字符串相互转换格式,或者转化成秒数,天数等整数

转换成秒数 Date类有一个getTime()可以换回秒数,例如: public class DateToSecond { public static void main(String[] args) { Date date = new Date(System.currentTimeMillis()); System.out.println(date.getTime()); } } 与字符串格式相互转换 一. 获取当前系统时间和日期并格式化输出: import java.util.Date; i