<p >前几天有个面试题目:计算字符串"1 + (5 - 2) 3",结果为10,不能用eval()。今天介绍一下用压栈的方法解一解这个题目,事实上我们的计算器原理也是如此。
<p ><p ><p ><p ><p ><span >2 总结算法<p >通过1中的分析我们大致可以整理出如下算法:<p ><p >以上分析我们抽象出几个函数:<p >(1)d栈时计算‘两个数字和运算符组成的算式’结果的函数。<p >(2)判断元素是数字还是运算符的函数。<p >(3)把算式处理成列表形式的函数。如:'-1-2((-2+3)+(-2/2))' 应该处理成:['-1','-','2','*','(','-2','+','3',')','/',')'] 。<p >(4)决策函数,决定应该是入栈,d栈运算,还是d栈丢弃。<p >(5)主函数,遍历算式列表,计算最终结果。<p ><span >3 两数运算函数<p >传入两个数字,一个运算符,根据运算符不同返回相应结果。即计算加减乘除:<p ><p ><span >4 判断是运算符还是数字<p >这里可能会想到isdigit()判断数字,但这个函数不能判断小数和负数。所以,我们自己写一个函数判断是否是运算符:<p ><p ><p ><span >5 格式化算式为列表<p >这个步骤需要处理的是区分横杠‘-’是代表负数还是减号。详细参见下例,注释已经十分明了:<p ><p ><span >6 决策d栈还是入栈<p >这个函数比较难,也比较抽象。比较连续两个运算符来判断是入栈还是d栈:<p ><p ><span >7 主函数<p >主函数负责遍历算式列表中的字符,决定入数字栈或运算符栈或d栈运算。<p ><p ><span >8 终极代码与测试<p ><p >我们看一下谷歌运算的结果:<p ><p >说明咱们算对了,不妨多测试一些算式看看。<p >本篇完。<p >装逼如风,常伴吾身!那么你学会了吗?<p > 总结以上是内存溢出为你收集整理的用Python写个计算器,虽然超级简单!但是适合在学妹面前装逼啊!全部内容,希望文章能够帮你解决用Python写个计算器,虽然超级简单!但是适合在学妹面前装逼啊!所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)