python 实现一个计算器功能
#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 实现一个计算器功能的更多相关文章
- 如何用Python写一个计算器软件 附带效果图
该计算器使用Python tkinter模块开发 效果如下图 import tkinter #导入tkinter模块 root = tkinter.Tk() root.minsize(280,500 ...
- Python+Tkinter 实现计算器功能
#=================================================================================== import tkinter ...
- 用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 ...
- C# 一个计算器功能实现引发的思考
一.需求 计算器功能需求,这个众所周知,很明确了. 二.步骤分析 1)初级实现计算器 static int Calculator(int a,int b,string str) { switch(st ...
- python造一个计算器
正则表达式之简易计算器 关注公众号"轻松学编程"了解更多. 需求:使用正则表达式完成一个简易计算器. 功能:能够计算简单的表达式. 如:12((1+2)/(2+3)+1)*5.1- ...
- Python定做一个计算器,小而美哒~
使用qt designer ,按装anaconda后,在如下路径找到: conda3.05\Library\bin designer.exe文件,双击启动: 创建窗体,命名为XiaoDing,整个 ...
- 用python实现一个计算器
import re def atom_cal(exp): # 计算乘除法 if '*' in exp: a,b = exp.split('*') return str(float(a) * float ...
- 完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能
#!/bin/usr/env python#coding=utf-8'''完成一段简单的Python程序,用于实现一个简单的加减乘除计算器功能'''try: a=int(raw_input(" ...
- 利用PYTHON设计计算器功能
通过利用PYTHON 设计处理计算器的功能如: 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 ))- (-4*3 ...
随机推荐
- style文件的指定
新建资源文件 写资源文件 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/prese ...
- Bootstrap 分页翻页
@{ Layout = null;}<!DOCTYPE html><html><head> <meta name="viewport&q ...
- 待修 Bug
# 乱码 ## 描述 环境:Tomcat 8 + Spring 4 + Spring Security. 问题描述: 在类 AbstractAnnotationConfigDispatcherServ ...
- css3的calc() css3的百分比减宽,减高,加,乘,除,适合用于后台的排版定位
css3的calc() css3的百分比减宽,减高,加,乘,除,适合用于后台的排版定位 浏览器支持IE9+.FF4.0+.Chrome19+.Safari6+ calc()语法非常简单,就像我们小时候 ...
- RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密
原文:RSACryptoServiceProvider加密解密签名验签和DESCryptoServiceProvider加解密 C#在using System.Security.Cryptograph ...
- 图像滤镜艺术---ZPhotoEngine超级算法库
原文:图像滤镜艺术---ZPhotoEngine超级算法库 一直以来,都有个想法,想要做一个属于自己的图像算法库,这个想法,在经过了几个月的努力之后,终于诞生了,这就是ZPhotoEngine算法库. ...
- Android 开发中,as或者idea对gradle的使用
原文:Android 开发中,as或者idea对gradle的使用 本文属于转载收藏,侵删,出处:私人博客 ---------------------------------------------- ...
- 基于Monte Carlo方法的2048 A.I.
2048 A.I. 在 stackoverflow 上有个讨论:http://stackoverflow.com/questions/22342854/what-is-the-optimal-algo ...
- Delphi 10.2 非官方补丁合集
Delphi 10.2 非官方补丁合集http://blog.qdac.cc/?p=4485 FMXObject和TFORM的释放都变成异步了.虽然能保证是在主线程中释放,但是Windows部分的线程 ...
- 完全卸载mysql免安装版
使用以下命令 reg delete "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\eventlog\Application\MySQL& ...