一、项目码云地址是:https://gitee.com/Steven_me/personal_project41656
二、PSP预计表:
三、简单的程序流程图:
四、下面附上程序部分运行代码样式仅限参考(关键函数已将重要参数缺失或替换掉):
1.定义去除括号和返回运算值部分:
1 def quchu(**):
2 while 1:
3 ** = re.search(r‘\([^(]*?\)‘,**)
4 if **:
5 re_string = **.group()
6 re_sj = suanfa(re_string.strip(‘()‘))
7 ** = **.replace(re_string,str(**))
8 **
9 break
10 re_sj = suanfa(string)
11 return float(**)
2.定义主要算法部分,算法部分优先处理乘除法,如果条件不满足就算加减法(使用正则运算优化):
1 def suanfa(**):
2 while 1:
3 ** = re.search(r‘\d+\.*?\d*[*/]\-?\d+\.?\d*‘, **)
4 if **:
5 chengchu_string = **.group(456)
6 **r = chengchu(chengchu_string)
7 re_string = re_string.replace(chengchu_string, str(r**))
8 re_string =chulifuhao(re_string)
9 **
10 break
11 **m = re.findall(r‘[+-]?\d+\.?\d*‘, **)
12 if len(num) > 1:
13 my*** = 0
14 for i in num:
15 my*** += float(i)
16 return my***
17 else:
18 return ***[0]
3.定义单元算法处理乘除法:
1 def chengchu(~~):
2 if ‘*‘ in ~/~:
3 ~,~ = ~*~.split(‘*‘)
4 return float(~)*float(~)
5 if ‘/‘ in ~/~:
6 ~, ~ = ~*~.split(‘/‘)
7 return float(~)/float(~)
4.定义最后的处理符号:
因为需要满足cmd传参,而命令行的第0未是为文件路径,所以算式在第1位,最后使用sys.argv[1]方法进行命令行传参,计算器支持带括号的混合运算,程序的实际运行结果:
五、开发小结
遇到的困难:
1.前期版本的算法部分代码未经过正则运算优化导致臃肿,缓慢,甚至出错,不得已重构。。。。
2.需求分析出错,本来以为不用eval()可以很快写出来,没想到真的是有点想的太简单了。。。
3.没有做出正确的代码功能,导致在写代码的时候实现了“负优化”。。。
4.python的eval()函数真的好用!
得到的收获:
1.学习到了正则运算的好处,掌握并运用。
2.python真的是一门比较好用的编程语言,虽然它现在对数组类型规范的很严格。
3.python的eval()函数真的不错!
附上传说中的用eval()函数写的代码(仅供参考):
1 import sys 2 re = sys.argv[1] 3 print (eval(re))
程序运行结果:
六、单元测试:
单元通过的结果:python程序因为使用过正则运算简化过,结果使用float进行转换,可以保留到小数点的后一位,可以转换符号,任意加减乘除都可以,下面是单元测试结果:
单元未通过的结果:因为最后输出的是float值,所以当有string值,就会报错。
七、最后的PSP表:
如何用python编写可使用cmd控制台传入参数的简单四则算式计算器
原文:https://www.cnblogs.com/Steven-Tim/p/9926324.html