本实现主要用到正则匹配的知识和函数的知识点完成一个能实现简单的加减乘除的计算器的运算

import re#乘除运算
def numl_mod(args):resurt  = re.compile('(\d+\.?\d*)([*/])(\-?\d+\.?\d*)')#正则匹配,将匹配出来的结果赋给resurtwhile resurt.search(args):#while循环判断直到算出最终结果new_num = resurt.search(args)num = new_num.group()#取出原值赋给numnum1 = float(new_num.group(1))num2 = new_num.group(2)#取出来的是 * / 号,在if 处进行判断num3 = float(new_num.group(3))if num2 == '*':result = num1 * num3#返回 * 的结果elif num2 == '/':result = num1 / num3#返回 / 的结果args = args.replace(num, str(result), 1)#将计算的结果替换返回return args
# print(numl_mod("10*2/5"))# #加减运算
def poor_add(args):resurt = re.compile('(\-?\d+\.?\d*)([-+])(\-?\d+\.?\d*)')while resurt.search(args):new_num = resurt.search(args)num = new_num.group()num1 = float(new_num.group(1))num2 = new_num.group(2)num3 = float(new_num.group(3))if num2 == '-':result = num1 - num3elif num2 == '+':result = num1 + num3args = args.replace(num, str(result), 1)return args# print(poor_add("3-5+6"))#检查判断去括号# origin = "1-2*((60-30+(-9-2-5-2*3-5/3-40*4/2-3/5+6*3)*(-9-2-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*25))"
# origin = input("Enter number >>>>>")
#检测式子的合法性
def check(args):flag = True#默认标识位为真if re.findall("[a-zA-Z]",args):#检查式子的合法性,不能含有大小写字母print("error")flag = Falsereturn flag#检测运算
def format(args):#检测式子,将 含有空格/++/+-/--等进行替换,返回一个新的式子new_args1 = args.replace("++", "+")new_args2 = new_args1.replace("+-", "-")new_args3 = new_args2.replace("--", "+")new_args4 = new_args3.replace("-+", "-")new_args5 = new_args4.replace(" ", "")new_args6 = new_args5.replace("*+","*")new_args = new_args6.replace("/+","/")return new_argsprint("--------------")
print("欢迎使用计算机")
print("--------------")
#主代码块
#执行语句块
while True:choice = input("请选择 q/Q【退出】 y/Y 【执行】")if choice == "q" or choice == "Q":print("谢谢您的使用")breakorigin = input("Enter number >>>>>")if check(origin):new_origin = format(origin)while re.search("\(",new_origin):#匹配如果有括号,执行下面代码new_new_origin = re.search("\([^()]+\)",new_origin).group()#匹配出最里面的括号里的式子# print(new_new_origin)s = numl_mod(new_new_origin)# print(s)s1 = poor_add(s)s2 = s1[1:-1]new_origin = new_origin.replace(new_new_origin, s2, 1)# print(new_origin)# print(s2, type(s2))# breakelse:#括号执行完后执行的代码块resurt = numl_mod(new_origin)# print(resurt, "resurt")# print(resurt)new_resurt = poor_add(resurt)# a2 = a2[1:-1]print(new_resurt)#返回的最终结果,也就是我们要得到的最终计算结果

  

转载于:https://www.cnblogs.com/flash55/p/5874717.html

