Python之实现一个简易计算器
2016-11-16 15:40
218 查看
自己动手写计算器
一、功能分析
用户输入一个类似这样 3*( 4+ 50 )-(( 100 + 40 )*5/2- 3*2* 2/4+9)*((( 3 + 4)-4)-4) 这样的表达式,假设表达式里面除了包含空格、'+'、'-'、'*'、'/'和括号再无其他特殊符号,然后自己动手写代码解析其中的表达式,实现加减乘除,最后得出的结果与真实的计算机所算的结果必须一致。二、所需的知识点
字符串的处理正则表达式的运用
函数递归
三、程序实现流程分析
用正则表达式处理字符串,只提取其中的数字和运算符,并转换成列表编写一个函数,处理没有括号的基本运算的基本表达式
再写一个函数递归处理带有括号的函数,先计算最内部括号中的表达式, 然后将最内部的括号替换为计算后的结果, 在递归外部一层的, 最后返回的就是所需的结果
四、具体实现过程
1.正则表达式处理用户输入字符串
这里我不会讲正则表达式具体的用法,要将的话都可以讲一本书了,我只讲本文用到的正则表达式。根据需求,我们需要提取出用户输入字符串中的数字和运算符到一个列表中,而空格将会被忽略掉,假设用户输入的表达式是 expression,我们可以写出下面的代码:2.不含括号的表达式的计算
为了后面迭代算出有括号的表达式,我们先写一个没有括号的表达式,比如说像这样一个表达式 '100.5+40*5/2-3*2*2/4+9',对于这样的表达式我们肯定是计算乘除,在计算加减,计算一个最小计算单元后,再将结果放回列表中不断循环,直到算出整个不带括号的表达式,实现的代码如下:3.带有括号表达式的递归计算
首先计算最里面一个括号里的表达式,调用fun函数计算出其值,将其结果代替其括号,然后不停的递归调用直到获取最后的结果。4.大功告成
到这里所有的模块都完成了,一个简单的计算器就实现了,下面附上完整的代码五、补充
最近深入的学一下正则表达式,发现上面写的计算器,比较复杂,所以就想用正则在经行改写一下,下面是改写后的代码,改写后去除注释不到40行代码,非常简洁,下面来看一下代码六、小结
看了上面的代码,是不是觉自己写代码还是好麻烦啊,那么Python有没有已经写好的函数帮我们完成这一功能了,作为追求简洁的python来说必须有,一行代码解决上面我们做的所有事,而且功能更加完善,那就是eval()函数,只需将要计算的表达式传递给eval函数即可算出结果。看到这里,是不是有点泪奔的感觉,白写了。其实不然,通过我们自己写,可以更好的理解实现的原理,并且加强自己写代码的能力。相关文章推荐
- Python之实现一个简易计算器
- 基于python的Tkinter实现一个简易计算器
- 基于python的Tkinter实现一个简易计算器
- 自己实现一个Python调试器
- python实现将一个数组逆序输出。
- 使用python多线程实现一个简单spider
- 使用python实现一个简单的学生信息管理系统
- 【python】简单实现一个模板引擎
- Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
- 基于python3.6连接mysql,实现一个银行转账的小功能(源码)
- 用python实现一个按需生成用于vim跳转的tags文件的小程序
- 转:使用python的Flask实现一个RESTful API服务器端
- Python 技巧(二) 最小堆实现以及维护一个大小为100的最小堆
- python调用HTMLTestRunner+unittest实现一次执行多个测试类,并生成与每个测试类对应的测试报告,并不像某些人写的每次只执行一个测试类,具体看代码,附上整个project代码
- Python实现一个服务器监听多个客户端请求
- Python实现日志自动记录功能(一个思路代码,详细可以自己扩展)
- 用shell写一个简易计算器,可以实现加、减、乘、除运算,假如脚本名字为1.sh,执行示例:./1.
- 如何用Python实现任一个英文的纯文本文件,统计其中的单词出现的个数?
- 用 python 实现一个多线程网页下载器
- 从头到尾用Python实现一个深度神经网络