〖Demo〗-- 计算器
【计算器】
要求:
- 实现加减乘除及拓号优先级解析
- 用户输入 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〗-- 计算器相关推荐
- 用JAVA编写简易计算器界面
import javax.swing.*; public class Demo {/*** 计算器界面* @author M4ndy*/public static void main(String[] ...
- java junit Assert断言用法示例: Assert.assertEquals(期望的结果,运算的结果)
计算demo /*** 计算器类*/ public class Calculator {/*** 加法* @param a* @param b* @return*/public int add (in ...
- swift for循环_Swift | 实战一个简单的素数计算器demo
Swift 实战一个简单的素数计算器demo 本期我们来介绍如何用storyboard来实现一个素数计算器demo,storyboard可以明确地知道界面上的组件与代码的关系,而且比起仅用代码写要方便 ...
- Appium之开发计算器自动化测试脚本Demo
1.依赖包 <!-- https://mvnrepository.com/artifact/io.appium/java-client --><dependency><g ...
- 微信小程序--计算器demo实现
最近微信小程序很火,根据官网简单实现计算器功能,重在动手体验. 微信小程序官网:https://mp.weixin.qq.com/debug/wxadoc/dev/index.html 计算器功能:加 ...
- C语言基础之个税计算器demo实现
最近在学C语言基础,在导师的指导下,先准备写个个税薪资计算器.这是一个简单的C语言小demo.主要用到了C语言的函数,if选择语句. 程序的主要代码如下(可运行): #include <stdi ...
- 微信小程序:实现计算器-Demo+与发布(编程运算计算器)
微信小程序:实现计算器-Demo+与发布(编程运算计算器(可以微信小程序直接搜索)) 基本运算符与逻辑运算符,任意进制转换,上不封顶 微信小程序源代码下载:资源下载 使用了JS进制转换接口:JS实现万 ...
- 人品计算器demo,Intent传值Android
Intent传值 Sex package com.glsite.rpcalc;/*** @author glsite.com* @version $Rev$* @des ${TODO}* @updat ...
- 小程序--计算器demo
微信之父张小龙,从公布小程序到现在已经过去 好久了,在这里我就不多说什么了,我们直接直奔主题.今天给大家说的是微信小程序实现计算器,废话不多说,直接上代码. list.wxss代码: .content ...
最新文章
- Linux_Shell_ Map 的使用和遍历
- android文件缓存,并SD卡创建目录未能解决和bitmap内存溢出解决
- 关联本地git仓库与Github仓库
- python怎么控制小数点位数_谈谈关于Python里面小数点精度控制的问题
- java日志系统_Java日志系统
- docker swarm k8s比较_Docker 图形化管理又有更新了
- 数字城市杭州执法管理平台测试计划【软件测试与工程】
- 【整数转字符串】LeetCode 9. Palindrome Number
- C语言基本入门英语单词,C语言基本入门英语单词.doc
- python播放全网视频+打包成exe
- java 梯形校正_高清投影神器 联想YOGA平板2 Pro评测
- DarkGDK的杯具体验
- 如何评价兰州交通大学的软件工程专业?
- 如何区分PCA PCoA NMDS LDA t-SNE?
- zblog php 模板修改,ZBlog博客程序zblogPHP主题模板定制仿制修改
- 积分商城游戏化运营?积分游戏应该如何正确设置
- OpenCASCADE 读写STEP文件
- 交换机SVI配置的作用 思科/华为 网络工程
- 白盒测试哪种测试效果好_软件测试选择哪种测试方法比较好?
- mac下网络监测工具
热门文章
- android layout 渲染,java – 渲染android.support.design.widget.CoordinatorLayout的问题
- 宽带和流量是分开的吗_宽带
- php开发_图片验证码
- TThread类详解转
- 回顾2006年:网络通信十大事件
- 修改GDAL库支持RPC像方改正模型
- GDAL源码剖析(四)之命令行程序说明二
- iocp三层架构服务器模型
- 如何把平板的虚拟键盘关掉_想知道Win10电脑启动使用的是BIOS还是UEFI,这该如何分辨?...
- python代码生成器_Python金融应用之基金业绩评价体系构建