python写计算器
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
def chu(arg1): #定义加减
arg = arg1[0] #beacuse price is a list ,so index 0
arg = arg.replace('--', '+').replace('++', '+').replace('-+', '-').replace('+-', '-') #重点重点重点:就是对负数的一个替换
# r = '-9-2-5-75884-1.6666666666666667-80.0-0.6+18'
li = re.findall("[\-\+]?\d+\.?\d*", arg) #意思是提取每个数,用findall变成列表形式,然后循环相加,张宇我佩服你
# 意思是用findall提取每个值包括值前面的运算符
num = 0 #定义空值,然后循环列表让每个值相加
for i in li:
num += float(i)
return num
def multiply(arg): #definition multip
while True:
nu = re.split("(\d+\.?\d*[*\/][\-]?\d+\.?\d*)",arg,1) #['-9-2-5-', '2*5', '/3+7/3*99/4*2998+10*568/14']
print(nu)
if len(nu) == 3:
bef, cen, aft = nu #split get there price
nu_cen = re.split("[*/]",cen) #['2', '5']
nu_bef, nu_af = nu_cen
# print(nu_bef,type(nu_af))
if "*" in cen: #如果*在中间那个
nu_cen = re.split("\*", cen)
# print(nu_cen)
nu_bef, nu_af = nu_cen
sum = float(nu_bef)*float(nu_af)
# print(sum)
nu = bef + str(sum) + aft #重新组合定义arg形参
arg = nu
return multiply(arg) #返回重新定义函数
elif "/" in cen:
nu_cen = re.split("[/]", cen)
nu_bef, nu_af = nu_cen
sum = float(nu_bef)/float(nu_af)
nu = bef + str(sum) + aft
arg = nu
return multiply(arg)# ['-9-2-5-3.3333333333333335+173134.50000000003+405.7142857142857']
else: #这个时候如果不等于3,那就是只剩下加减了执行加减
return chu(nu)
#return arg
#acc = "-9-2-5-244*311-5/3-40*4/2-3/5+6*3"
#acc = "-9-2-5-75884-5/3-160/2-3/5+18"
# acc = "-9-2-5-2*5/3+7/3*99/4*2998+10*568/14"
# ac = acc.strip(" ")
# a = multiply(ac)
# print(a)
# def multiply(arg):
# return 1
origin = "1 - 2 * ( (60-30 +(-9-2-5-24*11-5/3-40*4/2-3/5+6*3) * (-9-2-5-2*5/3 + 7 /3*9/4*98 +10 * 568/14 )) - (-4*3)/ (16-3*2) )"
#寻找括号最里面的括号
while True: # 只要里面还有最里面的括号,就循环
origin = re.sub(r"\s*","",origin) #no1 strinp *****space**
print(origin)
res = re.split("\(([^()]+)\)",origin,1) #分割括号str得到第一个最里面括号内的值 no2
if len(res) == 3: #equal(等于)3,证明have bracket
before,centor,after = res #no3
print(centor)#centor是最里面的字符串,也是计算新函数乘法或除的实参
r = multiply(centor) #定义definition function multiply or ride (no4)
new_res = before + str(r) + after #重新组合
origin = new_res #重新定义origin
print(origin)
else:
final = multiply(origin)
print(final)
break
#this is comments
"""
acc = "-9-25-75884-5/3-160/2-3/5+18"
nu = re.split("(\d+\.?\d*[*][\-]?\d+\.?\d*)",acc,1)
print(type(nu[0]))
"""
注:凡注释的字段皆为测试所写,切记不可先全部乘法或除法结果不样!!!
python写计算器的更多相关文章
- 用aardio给python写个图形界面
前阵子在用python写一些小程序,写完后就开始思考怎么给python程序配一个图形界面,毕竟控制台实在太丑陋了. 于是百度了下python的图形界面库,眼花缭乱的一整页,拣了几件有“特色”有“噱头” ...
- python写个前端,这不是轻轻松松~
前端除了用js++css+html,还有没有其它办法?其实python也可以 1. 安装与基本流程 Python学习交流Q群:660193417### 安装 PyWebIO 和其他的第三方库一样使用p ...
- Python写各大聊天系统的屏蔽脏话功能原理
Python写各大聊天系统的屏蔽脏话功能原理 突然想到一个视频里面弹幕被和谐的一满屏的*号觉得很有趣,然后就想用python来试试写写看,结果还真玩出了点效果,思路是首先你得有一个脏话存放的仓库好到时 ...
- python写红包的原理流程包含random,lambda其中的使用和见简单介绍
Python写红包的原理流程 首先来说说要用到的知识点,第一个要说的是扩展包random,random模块一般用来生成一个随机数 今天要用到ramdom中unifrom的方法用于生成一个指定范围的随机 ...
- Python写地铁的到站的原理简易版
Python地铁的到站流程及原理(个人理解) 今天坐地铁看着站牌就莫名的想如果用Python写其工作原理 是不是很简单就小试牛刀了下大佬们勿喷纯属小弟个人理解 首先来看看地铁上显示的站牌如下: 就想这 ...
- 用Python写一个简单的Web框架
一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...
- 读书笔记汇总 --- 用Python写网络爬虫
本系列记录并分享:学习利用Python写网络爬虫的过程. 书目信息 Link 书名: 用Python写网络爬虫 作者: [澳]理查德 劳森(Richard Lawson) 原版名称: web scra ...
- Python写UTF8文件,UE、记事本打开依然乱码的问题
Python写UTF8文件,UE.记事本打开依然乱码的问题 Leave a reply 现象:使用codecs打开文件,写入UTF-8文本,正常无错误.用vim打开正常,但记事本.UE等打开乱码. 原 ...
- python 写的http后台弱口令爆破工具
今天来弄一个后台破解的Python小程序,哈哈,直接上代码吧,都有注释~~ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ...
随机推荐
- 安装node-sass提示没有vendor目录的解决办法
在node-sass目录下面新建一个vendor的空目录,然后运行npm/cnpm rebuild node-sass --save-dev即可,如果安装失败,会生成一个目录名为类似这样win32-x ...
- SQL笔记
1.增加.删除约束 ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE(列1名,列名2) ALTER TABLE 表名 DROP CONSTRAINT 约束名 2.查询更 ...
- linux ubuntu14 更改为root用户登录
设置使用root用户登陆首先要修改root的登陆密码sudo passwd root1.输入sudo gedit /usr/share/lightdm/lightdm.conf.d/50-ubuntu ...
- c语言游戏推箱子
前两天做了推箱子小游戏,看似简单的一个小游戏背后却 有巨大的秘密,这秘密就是一大堆逻辑. 自从学习了函数过后,的确是解决了很多问题,而且调用很方便,尽管我现在都不是很会调用. 写完一个函数,准备测试一 ...
- Intellij Idea中的Jetty报出Web application not found src/main/webapp错误的解决方案
今天在Intellij Idea中编译项目的时候,运行起来一直会报出如下的错误: Web application not found src/main/webapp 当时感觉应该是什么文件缺少了.所以 ...
- Javascript 获取链接(url)参数的方法
有时我们需要在客户端获取链接参数,一个常见的方法是将链接当做字符串,按照链接的格式分解,然后获取对应的参数值.本文给出的就是这个流程的具体实现方法. 当然,我们也可以用正则直接匹配,文章中也给出了一个 ...
- 关于javascript中apply()和call()方法的区别
如果没接触过动态语言,以编译型语言的思维方式去理解javaScript将会有种神奇而怪异的感觉,因为意识上往往不可能的事偏偏就发生了,甚至觉得不可理喻.如果在学JavaScript这自由而变幻无穷的语 ...
- SqlMetal.exe ORM代码生成
作甚? 先说说这个工具是干啥的,我们所做的程序,或多或少需要存储一些数据到数据库,当然直接使用Sql语句也可以,甚至有些情况下就是要使用sql语句,但对于一些基本的增删改查,对每张表都要写查询语句就显 ...
- 千万别把WIFI玩坏了!关于WIFI的新鲜玩法和商业模式探讨
使用WIFI作为无线上网接入,也许大家都比较习以为常的.但是你们知道吗,其实WIFI还有很多种玩法:基于WIFI的身份识别,WIFI感知,WIFI Direct等等.今天我们会着重介绍一种WIFI的有 ...
- 第一章,阿里的Dubbo完美初级搭建,待续。。。
1.1 后台工程搭建分析 Web工程. Maven的常见打包方式:jar.war.pom Pom工程一般都是父工程,管理jar包的版本.maven插件的版本.统一的依赖管理.聚合工程. Taotao- ...