函数加正则实现简单计算器相关推荐

  1. php定义一个计算器函数,php学习之简单计算器实现代码

    PHP实现简单计算器 //单路分支 if(isset($_GET["sub"])) { $num1=true;//数字1是否为空标记 $num2=true;//数字2是否为空标记 ...

  2. 简单计算器 (实数计算 先乘除后加减)

    模拟简单运算器的工作.实现加减乘除计算表达式输出正确结果(保留 2 位小数). 输入格式: 输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数.遇等号"="说明输入结束 ...

  3. C#设计一个简单计算器,实现两个数的加、减、乘、除、求幂等计算

    设计一个简单计算器,实现两个数的加.减.乘.除.求幂等计算 using System; using System.Collections.Generic; using System.Component ...

  4. C#练习——窗体实现简单计算器,完成加,减,乘,除,取余,简单运算

    c# windows窗体练习:实现简单计算器,完成加,减,乘,除,取余,简单运算 //编写环境:vs2017 using System; using System.Collections.Generi ...

  5. 裸函数 __declspec(naked),C语言是怎么变成汇编的,用裸函数加汇编实现一个最简单的加法函数

    裸函数: 普通函数会自动生成实现堆栈提升.堆栈的缓存区建立.堆栈平衡和函数返回的汇编代码,裸函数不会自动生成任何代码,全部要自己手动写汇编代码. 裸函数定义:__declspec(naked) 加汇编 ...

  6. php自定义函数计算器,PHP实现简单计算器

    PHP简单计算器 table{ border:1px solid #CC9999; width:600px; } th{ background:#CCCCCC; } td{ background:#C ...

  7. 计算器软件C语言课程设计实验报告,c简单计算器实验报告_相关文章专题_写写帮文库...

    时间:2019-05-15 12:55:15 作者:admin 计算器实验报告 班级: 07计本(1)班 姓名: 王林 学号: 20706031047 指导老师: 韩静 一. 需求分析 (1)制作一个 ...

  8. LCD液晶显示的51单片机简单计算器

    LCD液晶显示的51单片机简单计算器 概述 方案 矩阵键盘输入映射与设计原理 软件设计 软件设计思路 软件代码 概述 LCD液晶显示的51单片机简单计算器可实现完成了两个范围在0到255的数加.减.乘 ...

  9. c++——简单计算器

    用C++编写简单计算器 限制: 1.只能使用分支语句与循环语句: 2.不能使用数组和自定义函数: (即把自己当作只学到分支语句和循环语句的初学者) 计算器要求: 1.可以进行简单的加.减.乘.除四则运 ...

最新文章

  1. 《统一沟通-微软-实战》-6-部署-2-中介服务器-1-定义中介服务器
  2. Windows——Modern Standby(现代待机) S0改Suspend to RAM(待机到内存)S3睡眠解决方案(以机械革命F1 i5-11300H为例)
  3. select2 属性标签整理
  4. EntityFramework Core 3.0 Preview
  5. 迁移学习 简而言之_简而言之Java.io:22个案例研究
  6. IIS的Windows集成身份验证总结
  7. C++ Primer学习笔记(一)
  8. 【linux系统编程】linux用户及权限管理
  9. Ubuntu 16.04下用Wine运行的软件出现方块的解决思路(应该是兼容现在所有平台的Wine碰到这个的问题)
  10. Latex中插入超链接/网址
  11. MySQL left join right join inner join 区别
  12. OpenEuler简介与安装
  13. nodejs爬虫抓取搜狗微信文章详解
  14. Mac上配置svn diff为kdiff3
  15. 大话设计模式笔记(二十四)の解释器模式
  16. Python非线性拟合笔记
  17. 转: 学习开源项目的若干建议(infoq)
  18. 千锋教育网络安全课程笔记
  19. 祝CSDN2021牛气冲天祝我也拨云散雾
  20. Java中正则表达式 .* 的含义

热门文章

  1. DP练习(初级):ZigZag
  2. IIS6上配置CGI有两个要点(转)
  3. 单片机C语言任何位置跳转到任何指定地址 -转
  4. L2-033 简单计算器 (25 分)-PAT 团体程序设计天梯赛 GPLT
  5. C语言二级考试都是从题库抽取吗,c語言二級考試題庫_全國計算機等級考試二級C語言的考試題目都是從《C語言題庫》裡面抽取的題目嗎_淘題吧...
  6. 联合索引会创建几个索引_联合索引在B+Tree上的存储结构及数据查找方式
  7. Python处理json字符串转化为字典
  8. Jmeter如何将上一个请求的结果作为下一个请求的参数——使用正则表达式提取器转载...
  9. sort numbers with three stacks
  10. 可用性测试的权衡之道