正则表达式应用:实现一个简单的计算器
实现一个简单的计算器,代码如下:
下面的函数用来检验数学表达式的合规性,当然此处只实现两个检验:(1)括号应该闭合 (2)不能出现字母
def check_expression(str):check_result = Trueif str.count('(') != str.count(')'):print('表达式有误:括号未闭合!请重新输入')check_result = Falseelif re.findall('[a-z]',str.lower()):print('表达式含有非法字符!请重新输入')check_result = Falsereturn check_result
下面的函数用来将表达式格式化:此处实现以下几个功能
def format_expression(str):str = str.replace('--','+')str = str.replace('+-','-')str = str.replace(' ', '') #用空字符代替空格return str
计算乘除的函数
def calc_mul_div(str1):mul_div_exp = '\d+\.?\d*[*/]-?\d+\.?\d*' #匹配一个带/*的表达式while re.findall(mul_div_exp,str1) != []: #当能找到这样的表达式时,进行以下计算search_exp=re.search(mul_div_exp,str1).group() #先匹配一个if search_exp.count('*') == 1: #如果表达式中带的是*x,y = search_exp.split('*') #则用*分割mul_result = str(float(x) * float(y)) #进行计算str1 = str1.replace(search_exp,mul_result) #用计算结果代替匹配的表达式str1 = format_expression(str1) #再次格式化else: #如果表达式中带的是不是*,那就必然是/x, y = search_exp.split('/')div_result = str(float(x) / float(y))str1 = str1.replace(search_exp, div_result)str1 = format_expression(str1)return str1
计算加减的函数
1 def calc_add_sub(str1): 2 add_sub_exp = '-?\d+\.?\d*[+-]-?\d+\.?\d*' 3 while re.findall(add_sub_exp,str1) != []: 4 search_exp = re.search(add_sub_exp,str1).group() 5 if search_exp.count('+') == 1: 6 x,y = search_exp.split('+') 7 add_result = str(float(x) + float(y)) 8 str1 = str1.replace(search_exp,add_result) 9 str1 = format_expression(str1) 10 else: 11 num = search_exp.split('-') 12 if len(num) == 3: #像-3-5这样的式子,用减号会分割出三个元素,所以要进行判断 13 sub_result = 0 14 for i in num: 15 if i != '': 16 sub_result -= float(i) 17 else: 18 x,y = search_exp.split('-') 19 sub_result = float(x) - float(y) 20 sub_result = str(sub_result) 21 str1 = str1.replace(search_exp,sub_result) 22 str1 = format_expression(str1) 23 return str1
下面是计算器工作流程
1 while True: 2 exp = input('请输入表达式:') 3 if check_expression(exp) == True: #检验表达式 4 format_expression(exp) #将表达式格式化 5 while exp.count('(') >0: #当有括号时,先找到最里层括号,再计算 6 inner_exp = re.search('\([^()]+\)',exp).group() #匹配最里层括号的表达式 7 mul_div_ret = calc_mul_div(inner_exp) #先算乘除 8 add_sub_ret = calc_add_sub(mul_div_ret) #再算加减 9 exp = format_expression(exp.replace(inner_exp,add_sub_ret[1:-1])) 10 else: #当没有括号时,直接计算 11 mul_div_ret = calc_mul_div(exp) # 先算乘除 12 add_sub_ret = calc_add_sub(mul_div_ret) # 再算加减 13 calc_ret = exp.replace(exp,add_sub_ret) 14 print('The result is:',calc_ret) 15 else: #如果没有通过检验,让用户重新输入 16 continue
转载于:https://www.cnblogs.com/Finance-IT-gao/p/10452665.html
正则表达式应用:实现一个简单的计算器相关推荐
- android实现计算器功能吗,利用Android实现一个简单的计算器功能
利用Android实现一个简单的计算器功能 发布时间:2020-11-20 16:25:01 来源:亿速云 阅读:90 作者:Leah 今天就跟大家聊聊有关利用Android实现一个简单的计算器功能, ...
- python123程序设计题说句心里话_用c++写一个简单的计算器程序
// 050305.cpp : 定义控制台应用程序的入口点. // // 050304.cpp : 定义控制台应用程序的入口点. // //四则运算 #include "stdafx.h&q ...
- linux qt小型计算器,Qt实现一个简单的计算器
Qt实现一个简单的计算器 作者:hackett 微信公众号:加班猿 一.UI界面版 运行效果:输入num1和num2选择+-*/点击计算即可 UI界面设计: 3个lineEdit(lineEditNu ...
- vue设置一个简单的计算器
vue设置一个简单的计算器 <div id="app"><input type="text" v-model="n1"&g ...
- Windows10 手机应用程序开发 - 3. 做一个简单的计算器界面
2019独角兽企业重金招聘Python工程师标准>>> 目标:完成一个简单的计算器的界面,暂时不做点击处理,主要联系UI布局. 步骤: 1.创建一个空的windows phone 项 ...
- python计算器教程,用Python程序制作一个简单的计算器
用Python程序制作一个简单的计算器 在此示例中,您将学习创建一个简单的计算器,该计算器可以根据用户的输入进行加,减,乘或除. 要理解此示例,您应该了解以下Python编程主题: 通过函数创建简单计 ...
- JS实现一个简单的计算器
使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除.效果如上: 第一步: 创建构建运算函数count(). 第二步: 获取两个输入框中的值和获取选择 ...
- 用C语言实现一个简单的计算器代码
#include <stdio.h> #include <math.h> #include <stdlib.h> //预处理指令 int main(void) {d ...
- php编写一个简单计算器程序,PHP做一个简单的计算器
本文为大家讲解通过分支循环知识及PHP的表单处理一个简单的计算器 首先看下效果 通过网页显示计算器样式 在网页样式中可以看出,有两个输入框Num1.Num2和一个下拉框Type 还有一个提交按钮 在输 ...
最新文章
- 给jdk写注释系列之jdk1.6容器(1):ArrayList源码解析
- 在11g中alter system set recyclebin = off 报错 recyclebin 参数在11g和10g中的区别
- 思科交换机ping得通 traceroute不通_网络中经常接触的Ping 一次性教你弄懂如何检测三层网络...
- [hls]m3u8视频如何处理成加密?
- OpenStack核心组件-glance镜像服务
- IT公司老板落水,各部门员工怎么救
- 串口光猫应用领域及技术参数详解
- 二叉树面试题:判断树是否为完全二叉树和求二叉树的镜像
- 第4章字符串的实现-勘误
- R 多变量数据预处理_超长文详解:C语言预处理命令
- HTTP权威指南-学习笔记(三)HTTP方法,状态码
- 线性插值改变图像尺寸_图像分割--gt;上采样的那些事
- 呜呜怎么才有下载的积分
- WPF 分享一种设置程序保存配置文件的方法
- html 条款前面的选项,HTML内部测试笔试题.doc
- 黑苹果音频卡顿_DXOMARK 公布无线音箱音质基准:苹果华为 Sonos 上榜
- [iuud8]ios不同版本下推送本地通知
- 能否被2整除引发的思考
- 计算机信息心得体会作文50字,考试感想作文50字5篇
- vue2.0生命周期数据共享