【计算器】

要求:

  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) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式(不能调用eval等类似功能偷懒实现),运算后得出结果,结果必须与真实的计算器所得出的结果一致

  1 import re
  2
  3 def main():
  4
  5     a = ''.join(input('请输入需要计算的算式:').split())
  6
  7     while True:
  8         if '(' in a:
  9             ct = re.search(r'\(([^()]+)\)', a)
 10             if ct is not None:
 11                 b = ct.groups()[0]
 12                 c = count(b)
 13                 a = re.sub(r'\(([^()]+)\)', str(c), a, 1)
 14         else:
 15             c = count(a)
 16             print(c)
 17             break
 18
 19 def add_min(a):
 20     '''
 21     计算加减法
 22     :param:
 23     :return:
 24     '''
 25
 26     if '--' in a:
 27         a = a.replace('--', '+')
 28
 29     c = re.findall(r'-?\d+\.?\d*', a)
 30     ls = []
 31     for i in c:
 32         ls.append(float(i))
 33     rest = sum(ls)
 34     return rest
 35
 36
 37 def mul(a):
 38     '''
 39     计算剩数
 40     :param ct:
 41     :return:
 42     '''
 43
 44
 45     b = re.search(r'\d+\.?\d*(\*-?\d+\.?\d*)+', a)
 46     if b is not None:
 47         b = b.group()
 48         rest = 1
 49         c = re.findall(r'-?\d+\.?\d*', b)
 50         ls =[]
 51         for item in c:
 52             ls.append(float(item))
 53         for i1 in range(len(ls)):
 54             rest = rest * ls[i1]
 55         a = re.sub(r'\d+\.?\d*(\*-?\d+\.?\d*)+', str(rest), a, 1)
 56         return a
 57
 58
 59
 60 def div(a):
 61     '''
 62     计算出发
 63     :param a:
 64     :return:
 65     '''
 66
 67     b = re.search(r'\d+\.?\d*(\/-?\d+\.?\d*)+', a)
 68     if b is not None:
 69         b = b.group()
 70         c = re.findall(r'-?\d+\.?\d*', b)
 71         ls =[]
 72         for i in c:
 73             ls.append(float(i))
 74         rest = ls[0]
 75         for i1 in range(1,len(ls)):
 76             rest = rest / ls[i1]
 77         a = re.sub(r'\d+\.?\d*(\/-?\d+\.?\d*)+', str(rest), a, 1)
 78         return a
 79
 80
 81 def count(b):
 82     '''
 83     计算结果
 84     :return:
 85     '''
 86     while True:
 87         if '*' in b:
 88             c = b.split('*')
 89             if '/' in c[0]:
 90                 b = div(b)
 91             else:
 92                 b = mul(b)
 93         elif '/' in b:
 94             b = div(b)
 95
 96         elif '+' or '-' in b:
 97             b = add_min(b)
 98             return b
 99         else:
100             return b
101
102
103
104
105 main()

转载于:https://www.cnblogs.com/SHENGXIN/p/7502942.html

〖Demo〗-- 计算器相关推荐

  1. 用JAVA编写简易计算器界面

    import javax.swing.*; public class Demo {/*** 计算器界面* @author M4ndy*/public static void main(String[] ...

  2. java junit Assert断言用法示例: Assert.assertEquals(期望的结果,运算的结果)

    计算demo /*** 计算器类*/ public class Calculator {/*** 加法* @param a* @param b* @return*/public int add (in ...

  3. swift for循环_Swift | 实战一个简单的素数计算器demo

    Swift 实战一个简单的素数计算器demo 本期我们来介绍如何用storyboard来实现一个素数计算器demo,storyboard可以明确地知道界面上的组件与代码的关系,而且比起仅用代码写要方便 ...

  4. Appium之开发计算器自动化测试脚本Demo

    1.依赖包 <!-- https://mvnrepository.com/artifact/io.appium/java-client --><dependency><g ...

  5. 微信小程序--计算器demo实现

    最近微信小程序很火,根据官网简单实现计算器功能,重在动手体验. 微信小程序官网:https://mp.weixin.qq.com/debug/wxadoc/dev/index.html 计算器功能:加 ...

  6. C语言基础之个税计算器demo实现

    最近在学C语言基础,在导师的指导下,先准备写个个税薪资计算器.这是一个简单的C语言小demo.主要用到了C语言的函数,if选择语句. 程序的主要代码如下(可运行): #include <stdi ...

  7. 微信小程序:实现计算器-Demo+与发布(编程运算计算器)

    微信小程序:实现计算器-Demo+与发布(编程运算计算器(可以微信小程序直接搜索)) 基本运算符与逻辑运算符,任意进制转换,上不封顶 微信小程序源代码下载:资源下载 使用了JS进制转换接口:JS实现万 ...

  8. 人品计算器demo,Intent传值Android

    Intent传值 Sex package com.glsite.rpcalc;/*** @author glsite.com* @version $Rev$* @des ${TODO}* @updat ...

  9. 小程序--计算器demo

    微信之父张小龙,从公布小程序到现在已经过去 好久了,在这里我就不多说什么了,我们直接直奔主题.今天给大家说的是微信小程序实现计算器,废话不多说,直接上代码. list.wxss代码: .content ...

最新文章

  1. Linux_Shell_ Map 的使用和遍历
  2. android文件缓存,并SD卡创建目录未能解决和bitmap内存溢出解决
  3. 关联本地git仓库与Github仓库
  4. python怎么控制小数点位数_谈谈关于Python里面小数点精度控制的问题
  5. java日志系统_Java日志系统
  6. docker swarm k8s比较_Docker 图形化管理又有更新了
  7. 数字城市杭州执法管理平台测试计划【软件测试与工程】
  8. 【整数转字符串】LeetCode 9. Palindrome Number
  9. C语言基本入门英语单词,C语言基本入门英语单词.doc
  10. python播放全网视频+打包成exe
  11. java 梯形校正_高清投影神器 联想YOGA平板2 Pro评测
  12. DarkGDK的杯具体验
  13. 如何评价兰州交通大学的软件工程专业?
  14. 如何区分PCA PCoA NMDS LDA t-SNE?
  15. zblog php 模板修改,ZBlog博客程序zblogPHP主题模板定制仿制修改
  16. 积分商城游戏化运营?积分游戏应该如何正确设置
  17. OpenCASCADE 读写STEP文件
  18. 交换机SVI配置的作用 思科/华为 网络工程
  19. 白盒测试哪种测试效果好_软件测试选择哪种测试方法比较好?
  20. mac下网络监测工具

热门文章

  1. android layout 渲染,java – 渲染android.support.design.widget.CoordinatorLayout的问题
  2. 宽带和流量是分开的吗_宽带
  3. php开发_图片验证码
  4. TThread类详解转
  5. 回顾2006年:网络通信十大事件
  6. 修改GDAL库支持RPC像方改正模型
  7. GDAL源码剖析(四)之命令行程序说明二
  8. iocp三层架构服务器模型
  9. 如何把平板的虚拟键盘关掉_想知道Win10电脑启动使用的是BIOS还是UEFI,这该如何分辨?...
  10. python代码生成器_Python金融应用之基金业绩评价体系构建