#s = '1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'
#第一步 分步实现 ("2-1*-22+3-10/-5")
# 1. 实现一个乘除法 两两相乘/相除
# 2. 实现一个加减法 两两相加/相减
# 3. 把计算结果 替换原来的表达式
# 4. 替换完成后 处理整体表达式的符号
# 5. 五个函数: 计算atom_cal() format() mul_div() add_sub() cal()
#第二步 去括号 计算括号内的 import re def format(exp):
exp = exp.replace("-+","-")
exp = exp.replace("+-","-")
exp = exp.replace("--","+")
exp = exp.replace("++","+")
return exp def atom_cal(exp):
if "*" in exp:
a,b = exp.split("*")
return str(float(a) * float(b)) elif "/" in exp:
a, b = exp.split("/")
return str(float(a) / float(b)) def mul_div(exp):
while True:
ret = re.search("\d+(\.\d+)?[*/]-?\d+(\.\d+)?",exp) #拿到乘除表达式 #从左到右拿结果,拿不到返回None
if ret:
atom_exp = ret.group()
res = atom_cal(atom_exp)
# print(atom_exp,res)
exp = exp.replace(atom_exp,res)
else:
return exp def add_sub(exp):
ret = re.findall("[+-]?\d+(?:\.\d+)?", exp) # 取出数字和数字前面的符号 findall返回的是一个列表 查找所有项
exp_sum = 0
for i in ret:
exp_sum = exp_sum + float(i) # 取出来的是字符串
return exp_sum def cal(exp):
exp = mul_div(exp)
exp = format(exp)
exp_sum = add_sub(exp)
return exp_sum def main(exp):
exp = exp.replace(" ","")
while True:
ret = re.search("\([^()]+\)",exp)
if ret:
inner_bracket = ret.group()
res = str(cal(inner_bracket))
exp = exp.replace(inner_bracket,res)
exp = format(exp)
else:break
return cal(exp)
s = '1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'
ret = main(s)
print(ret)

python 实现一个计算器功能的更多相关文章

  1. 如何用Python写一个计算器软件 附带效果图

    该计算器使用Python  tkinter模块开发 效果如下图 import tkinter #导入tkinter模块 root = tkinter.Tk() root.minsize(280,500 ...

  2. Python+Tkinter 实现计算器功能

    #=================================================================================== import tkinter ...

  3. 用python编写一个计算器

    # 1 - 2 * ((60-30 +(-40.0/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2)))# 通过Pyt ...

  4. C# 一个计算器功能实现引发的思考

    一.需求 计算器功能需求,这个众所周知,很明确了. 二.步骤分析 1)初级实现计算器 static int Calculator(int a,int b,string str) { switch(st ...

  5. python造一个计算器

    正则表达式之简易计算器 关注公众号"轻松学编程"了解更多. 需求:使用正则表达式完成一个简易计算器. 功能:能够计算简单的表达式. 如:12((1+2)/(2+3)+1)*5.1- ...

  6. Python定做一个计算器,小而美哒~

    使用qt designer ,按装anaconda后,在如下路径找到: conda3.05\Library\bin designer.exe文件,双击启动: ​ 创建窗体,命名为XiaoDing,整个 ...

  7. 用python实现一个计算器

    import re def atom_cal(exp): # 计算乘除法 if '*' in exp: a,b = exp.split('*') return str(float(a) * float ...

  8. 完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能

    #!/bin/usr/env python#coding=utf-8'''完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能'''try: a=int(raw_input(" ...

  9. 利用PYTHON设计计算器功能

    通过利用PYTHON 设计处理计算器的功能如: 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 ))- (-4*3 ...

随机推荐

  1. IIS IP地址与端口

    IP地址 全部未分配,则以下所有IP对应端口都可以访问网站指定IP,则只有指定IP可以访问网站   1 端口 可以在建立网站之后继续添加端口,则所有添加的端口均可以访问   2   3

  2. String 源码分析

    Java 源码阅读 - String String 类型看起来简单,实际上背后的复杂性基本可以涵盖了整个 Java 设计,涉及到设计模式(不可变对象).缓存(String Pool 的理念).JVM( ...

  3. ApplicationCommands用于表示应用程序程序员经常遇到的常见命令,类似于ctrl+c

    在WPF中,许多控件都自动集成了固有的命令集.比如文本框TextBox就提供了复制(Copy),粘贴(Paste),裁切(Cut),撤消(Undo)和重做(Redo)命令等. WPF提供常用应用程序所 ...

  4. WPF媒体资源和图片资源寻址方式的杂谈

    WPF提供一个封装和存取资源(resource)的机制,我们可将资源建立在应用程序的不同范围上.WPF中,资源定义的位置决定了该资源的可用范围.资源可以定义在如下范围中: (1)控件级:此时,资源只能 ...

  5. win10应用程序添加到开机启动项的两种解决办法

    原文 win10应用程序添加到开机启动项的两种解决办法 在windows10系统中,如果想让应用程序在开机之后自动运行起来,可以怎么做呢? 方法一: 1.首先创建应用程序的快捷方式 找到自己想加入开机 ...

  6. ubuntu 16.04 安装 openjdk 1.7

    由于编译Android源码需要openjdk1.7.X版本.ubuntu 16.04自带openjdk为1.8.X版本. sudo apt-get install openjdk-7-jre 或者su ...

  7. Android零基础入门第38节:初识Adapter

    原文:Android零基础入门第38节:初识Adapter 在上一节一起了解了ListView的简单使用,那么本节继续来学习与ListView有着千丝万缕的Adapter. 一.了解MVC模式 在开始 ...

  8. oracle rac 修改dbid和dbname

    =======================修改数据库dbid====================== 1.查看目前数据库dbid以及dbname [root@rac01 ~]# su - or ...

  9. webform的图片防盗链

    最近用到域的问题,不是同一主机的请求将不允许请求此页面. 这其实和图片防盗链的本质是一样的. 通过两个属性:由于当时用的aspx视图引擎,所以需要通过HttpContext.Current才能拿到ht ...

  10. 使用SpringMVC框架解决中文乱码的问题

    spring Web MVC框架提供了org.springframework.web.filter.CharacterEncodingFilter用于解决POST方式造成的中文乱码 问题. 需要在we ...