实现一个简单的计算器,代码如下:

下面的函数用来检验数学表达式的合规性,当然此处只实现两个检验:(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

正则表达式应用:实现一个简单的计算器相关推荐

  1. android实现计算器功能吗,利用Android实现一个简单的计算器功能

    利用Android实现一个简单的计算器功能 发布时间:2020-11-20 16:25:01 来源:亿速云 阅读:90 作者:Leah 今天就跟大家聊聊有关利用Android实现一个简单的计算器功能, ...

  2. python123程序设计题说句心里话_用c++写一个简单的计算器程序

    // 050305.cpp : 定义控制台应用程序的入口点. // // 050304.cpp : 定义控制台应用程序的入口点. // //四则运算 #include "stdafx.h&q ...

  3. linux qt小型计算器,Qt实现一个简单的计算器

    Qt实现一个简单的计算器 作者:hackett 微信公众号:加班猿 一.UI界面版 运行效果:输入num1和num2选择+-*/点击计算即可 UI界面设计: 3个lineEdit(lineEditNu ...

  4. vue设置一个简单的计算器

    vue设置一个简单的计算器 <div id="app"><input type="text" v-model="n1"&g ...

  5. Windows10 手机应用程序开发 - 3. 做一个简单的计算器界面

    2019独角兽企业重金招聘Python工程师标准>>> 目标:完成一个简单的计算器的界面,暂时不做点击处理,主要联系UI布局. 步骤: 1.创建一个空的windows phone 项 ...

  6. python计算器教程,用Python程序制作一个简单的计算器

    用Python程序制作一个简单的计算器 在此示例中,您将学习创建一个简单的计算器,该计算器可以根据用户的输入进行加,减,乘或除. 要理解此示例,您应该了解以下Python编程主题: 通过函数创建简单计 ...

  7. JS实现一个简单的计算器

    使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除.效果如上: 第一步: 创建构建运算函数count(). 第二步: 获取两个输入框中的值和获取选择 ...

  8. 用C语言实现一个简单的计算器代码

    #include <stdio.h> #include <math.h> #include <stdlib.h> //预处理指令 int main(void) {d ...

  9. php编写一个简单计算器程序,PHP做一个简单的计算器

    本文为大家讲解通过分支循环知识及PHP的表单处理一个简单的计算器 首先看下效果 通过网页显示计算器样式 在网页样式中可以看出,有两个输入框Num1.Num2和一个下拉框Type 还有一个提交按钮 在输 ...

最新文章

  1. 给jdk写注释系列之jdk1.6容器(1):ArrayList源码解析
  2. 在11g中alter system set recyclebin = off 报错 recyclebin 参数在11g和10g中的区别
  3. 思科交换机ping得通 traceroute不通_网络中经常接触的Ping 一次性教你弄懂如何检测三层网络...
  4. [hls]m3u8视频如何处理成加密?
  5. OpenStack核心组件-glance镜像服务
  6. IT公司老板落水,各部门员工怎么救
  7. 串口光猫应用领域及技术参数详解
  8. 二叉树面试题:判断树是否为完全二叉树和求二叉树的镜像
  9. 第4章字符串的实现-勘误
  10. R 多变量数据预处理_超长文详解:C语言预处理命令
  11. HTTP权威指南-学习笔记(三)HTTP方法,状态码
  12. 线性插值改变图像尺寸_图像分割--gt;上采样的那些事
  13. 呜呜怎么才有下载的积分
  14. WPF 分享一种设置程序保存配置文件的方法
  15. html 条款前面的选项,HTML内部测试笔试题.doc
  16. 黑苹果音频卡顿_DXOMARK 公布无线音箱音质基准:苹果华为 Sonos 上榜
  17. [iuud8]ios不同版本下推送本地通知
  18. 能否被2整除引发的思考
  19. 计算机信息心得体会作文50字,考试感想作文50字5篇
  20. vue2.0生命周期数据共享

热门文章

  1. python 比例之差z假设检验_假设检验在数据分析中的应用
  2. linux常用关机命令及其区别-Shutdown halt reboot init
  3. 第2年,倒数第3天,1.5万票,感动!
  4. 小技巧!CSS 整块文本溢出省略特性探究
  5. 动图演示23个鲜为人知的VSCode快捷键
  6. 3 年前端面经和他在创业公司的成长历程
  7. 07_00_加载资源(Webpack Book)
  8. java如何获取一个double的小数位数
  9. JS引用类型 -- Array类型
  10. Word中如何设置图片与段落的间距为半行