计算器开发需求

  1. 实现加减乘除及拓号优先级解析
  2. 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式,运算后得出结果,结果必须与真实的计算器所得出的结果一致


#coding=utf-8
import redef sub_calc(formula):""" 计算一个加减乘除表达式的值"""flag = Truewhile flag:m = re.search('\d+\.?\d*[*/]-?\d+\.?\d*',formula) #先匹配乘除  举例: 5.12 * -123.12 ,  - 5.12 / -123.12if m:sub_mul_div = m.group()res = calc_multi_divd(sub_mul_div)formula = formula.replace(sub_mul_div,res)  # 将乘除表达式的结果替换,循环判断是否还有乘除表达式print "*" * 10,"乘除表达式:",formulaelse:print "*" * 10 ,"乘除计算完毕"flag = Falseprint "*" * 10,"子括号里面计算乘除后的表达式 ",formula result = calc_add_stract(formula) #计算加减法return result
def calc_multi_divd(formula):"""计算单个的乘除法表达式"""print "*" * 20,"单个的乘除法表达式",formulaf_list = re.split('[*/]',formula)print "*" * 20 ,"单个的乘除表达式列表",f_listif '*' in formula:res = float(f_list[0]) * float(f_list[1])elif '/' in formula:res = float(f_list[0]) / float(f_list[1])return str(res)
def calc_add_stract(formula):"""计算加减法,通过reduce 两两计算"""print "*" * 20,"没有处理正负号的加减表达式: ",formula#对符号进行处理formula = formula.replace('--','+')formula = formula.replace('++','+')formula = formula.replace('-+','-')formula = formula.replace('+-','-')print "*" * 20 ,"处理完正负号的加减表达式:",formula#对一个加减表达式,-变成+-,为了进行split成列表用于reduce计算formula = formula.replace('-','+-')formula_list = formula.split('+')print "*" * 20,"按加号分割的列表:",formula_list   #第一个数为负数,则列表第一个字段为空if formula_list[0] == '':formula_list = formula_list[1:]"""result = 0for i in formula_list:if '-' in i: stract_list = i.split('-')result = float(stract_list[0]) - float(stract_list[1]) + resultelse:result += float(i) """result = reduce(lambda x,y: float(x) + float(y),formula_list)print "*" * 20 ,"加减表达式的结果:" ,resultreturn str(result)
def calc(formula):flag = Truewhile flag:m = re.search('\([^()]*\)',formula)if m:print "*" * 5, "计算匹配到的括号表达式:",m.group()sub_formula = m.group().strip('()')res = sub_calc(sub_formula)      #先计算括号内的表达式formula = formula.replace(m.group(),res)  #将表达式计算出来的结果替换原括号,再一次循环判断是否还有括号else:flag = False print "*" * 5,"最终的去括号后的表达式:", formularesult = sub_calc(formula)return result        if __name__ == '__main__':formula = "1 - 2 * ( (60-30 +(-9-2-5-2*3-5/3-40*4/2-3/5+6*3) * (-9-2-5-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )"print "要计算的表达式:", formula #去掉所有的空格formula = re.sub('\s','',formula)print "去掉空格后的表达式",formulares = calc(formula)print "最终的结果:",res

转载于:https://www.cnblogs.com/mao3714/p/8057531.html

通过Python实现简单的计算器相关推荐

  1. Python编程学习——运用python编写简单的计算器程序

    简单计算器的程序实现 一.功能要求: 实现用户输入算式,其中包含加减乘除,括号以及空格的算式,并且优先计算最里的括号的算式,例如1+ 22*3 2-2 2*(2 3 1+34*33/4+55*(1 2 ...

  2. Python编写简单的计算器,用户输入两个数字和一个四则运算符,计算结果

    一.程序要求 (1)提示用户从键盘输入第一个数字 (2)提示用户从键盘输入第二个数字 (3)提示用户选择运算符 (4)打印结果 二.代码实现 a = int(input("请输入第一个数:& ...

  3. python实现简单的四则运算_Python实现简单的四则运算计算器

    一.算法 1.算法的主要思想就是将一个中缀表达式(Infix expression)转换成便于处理的后缀表达式(Postfix expression),然后借助于栈这个简单的数据结构,计算出表达式的结 ...

  4. pythongui做计算器_python 实现简单的计算器(gui界面)

    运行效果: 完整代码 from tkinter import * def click(num): global op op=op+str(num) iptext.set(op) def evaluat ...

  5. python计算器教程,用Python程序制作一个简单的计算器

    用Python程序制作一个简单的计算器 在此示例中,您将学习创建一个简单的计算器,该计算器可以根据用户的输入进行加,减,乘或除. 要理解此示例,您应该了解以下Python编程主题: 通过函数创建简单计 ...

  6. 笨办法学 Python · 续 练习 36:简单的计算器

    练习 36:简单的计算器 原文:Exercise 36: Simple Calculator 译者:飞龙 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 这个挑战是创建一个简单的代数计算器, ...

  7. [转载] 利用python制作简单计算器

    参考链接: Python程序制作一个简单的计算器 利用python的定义函数,加上if的条件语句进行编程 def add(x, y): """相加"" ...

  8. 项目一:使用python tkinter模块做简单的计算器

    小白第一次发博客,可能有很多问题,望指正! 讲的不是很详细,提供思路. 目录: 成果展示 代码说明 其他补充和参考资料 ------分割线-------- 1.成果展示 基本效果图:         ...

  9. python计算器简单代码_自学python之简单计算器

    前戏就不多啰嗦了,自爆一下基础,让想学python的朋友有个信心: 我是平面设计出身,现在主要从事的工作是前端狗,所以说我基础也是很弱的,套用一句世界杯期间的广告语: 我不是天生强大,我只是天生要强! ...

最新文章

  1. 获得 bootstrapTable行号index
  2. Kaldi内存泄漏问题排查
  3. 用友致远协同OA办公软件可以给外驻领导带来什么好处?
  4. 安卓笔记之配置第一个程序
  5. 编译原理之词法分析、语法分析、语义分析,【精炼总结】
  6. springboot 各种日志打印
  7. python打开软件输入消息_用Python编写一个私人助理程序,为我们起草电子邮件!...
  8. python导入表格后坐标轴刻度设置_Python-更改matplotlib中x或y轴上的“刻度频率”?...
  9. mysql 命令 示例,mysql语句大全
  10. ora-oracle,oracle:ora-01507错误
  11. jq写的项目如何部署到静态服务器_如何在阿里云服务器上部署一个Web项目
  12. Pascal 语言中的关键字及保留字
  13. nginx获取代理服务ip及客户端真实ip
  14. 【网易云课堂】产品运营学习
  15. mysql不配置环境变量可以吗_MySQL配置环境变量
  16. 微信王者登录太多服务器怎样删除,使用微信登录游戏或其他app时,可以使用不同的个人信息登录 选项已满 怎么删除?如图...
  17. 如何将mov格式的视频转换mp4?
  18. Cameralink转VGA接口转换器
  19. SLAM在机器人中的应用
  20. Spring事务报错Transaction synchronization is not active

热门文章

  1. memcached的缺点
  2. 2013 ACM/ICPC Asia Regional Online —— Warmup1 1005 Balls Rearrangement
  3. 百度编辑器图片上传功能解疑
  4. Kinect for Windows SDK开发初体验(二)操作Camera
  5. 正则表达式符号解释1
  6. 在css使用PHP/ASP代码
  7. Android Spinnert的使用
  8. 配置Ubuntu系统环境变量
  9. [示例] 使用 TStopwatch 计时
  10. [Vue.js]实战 -- 电商项目(八)