离散作业用python写了个真值表的程序,越来越爱python的简单~
python里面内置了eval()方法,该函数将字符串str当成有效Python表达式来求值,并返回计算结果,那么就省去了解析表达式,等一大堆栈操作的代码。那么实际上最重要的部分eval()已经帮我们完成了,我们只需要定义输入的表达式规则,替换成python中的逻辑运算and,or,not即可。
因为要交exe的程序,需要将python脚本编译成exe,这里网上很多人推荐pyInstaller和py2exe,但是一个不支持python2.7及以上版本了貌似,另外一个各种下载失败 = = 又找了一个叫cxfreeze的程序,倒是很好用(福利链接:http://cx-freeze.sourceforge.net/),很小,安装后从命令行进入python的安装目录下Script文件夹,直接命令
cxfreeze 源路径 --target-dir 目标路径即可,这里会生成一些动态链接库等文件,如果只需要一个exe的程序再加一个参数--no-copy-deps即可。
运行发现程序一闪而过,google之最后加个raw_input()解决。关于乱码问题,推荐一篇博客:
http://www.jb51.net/article/26543.htm 参考解决的。
代码时间:(硬编码,丑陋无比,轻拍)
#-*- coding: UTF-8 -*- import re import sys import os #解决命令行乱码问题 reload(sys) sys.setdefaultencoding('gbk') print(sys.getdefaultencoding()) #验证输入是否正确 def validate(input_str): flag = True; for str in input_str: if(not (str in allow_str)): flag = False if(flag == False): print(u'您输入的表达式不合要求,请重新输入') return False return True #计算真值表达式 def compute(input_str, p, q, r): tmp_str = input_str.replace('p',p).replace('q',q).replace('s',r).replace('P',p).replace('Q',q).replace('S',r) print(' ' + p + ' ' + q + ' ' + r + ' ' + str(eval(tmp_str)) + ' \n') input_str = raw_input(u'请输入p、q、s表示的真值式, !表示非,&表示与,|表示或\n') origin_str = input_str allow_str =['p','q','s','!','&','|','P','Q','S','(',')','',' '] a = 0 b = 1 print (input_str) if(validate(input_str)): input_str = input_str.replace('!', 'not ').replace('&',' and ').replace('|',' or ') print(input_str) # print ('{} & {} is {}'.format(a, b, eval(input_str))) print (u'PQS真值表为\n') print (' P Q S '+origin_str+'\n') compute(input_str, '0', '0', '0') compute(input_str, '0', '0', '1') compute(input_str, '0', '1', '0') compute(input_str, '0', '1', '1') compute(input_str, '1', '0', '0') compute(input_str, '1', '0', '1') compute(input_str, '1', '1', '0') compute(input_str, '1', '1', '1') #print(eval('0 and 0')) raw_input('')