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 ...
随机推荐
- Autofac手动注入及自动注入示例
参考:http://www.cnblogs.com/xinchuang/archive/2013/05/07/3065433.html#2911661 一.环境 vs2012.mvc4..Net Fr ...
- MySql操作
用C#写了个系统更新的小程序,用到MySql MySQL 5.1参考手册 1.使用MySqlConnection 需要引用dll: MySql.Data.rar 连接数据库 string conStr ...
- rpc框架之 avro 学习 2 - 高效的序列化
同一类框架,后出现的总会吸收之前框架的优点,然后加以改进,avro在序列化方面相对thrift就是一个很好的例子.借用Apache Avro 与 Thrift 比较 一文中的几张图来说明一下,avro ...
- 你可能不知道的 NaN 以及 underscore 1.8.3 _.isNaN 的一个 BUG
这篇文章并不在我的 underscore 源码解读计划中,直到 @pod4g 同学回复了我的 issue(详见 https://github.com/hanzichi/underscore-analy ...
- DayPilot 7.8 DLL去DEMO字样下载
来自 DayPilot 的 7.8.3169.1 版本的DLL,微调去掉了“DEMO”字样,供参考,商用请支持正版! 此处下载: http://files.cnblogs.com/files/pcca ...
- 备份Mysql数据库BAT脚本
@echo off set "Ymd=%date:~,4%%date:~5,2%%date:~8,2%"c:cd C:\MySQL\bin\mysqldump -h 172.25. ...
- 跳转Activity两种方法
摘要:假设从A界面开启另外一个B界面根据是否需要返回数据分为两种方式 一.无需返回数据方式 在A界面中调用startActivity方法进行直接跳转即可 二.需要返回数据方式 1.在A界面中调用sta ...
- iOS地图 -- 定位中的CLLocation的介绍与小练习
通过定位练习,熟悉CLLocation 在上篇笔记中提到了CLLocation类,这里通过练习来讲解一下这个类,类中包含了获取到的用户位置的信息 coordinate --> 坐标,经度和纬度 ...
- 关于SQL中的排序问题
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE generatorConfiguratio ...
- js 时间戳转换成几分钟前,几小时前,几天前
formatMsgTime (timespan) { var dateTime = new Date(timespan); var year = dateTime.getFullYear(); var ...