不用栈的真值表程序

    离散作业用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('')
           


你可能感兴趣的:(python,exe,真值表)