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 ...
随机推荐
- java 异常
1.java异常 2.自定义抛出 3.运行时异常,程序有问题,让使用者可以改' ' 4.return 和 throw的区别 return 符合函数要求的值 throw 有问题的时候用它结束 ...
- Java 8简明教程
本文由 ImportNew 欢迎阅读我编写的Java 8介绍.本教程将带领你一步一步地认识这门语言的新特性.通过简单明了的代码示例,你将会学习到如何使用默认接口方法,Lambda表达式,方法引用和重复 ...
- IO(六)--- 编码和解码
编码: 把看得懂的字符变成看不懂码值这个过程我们称作为编码. 解码: 把码值查找对应的字符,我们把这个过程称作为解码. 注意: 以后编码与解码一般我们都使用统一的码表.否则非常容易出乱码. 常用码表: ...
- Linux服务器高并发实践经历
作为一个师父离职早的野生程序员,业务方面还可以达到忽悠别人的水平,但上升到性能层面那就是硬伤. 真实天上掉馅饼,公司分配了一个测试性能的任务,真是感觉我的天空星星都亮了. 高并发主要限制因素:CPU. ...
- bzoj 1334: [Baltic2008]Elect
Description N个政党要组成一个联合内阁,每个党都有自己的席位数. 现在希望你找出一种方案,你选中的党的席位数要大于总数的一半,并且联合内阁的席位数越多越好. 对于一个联合内阁,如果某个政党 ...
- jquery替换所有逗号
代码: var aa= $("input[name=aa]").val().replace(/\,/g,""); 原文:http://blog.csdn.net ...
- ajax 多个表单值问题,表单序列化加其它表单值
$.ajax({ type: "post", url: "{:u('cart/totalByCard')}?t="+Math.random(9999), dat ...
- jQuery 教程
jQuery 教程 W3School H-ui前端框架 html标签
- mac开机密码忘记了, 新建用户方法
第一步:重启电脑,然后按住shift+commond+s; 第二步:输入: fsck -ymount -uaw /rm /var/db/.AppleSetupDone reboot 第三步:根据提示创 ...
- js之 matches (可以取代jq的 delegate 方法)
问题:请给#wrap 下面的子元素添加点击事件! <div id="wrap"> <a class="btn" href="http ...