计算器<代码>
import re
l_no = "-4.0*-4+((-1-8.0*2*-1)-(-9.456/1.57))/8+-8*7"
true_tr = "-4.0*-4+((-1-8.0*2*-1)-(-9.456/1.57))/8+-8*7"
trunswer = eval(true_tr)
print(trunswer)
l = re.sub(" +","",l_no) # 替换 没有+号也能实现 有第四个元素 为替换几次
l_list = list(l) # 还有一个subn方法 会返回一个替换几次的数字
def check_w(formula): # check函数
formula=re.sub("--","+",formula)
formula=re.sub("-\+|\+-","+",formula) # 管道符号|的意思是or 反斜杠\ 消除特殊意义
a = re.findall("[a-z]|[A-Z]",formula) # 中括号会消除特殊字符 并且都是or关系
b = re.findall("\(\)",formula) # 找空括号
if a or b:
print("存在字母空括号")
exit()
return formula
l_no = check_w(l_no)
s = l_no
def left_parenthesis(formula): # find the left parenthesis --
a = re.search("\(", formula)
if a == None: # 有一种个简单方法“\([^()]+\)” 中括号消除特殊意思
return None # 但是除了\ ^ -三个 “\(([^()]+)\)”会匹配括号内容
b = a.span() # 因为findall是优先匹配括号内容
return b[1]
def right_parenthesis(formula): # find the right parenthesis --
a = re.search("\)", formula)
if a == None:
return None
b = a.span()
return b[1]
def code_muldiv(numcc): # function for multiplication and division
result = [] # 这是一种算法 所有factor制成列表 所有mathematical symbol
for i in numcc: # (-+或者*/)制成一个列表 之后利用列表有顺序来进行计算
jishufuhao = 0 # 正好适合8*-8这种形式
jishushu = 1
fuhao2 = []
num = []
fuhao2 = re.findall("\*|/",i)
num = re.split("[*/]",i) # 将所有因数(除数)整理成一个列表
flag2 =True
while flag2:
if fuhao2[jishufuhao] == "*":
ga = float(num[jishushu-1]) * float(num[jishushu])
num[jishushu] = ga
jishushu+=1
jishufuhao+=1
elif fuhao2[jishufuhao] == "/":
ha = float(num[jishushu - 1]) / float(num[jishushu])
num[jishushu] = ha
jishushu += 1
jishufuhao += 1
if jishufuhao+1 > len(fuhao2):
flag2 = False
result.append(num[jishushu-1])
return result
def code_addsub(numcc): # function for addition and subtraction
result = []
for i in numcc:
jishufuhao = 0
jishushu = 1
fuhao2 = []
num = []
i = re.sub("--","+",i)
i = re.sub("\+-|-\+","-",i)
i = re.sub("^\+","",i)
a = re.findall("^-\d+\.?\d*",i) ### 如果formula为 -9+8 ,这个函数的功能
if a == []: ### 就是将其转换为 0+8-9 这样便将minus
pass ### 转化为无符号式子
else: ###
i = re.sub(a[0],"",i,1) ###
i = "".join([i,a[0]]) ###
fuhao2 = re.findall("\+|-",i)
num = re.split("[+-]",i)
if fuhao2 ==[]:
return numcc
flag2 = True
while flag2:
if fuhao2[jishufuhao] == "+":
ga = float(num[jishushu-1]) + float(num[jishushu])
num[jishushu] = ga
jishushu+=1
jishufuhao+=1
elif fuhao2[jishufuhao] == "-":
ha = float(num[jishushu - 1]) - float(num[jishushu])
num[jishushu] = ha
jishushu += 1
jishufuhao += 1
if jishufuhao+1 > len(fuhao2):
flag2 = False
result.append(num[jishushu-1])
return result
def exchange_l(formula): # for calculating mul div
flag4 = True
while flag4:
need_md = re.findall("\d+\.?\d*[*/]-?\d+\.?\d*",formula)
if need_md == []: # 上边这个正则 是匹配乘除并且两边是3.9这样的数字
break
e = need_md
k = code_muldiv(e)
out_s = formula.replace(str(need_md[0]),str(k[0]))
formula =out_s
return formula
flag2 = True
while flag2:
flag = True
a = 0
y_y=right_parenthesis(s)
if y_y == None: # 判断 没有括号时,直接计算
formula_jj = exchange_l(l)
final_result = code_addsub([formula_jj])
l = l.replace(l, str(final_result[0]), 1)
s = l
print("result:",s)
break
else:
y = right_parenthesis(s) - 1
while flag: # 多次寻找左括号 并且切片后再寻找
position_psis = left_parenthesis(s)
if position_psis == None:
position_psis = 0
break
s= s[position_psis:] # 将找到的左括号后面的字符串切片
a += position_psis # 记录下序列号
if a > y: # 若是左括号序列号比右括号大 则停止寻找
flag = False
a = a - position_psis
need_l = l[a:y] # 需要处理的括号内容
ex_input = l[a - 1:y + 1]
need_l =str(need_l) # 3+2-3
formula_jj = exchange_l(need_l) # 进行乘除处理
final_result = code_addsub([formula_jj]) # 进行加减处理
l = l.replace(ex_input, str(final_result[0]), 1) # 用结果替换掉字符串
s = l # 赋值再次循环用
import re
l_no = "-4.0*-4+((-1-8.0*2*-1)-(-9.456/1.57))/8+-8*7"
true_tr = "-4.0*-4+((-1-8.0*2*-1)-(-9.456/1.57))/8+-8*7"
trunswer = eval(true_tr)
print(trunswer)
l = re.sub(" +","",l_no) # 替换 没有+号也能实现 有第四个元素 为替换几次
l_list = list(l) # 还有一个subn方法 会返回一个替换几次的数字
def check_w(formula): # check函数
formula=re.sub("--","+",formula)
formula=re.sub("-\+|\+-","+",formula) # 管道符号|的意思是or 反斜杠\ 消除特殊意义
a = re.findall("[a-z]|[A-Z]",formula) # 中括号会消除特殊字符 并且都是or关系
b = re.findall("\(\)",formula) # 找空括号
if a or b:
print("存在字母空括号")
exit()
return formula
l_no = check_w(l_no)
s = l_no
def left_parenthesis(formula): # find the left parenthesis --
a = re.search("\(", formula)
if a == None: # 有一种个简单方法“\([^()]+\)” 中括号消除特殊意思
return None # 但是除了\ ^ -三个 “\(([^()]+)\)”会匹配括号内容
b = a.span() # 因为findall是优先匹配括号内容
return b[]
def right_parenthesis(formula): # find the right parenthesis --
a = re.search("\)", formula)
if a == None:
return None
b = a.span()
return b[]
def code_muldiv(numcc): # function for multiplication and division
result = [] # 这是一种算法 所有factor制成列表 所有mathematical symbol
for i in numcc: # (-+或者*/)制成一个列表 之后利用列表有顺序来进行计算
jishufuhao = 0 # 正好适合8*-8这种形式
jishushu = 1
fuhao2 = []
num = []
fuhao2 = re.findall("\*|/",i)
num = re.split("[*/]",i) # 将所有因数(除数)整理成一个列表
flag2 =True
while flag2:
if fuhao2[jishufuhao] == "*":
ga = float(num[jishushu-]) * float(num[jishushu])
num[jishushu] = ga
jishushu+=1
jishufuhao+=1
elif fuhao2[jishufuhao] == "/":
ha = float(num[jishushu - ]) / float(num[jishushu])
num[jishushu] = ha
jishushu += 1
jishufuhao += 1
if jishufuhao+1 > len(fuhao2):
flag2 = False
result.append(num[jishushu-])
return result
def code_addsub(numcc): # function for addition and subtraction
result = []
for i in numcc:
jishufuhao = 0
jishushu = 1
fuhao2 = []
num = []
i = re.sub("--","+",i)
i = re.sub("\+-|-\+","-",i)
i = re.sub("^\+","",i)
a = re.findall("^-\d+\.?\d*",i) ### 如果formula为 -9+8 ,这个函数的功能
if a == []: ### 就是将其转换为 0+8-9 这样便将minus
pass ### 转化为无符号式子
else: ###
i = re.sub(a[],"0",i,) ###
i = "".join([i,a[]]) ###
fuhao2 = re.findall("\+|-",i)
num = re.split("[+-]",i)
if fuhao2 ==[]:
return numcc
flag2 = True
while flag2:
if fuhao2[jishufuhao] == "+":
ga = float(num[jishushu-]) + float(num[jishushu])
num[jishushu] = ga
jishushu+=1
jishufuhao+=1
elif fuhao2[jishufuhao] == "-":
ha = float(num[jishushu - ]) - float(num[jishushu])
num[jishushu] = ha
jishushu += 1
jishufuhao += 1
if jishufuhao+1 > len(fuhao2):
flag2 = False
result.append(num[jishushu-])
return result
def exchange_l(formula): # for calculating mul div
flag4 = True
while flag4:
need_md = re.findall("\d+\.?\d*[*/]-?\d+\.?\d*",formula)
if need_md == []: # 上边这个正则 是匹配乘除并且两边是3.9这样的数字
break
e = need_md
k = code_muldiv(e)
out_s = formula.replace(str(need_md[]),str(k[]))
formula =out_s
return formula
flag2 = True
while flag2:
flag = True
a = 0
y_y=right_parenthesis(s)
if y_y == None: # 判断 没有括号时,直接计算
formula_jj = exchange_l(l)
final_result = code_addsub([formula_jj])
l = l.replace(l, str(final_result[]), )
s = l
print("result:",s)
break
else:
y = right_parenthesis(s) - 1
while flag: # 多次寻找左括号 并且切片后再寻找
position_psis = left_parenthesis(s)
if position_psis == None:
position_psis = 0
break
s= s[position_psis:] # 将找到的左括号后面的字符串切片
a += position_psis # 记录下序列号
if a > y: # 若是左括号序列号比右括号大 则停止寻找
flag = False
a = a - position_psis
need_l = l[a:y] # 需要处理的括号内容
ex_input = l[a - :y + ]
need_l =str(need_l) # 3+2-3
formula_jj = exchange_l(need_l) # 进行乘除处理
final_result = code_addsub([formula_jj]) # 进行加减处理
l = l.replace(ex_input, str(final_result[]), ) # 用结果替换掉字符串
s = l # 赋值再次循环用
计算器<代码>的更多相关文章
- js加减乘除在线计算器代码
js加减乘除在线计算器代码 在线演示本地下载
- C#计算器代码
在刚刚接触c#的时候,就想做一个简单加减乘除计算器.这就是目标,可惜一直没有动手去做,今天特意把它简单做了.很简单,很简单,了却一个心愿了. 代码: using System; using Syste ...
- 在ASP.NET里实现计算器代码的封装
一.具体代码 Default2.aspx.cs public partial class Chapter1_Default2 : System.Web.UI.Page { protected void ...
- java代码----------计算器代码
总结: 很多不完善—— package com.rue; import java.awt.BorderLayout; import java.awt.FlowLayout; import java.a ...
- 一段简单的手写Java计算器代码
import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.lang.*; public class Calc ...
- HTML网页之计算器代码
计算器网页效果显示:点击这里! <script> function show(){ var date = new Date(); //日期对象 var now = "&qu ...
- PHP房贷计算器代码,等额本息,等额本金
debx(); function debx() { $dkm = 240; //贷款月数,20年就是240个月 $dkTotal = 10000; //贷款总额 $dknl = 0.0515; //贷 ...
- Python使用re实现计算器
re 正则表达式 计算器 海瑞博客-学习python之路•2016-12-01•Python• 59•0•A+ A- re是一门小型语言 元字符 . 通配符除了\n ^ 以什么开始的 ...
- PHP图形计算器(计算三角形矩形周长面积)
运用PHP面向对象的知识设计一个图形计算器,同时也运用到了抽象类知识,这个计算器可以计算三角形的周长和面积以及矩形的周长和面积.本图形计算器有4个页面:1.PHP图形计算器主页index.php; ...
随机推荐
- MVC _ViewStart文件的作用
指定目录下的所有文件均继承自 某个Layout. 支持最近原则. 参考:http://www.cnblogs.com/iamlilinfeng/archive/2013/02/28/2934397.h ...
- java 文件md5+字符串md5 实现
import org.apache.commons.codec.binary.Hex; import org.apache.commons.codec.digest.DigestUtils; impo ...
- javascript为元素绑定事件响应函数
javascript中为元素设置响应时间有两种方法. (1):object.onclick=functionName; 这种方法不可以传递参数. (2):object.onclick=function ...
- Mina传递对象
利用Apache MINA来传递对象,这对了MINA来说非常容易,并且这也是Java网络编程中很常用的应用. 首先看两个用来传递的Java对象MyRequestObject和MyResponseObj ...
- salt-master 的配置文件详解
绑定的地址: interface: 0.0.0.0 master和minion通信端口: publish_port: 4505 可以使用的文件描述符:(每个minion连接master至少需要一个文件 ...
- hdu-acm steps FatMouse's Speed
本想用暴力法先试试的,案例和自己找的数据都过掉了,但是始终wa,本来期待的是tle,结果始终wa.所以也就懒的管了,直接用dp来做了.主要是因为最近在刷暴力法和dp这两个专题,所以才想好好利用一下这道 ...
- 创建自定义 jQuery 移动主题
自定义页面.工具栏.内容.表单元素.列表.按钮等元素的外观 智能电话和平板设备的高采用率最终导致增加了对移动 Web 开发人员和设计师的需求.jQuery Mobile 框架支持您创建能与原生应用程序 ...
- 从eclipse到Android studio/迁移eclipse的Android项目到Android studio平台的注意事项
整体要注意的地方 先说明一下整体需要注意的地方 1在Android studio建立项目的时候,要注意包名和原来的完全一致,不然会有很多需要改动. 2依赖的jar一定一定要找齐,不然新建项目引用不到, ...
- HITOJ 2662 Pieces Assignment(状压DP)
Pieces Assignment My Tags (Edit) Source : zhouguyue Time limit : 1 sec Memory limit : 64 M S ...
- html5_d登陆界面_注册界面
<!DOCTYPE html><html><head><script type="text/javascript">function ...