如何用python编写可使用cmd控制台传入参数的简单四则算式计算器

一、项目码云地址是:https://gitee.com/Steven_me/personal_project41656

二、PSP预计表:

 

三、简单的程序流程图: 

四、下面附上程序部分运行代码样式仅限参考(关键函数已将重要参数缺失或替换掉)

1.定义去除括号和返回运算值部分:

扫描二维码关注公众号,回复: 3988093 查看本文章
 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(**)
View Code

 

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]
View Code

 

3.定义单元算法处理乘除法:

1 def chengchu(~~):
2   if '*' in ~/~:
3     ~,~ = ~*~.split('*')
4     return float(~)*float(~) 
5   if '/' in ~/~:
6     ~, ~ = ~*~.split('/')
7     return float(~)/float(~)  
View Code

 

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))
View Code

 程序运行结果:

 

六、单元测试:

单元通过的结果:python程序因为使用过正则运算简化过,结果使用float进行转换,可以保留到小数点的后一位,可以转换符号,任意加减乘除都可以,下面是单元测试结果:

 

 

单元未通过的结果:因为最后输出的是float值,所以当有string值,就会报错。

 

 

七、最后的PSP表:

 

 

猜你喜欢

转载自www.cnblogs.com/Steven-Tim/p/9926324.html