计算器程序编写_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概述 很多时候,我们需要在拨号方案中做某些业务逻辑的判断或 ...
随机推荐
- bootstrap--font-face问题
在做仿天猫项目时,预期 已经用cdn加载bootstrap,但是不显示文字图标:实际情况: 发现是引用bootstrap的版本导致的.4.0.0版本及以后的css源码中找不到@font-face.可以 ...
- 带输入提示的搜索框ajax请求
先放图 首先要引用的文件有: base.css https://www.cnblogs.com/chenyingying0/p/12363689.html jquery.js transition. ...
- Linux.CentOS下载
1.[CentOS]centos7 稳定使用版本,centos镜像的下载 - Angel挤一挤 - 博客园.html(https://www.cnblogs.com/sxdcgaq8080/p/106 ...
- PHP0019:PHP 图像验证码 、图像水印效果 、 生成缩约图
- 汇桔网被曝拖欠12月份工资至今,强制买产品,CEO称去年交易额超400亿
三言财经消息,近日有汇桔网员工爆料,汇桔网拖欠12月工资至今,通知延迟到4月才发放. 此外爆料还指出,"各种手法逼迫大家离开,员工要么继续忍受,要么主动离职,要么停薪留职.都不同意只能仲裁. ...
- 从HTML到node.js以及跨域问题的解决
废话不多说,直接上代码 网页客户端 <!DOCTYPE html> <html> <head> <meta http-equiv="Content- ...
- java设计模式学习笔记--接口隔离原则
接口隔离原则简述 客户端不应该依赖它不需要的接口,即一个类对另一个类的依赖应建立在最小的接口上 应用场景 如下UML图 类A通过接口Interface1依赖类B,类C通过接口Interface1依赖类 ...
- css3神奇的背景控制属性+使用颜色过渡实现漂亮的渐变效果
css3背景图像相关 兼容性:IE9+ background-clip 背景图片绘制区域 background-clip:border-box; 内容区 <!DOCTYPE html> ...
- mysql升级到5.7
最近遇到一个问题,执行下列语句会报错: CREATE TABLE `t_user` ( `USER_ID` bigint() NOT NULL AUTO_INCREMENT COMMENT '用户ID ...
- 【Android】java中调用JS的方法
最近因为学校换了新的教务系统,想做一个模拟登陆功能,发现登陆的账号和密码有一个js脚本来进行加密 整理了一下java中执行JS的方法 智强教务 账号 密码 加密方法 var keyStr = &quo ...