博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python实现简单的计算器功能
阅读量:5108 次
发布时间:2019-06-13

本文共 1788 字,大约阅读时间需要 5 分钟。

如想实现一个计算器的功能,输入格式为字符串,不能运用python里面的内置方法,出去简单的加减乘除,设计一个相对高级的计算器:

a = '1 - 2 * ( ( 6 0 -3 0  +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )' # 去掉所有的空格 # 加减乘除  括号 # 先算括号里的乘除,再算括号里的加减 主要利用正则表达式来实现,具体代码如下:
import rea = '1 - 2 * ( ( 6 0 -3 0  +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'res_brackets = re.compile(r'\([^\(\)]*\)') # 寻找带括号的(最内层的括号)express = a.replace(' ','')def dealwith(exp):    '''    deal with the formula    :param exp: del_brackets data    :return:    '''    exp = exp.replace('+-', '-')    exp = exp.replace('--', '+')    return expdef add(exp):    data = re.findall('\-?\d+\.?\d*',exp)    sum_data = 0    for i in data:        sum_data += float(i)    return str(sum_data)def multi_divi(exp):    '''    calculate multiplication&division    :param exp: res_multi_divi.search(del_brackets_data)    :return:    '''    res_multi_divi = re.compile(r'\-?\d+\.?\d*[\*\/]\-?\d+\.?\d*')    while res_multi_divi.search(exp):        data = res_multi_divi.search(exp).group()        if '*' in data:            element = data.split('*')            exp = exp.replace(data,str(float(element[0])*float(element[1])))        if '/' in data:            element = res_multi_divi.search(exp).group().split('/')            exp = exp.replace(data, str(float(element[0]) / float(element[1])))    else:        return dealwith(exp)def del_brackets(exp):    while res_brackets.search(exp):        brackets_data = res_brackets.search(exp).group()        del_brackets_data = add(multi_divi(re.sub('\(|\)', '', brackets_data)))        exp = dealwith(exp.replace(brackets_data,del_brackets_data))    else:        return add(multi_divi(exp))print(del_brackets(express))

  当然,可以用更简单的代码来实现,但是思路基本一样。

转载于:https://www.cnblogs.com/zz1314/p/10426442.html

你可能感兴趣的文章
java格式及运算符
查看>>
Android相对布局
查看>>
RichCopy: The Only File Copying Utility You’ll Ever Need
查看>>
delphi下webbrowser的应用
查看>>
Swift 统计项目中所有按钮的点击次数
查看>>
Django:视图
查看>>
Bye2018, Hi2019
查看>>
C#多线程学习(六) 互斥对象
查看>>
RedHat7 yum的配置
查看>>
笔记1---访问权限修饰符
查看>>
梯度下降法
查看>>
面向切面编程必须了解的概念
查看>>
CodeForces Powers of Two STL
查看>>
apply和call
查看>>
析构函数-复制构造函数-赋值操作符重载-默认构造函数<代码解析>
查看>>
计算最大公约数 Exercise05_14
查看>>
湖北省软件行业协会会员单位全名录(2014年的信息)
查看>>
PAT A+B for Polynomials[简单]
查看>>
0601 Spring2.0 发布会
查看>>
EFCore执行Sql语句的方法:FromSql与ExecuteSqlCommand
查看>>