原创的刷新行数记录的代码,从14行到13行,是一小步也是一大步!

支持带小括号,支持多个连续+-号,如-7.9/(-1.2-++--99.3/-4.44)*---(2998.654+-+-+-(+1.3-7.654/(-1.36-99.99)/-4.33213)*-2998.13-1.31)-7.423/(-1.4235-+99.53456/-4.4)

查看计算结果的方式为:print(calculator('str格式的算式'))

 import re
def calculator(s):
def two_num_cal(s): # 给定str格式的两个数字(可能是整数或小数)组成的四则运算表达式,返回float型的计算结果
if re.search(r'([+-]?\d+(?:\.\d+)?)([*/+-])([+-]?\d+(?:\.\d+)?)',s).group(2)=='*': return float(re.search(r'([+-]?\d+(?:\.\d+)?)([*/+-])([+-]?\d+(?:\.\d+)?)',s).group(1))*float(re.search(r'([+-]?\d+(?:\.\d+)?)([*/+-])([+-]?\d+(?:\.\d+)?)',s).group(3))
elif re.search(r'([+-]?\d+(?:\.\d+)?)([*/+-])([+-]?\d+(?:\.\d+)?)',s).group(2)=='/': return float(re.search(r'([+-]?\d+(?:\.\d+)?)([*/+-])([+-]?\d+(?:\.\d+)?)',s).group(1))/float(re.search(r'([+-]?\d+(?:\.\d+)?)([*/+-])([+-]?\d+(?:\.\d+)?)',s).group(3))
elif re.search(r'([+-]?\d+(?:\.\d+)?)([*/+-])([+-]?\d+(?:\.\d+)?)',s).group(2)=='+': return float(re.search(r'([+-]?\d+(?:\.\d+)?)([*/+-])([+-]?\d+(?:\.\d+)?)',s).group(1))+float(re.search(r'([+-]?\d+(?:\.\d+)?)([*/+-])([+-]?\d+(?:\.\d+)?)',s).group(3))
elif re.search(r'([+-]?\d+(?:\.\d+)?)([*/+-])([+-]?\d+(?:\.\d+)?)',s).group(2)=='-': return float(re.search(r'([+-]?\d+(?:\.\d+)?)([*/+-])([+-]?\d+(?:\.\d+)?)',s).group(1))-float(re.search(r'([+-]?\d+(?:\.\d+)?)([*/+-])([+-]?\d+(?:\.\d+)?)',s).group(3))
while not re.search(r'^[+-]?\d+(\.\d+)?$',s): # 当s不能转化为float型时,执行此while循环
while re.search('[+-]{2,}',s): s = s.replace('++', '+').replace('--', '+').replace('+-', '-').replace('-+', '-') # 循环替换表达式中多余的+-号
if re.search(r'[(][^()]+[)]', s): s = s[:re.search(r'[(][^()]+[)]', s).span()[0]] + str(calculator(re.search(r'[(][^()]+[)]', s).group()[1:len(re.search(r'[(][^()]+[)]', s).group())-1])) + s[re.search(r'[(][^()]+[)]', s).span()[1]:] # 匹配首个最内层小括号,递归计算其值,将结果替换至原字符串
if re.search(r'\d+(\.\d+)?[*/][+-]?\d+(\.\d+)?', s):s = s[:re.search(r'\d+(\.\d+)?[*/][+-]?\d+(\.\d+)?', s).span()[0]] + str(two_num_cal(re.search(r'\d+(\.\d+)?[*/][+-]?\d+(\.\d+)?', s).group())) + s[re.search(r'\d+(\.\d+)?[*/][+-]?\d+(\.\d+)?', s).span()[1]:] # 匹配首个乘法或除法,将结果替换至原字符串
if re.search(r'\d+(\.\d+)?[*/][+-]?\d+(\.\d+)?', s)==None and re.search(r'[+-]?(\d+(\.\d+)?[+-]\d+(\.\d+)?)', s): s = s[:re.search(r'[+-]?(\d+(\.\d+)?[+-]\d+(\.\d+)?)', s).span()[0]] + str(two_num_cal(re.search(r'[+-]?(\d+(\.\d+)?[+-]\d+(\.\d+)?)', s).group())) + s[re.search(r'[+-]?(\d+(\.\d+)?[+-]\d+(\.\d+)?)', s).span()[1]:] # 匹配首个加法或减法,将结果替换至原字符串
return int(float(s)) if int(float(s))==float(s) else float(s)#如果结果能转化成int就输出int,否则输出float

