计算器程序编写_python
一、计算一串字符串的最终值,相当于eval函数功能:
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
#Author:chenxz
import re
def check(s): #检查字符串函数是否合法
s=s.replace(' ','').strip() #去除空格
if len(re.findall('\(',s)) != len(re.findall('\)',s)):#判断括号是否成对
print("括号不匹配")
exit()
if re.search('(\([*+/])|([*+\-/]\))',s): #判断是否含(*/+ 或+-*/) 这种不合法的
print('格式不正确')
exit()
return s def count_last(sub_str): #处理n[+-*/]mg格式计算值
sub_str=re.sub('\+-','-',sub_str) #格式化
sub_str=re.sub('--', '+', sub_str) #格式化
if '*' in sub_str: #计算乘
sub_list=sub_str.split('*')
res=str(float(sub_list[0])*float(sub_list[1]))
elif '/' in sub_str: #计算除
sub_list=sub_str.split('/')
res=str(float(sub_list[0])/float(sub_list[1]))
elif '+' in sub_str: #计算加
sub_list=sub_str.split('+')
res=str(float(sub_list[0])+float(sub_list[1]))
elif '-' in sub_str: #计算减
sub_list=sub_str.split('-')
res=str(float(sub_list[0])-float(sub_list[1]))
return res def count_mid(cal_str): #处理类似(1+3*5)的字符串中间函数
cal_str = cal_str[1:-1] #去除括号
while re.search('\d+\.?\d{0,}[*/]-?\d+\.?\d{0,}',cal_str): #循环匹配乘除
sub_str=re.search('\d+\.?\d{0,}[*/]-?\d+\.?\d{0,}',cal_str).group()
res=count_last(sub_str)#子函数计算n[*/]m返回对应值
cal_str=cal_str.replace(sub_str,res)#对应值替代
while re.search('\d+\.?\d{0,}[+\-]-?\d+\.?\d{0,}',cal_str):#循环匹配加减
sub_str=re.search('\d+\.?\d{0,}[+\-]-?\d+\.?\d{0,}',cal_str).group()
res=count_last(sub_str)#子函数计算n[+-]m返回对应值
cal_str=cal_str.replace(sub_str,res) #对应值替代
return cal_str s= '1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'
s=check(s) #检查输入的合法性
while re.search('\([^()]+\)',s): #循环将最里面的括号找出来
cal_str=re.search('\([^()]+\)',s).group()
res=count_mid(cal_str) #最里面的括号和表达式,通过处理函数返回对应值
s=s.replace(cal_str,res) #对应值替代
s=count_mid('(%s)'%s) #去除完括号之后的字符串,加上括号给count_mid函数能自动计算除结果
print(s) #2776677.4952380955
计算器程序编写_python的更多相关文章
- 纯javascript代码编写计算器程序
今天来分享一下用纯javascript代码编写的一个计算器程序,很多行业都能用到这个程序,例如做装修预算.贷款利率等等. 首先来看一下完成后的效果: 具体代码如下:(关注我的博客,及时获取最新WEB前 ...
- 逆向project第004篇:令计算器程序显示汉字(下)
一.前言 钩子技术是一项很有有用价值的技术.在Windows下HOOK技术的方法比較多,使用比較灵活,常见的应用层的HOOK方法有Inline HOOK(详见<反病毒攻防研究第012篇:利用In ...
- 20151009 C# 第一篇 程序编写规范
20151009 程序编写规范 1. 代码书写规则: 1).尽量使用接口,然后使用类实现接口. 2).关键语句写注释 3).避免写超过5个参数的方法,如果要传递多个参数,则使用结构 4).避免代码量过 ...
- 基于DCMTK的DICOM相关程序编写攻略
2008年09月10日 星期三 15:35 基于DCMTK的DICOM相关程序编写攻略 前言: 由于现在的医学影像设备的图像存储和传输正在逐渐向DICOM标准靠拢,在我们进行医学图像处理的过程中,经常 ...
- 单利 复利计算器程序1.0 2.0 3.0 [ 合 ] 之 WEB
对单复利计算器程序进行改进 更新为网页版的. 界面不太美观 请谅解 由于时间问题暂未完善好! 计算部分的主要源代码:
- Android Camera 相机程序编写
Android Camera 相机程序编写 要自己写一个相机应用直接使用相机硬件,首先应用需要一个权限设置,在AndroidManifest.xml中加上使用设备相机的权限: <uses-per ...
- HTML5 canvas绘制雪花飘落动画(需求分析、知识点、程序编写分布详解)
看到网上很多展示html5雪花飞动的效果,确实非常引人入胜,我相信大家也跟我一样看着心动的同时,也很好奇,想研究下代码如何实现:虽然哦很多地方也能下载这些源码,不过也不知道别人制作此类动画时的思路及难 ...
- 从mina中学习超时程序编写
从mina中学习超时程序编写 在很多情况下,程序需要使用计时器定,在指定的时间内检查连接过期.例如,要实现一个mqtt服务,为了保证QOS,在服务端发送消息后,需要等待客户端的ack,确保客户端接收到 ...
- 基于Asterisk的VoIP开发指南——(2)Asterisk AGI程序编写指南
原文:基于Asterisk的VoIP开发指南--(2)Asterisk AGI程序编写指南 5. Asterisk AGI程序编写指南 5.1概述 很多时候,我们需要在拨号方案中做某些业务逻辑的判断或 ...
随机推荐
- java设计模式学习笔记--开闭原则
基本介绍 1.开闭(ocp)原则时编程中最基础.最重要的设计原则 2.一个软件实体如类.木块和函数应该对扩展开放,对修改关闭.用抽象构建框架,用实现扩展细节.即对提供方开放,对使用方关闭. 3.当软件 ...
- cesium1.63.1api版本贴地贴模型量算工具效果(附源码下载)
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材.不少 ...
- 2020年如何成为一个高级AVA架构师(50W~100W年薪)
2020年如何成为一个高级AVA架构师(50W~100W年薪)
- 错误:EfficientDet网络出现"No boxes to NMS"并且mAP:0.0的解决方案
近日,在使用谷歌新推出来的一个网络EfficientDet进行目标检测训练自己的数据集的时候,出现了如下错误: 其中项目开源地址是:https://github.com/toandaominh1997 ...
- pip 自己的源 搭建
1 安装工具 pip install pip2pi 2 下载 所需要的包 pip2tgz /application/nginx/html/yum/python/ apscheduler (172 ...
- 使用CSV Data Set Config配置原件,参数化数据
对接口数据的参数化方式大概有三种方式,1:jmeter内置函数:2:借助CSV Data Set Config配置原件:3:jdbc连接数据库,使用数据表字段 此处主要讲第二种:借助CSV Data ...
- M5310-A 版本
模块外表 型号 BAND M5310-A MBRH0S04 +NB ...
- MongoDB高可用架构集群管理(一)
MongoDB数据库核心的两个特点:第一个特点是副本集的自动切换,保证数据的高可靠.服务的高可用:第二个特点是自动分片.服务的横向扩展能力. (一)副本集架构 MongoDB的副本集是一组保持相同数据 ...
- c#学习心得(2)
1.foreach与IEnumerable和IEnumerator的结合使用????? using System; using System.Collections; class Program { ...
- MySQL优化、锁
1. MySQL优化-查看执行记录 MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化. 使用ex ...