使用13行Python代码实现四则运算计算器函数的更多相关文章

  1. 一个 11 行 Python 代码实现的神经网络

    一个 11 行 Python 代码实现的神经网络 2015/12/02 · 实践项目 · 15 评论· 神经网络 分享到:18 本文由 伯乐在线 - 耶鲁怕冷 翻译,Namco 校稿.未经许可,禁止转 ...

  2. 200行Python代码实现2048

    200行Python代码实现2048 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌面 ...

  3. 40多行python代码开发一个区块链。

    40多行python代码开发一个区块链?可信吗?我们将通过Python 2动手开发实现一个迷你区块链来帮你真正理解区块链技术的核心原理.python开发区块链的源代码保存在Github. 尽管有人认为 ...

  4. 15行python代码,帮你理解令牌桶算法

    本文转载自: http://www.tuicool.com/articles/aEBNRnU   在网络中传输数据时,为了防止网络拥塞,需限制流出网络的流量,使流量以比较均匀的速度向外发送,令牌桶算法 ...

  5. 30行Python代码实现人脸检测

    参考OpenCV自带的例子,30行Python代码实现人脸检测,不得不说,Python这个语言的优势太明显了,几乎把所有复杂的细节都屏蔽了,虽然效率较差,不过在调用OpenCV的模块时,因为模块都是C ...

  6. 21行python代码实现拼写检查器

    引入 大家在使用谷歌或者百度搜索时,输入搜索内容时,谷歌总是能提供很好的拼写检查,比方你输入 speling,谷歌会立即返回 spelling. 前几天,看到http://norvig.com/spe ...

  7. vim中凝视多行python代码

    在vim中凝视多行python代码比較麻烦,主要由下面几种方法: (1)将须要凝视的代码以文档字符串的形式呈现 (2)将须要凝视的代码以函数的形式呈现 (3)使用vim自身快捷键 我们主要使用第三种方 ...

  8. 几行python代码解决相关词联想

    日常生活中经常会遇到相关词联想的问题,也就是说输入一个词汇,把相关的词汇查询出来,听起来这个做法也不是太难,但如何去积累那么多的词汇,再用好的算法将相关内容联系起来,本身还是不简单的.笔者认为最简单的 ...

  9. 10 行 Python 代码实现模糊查询/智能提示

    10 行 Python 代码实现模糊查询/智能提示   1.导语: 模糊匹配可以算是现代编辑器(如 Eclipse 等各种 IDE)的一个必备特性了,它所做的就是根据用户输入的部分内容,猜测用户想要的 ...

随机推荐

  1. 剑指Offer:面试题20:表示数值的字符串

    记录一下书上的写法.很整洁,每个函数的功能都显而易见.自己开始写的一堆if else语句像是一坨屎.另外注释的地方短路效应也要注意一下.总之这题还挺考察代码素质的(我这种就不存在什么素质..乱糟糟一团 ...

  2. hive导出数据到本地文件报错解决方法

    报错信息: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask. Unable to move so ...

  3. 【网易官方】极客战记(codecombat)攻略-地牢-Kithmaze 二度历险

    关卡连接: https://codecombat.163.com/play/level/the-second-kithmaze 很多人试过,但只有少数人能穿过此迷宫. 简介: 记住,你只需 一个 wh ...

  4. Django中的分页操作、form校验工具

    批量插入数据 后端: def fenye(request): book_list=[] for i in range(100): book_list.append(models.Book(title= ...

  5. Nuxt 环境搭建已经编写第一个Nuxt应用

    在学习Nuxt 之前 首先我们要有node ,然后因为Nuxt 是一个基于 Vue.js 的轻量级应用框架,所以在开发之前需要安装(后面纯属作者猜想并且猜想就是这个原因...) npm install ...

  6. Python 多任务(线程) day2 (1)

    结论:多线程全局变量是共享的 (03) 因为多线程一般是配合使用,如果不共享,那么就要等到一个线程执行完,再把变量传递给另一个线程,就变成单线程了 但是如果多个线程同时需要修改一个全局变量,就会出现资 ...

  7. Ansible - iventory

    概述 简单的 ansible 准备 ansible 安装 免密登录 约定 因为重点是 iventory, 所以只使用最简单的模块 ping 1. host-simple 概述 简单版 hosts 文件 ...

  8. Hadoop架构: HDFS中数据块的状态及其切换过程,GS与BGS

    该系列总览: Hadoop3.1.1架构体系——设计原理阐述与Client源码图文详解 : 总览 首先,我们要提出HDFS存储特点: 1.高容错 2.一个文件被切成块(新版本默认128MB一个块)在不 ...

  9. .NET基础拾遗(1)类型语法基础和内存管理基础【转】

    http://www.cnblogs.com/edisonchou/p/4787775.html Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串 ...

  10. ios开源

    a http://code.cocoachina.com b http://code4app.com c http://www.oschina.net/ios/codingList/ d github ...