python达成总结器,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) ) ********************

python之总括器(第二日),python总结器

作业:

     使用正则表明式和递归达成计算器成效。

 

 实现:

       一、完毕带括号的计算

python达成总结器,python之总括器。       二、达成指数、加减乘除求余等效果

       

1、实例证实:

本实例自身写了个版本,但照样存在一点bug,例:-二-2等总括难点,故最终在武SIHighlander的代码基础上加了指数、求余等功能。

该总结器思路:
1、递归寻觅表达式中只包罗 数字和平运动算符的表明式,并盘算结果
二、由于整数计算会忽视小数,全体的数字皆认为是浮点型操作,以此来保存小数
选择技术:
一、正则说明式
2、递归

 

二、流程图:

#!/usr/bin/python27 #_*_ coding=utf-8 _*_ ''' Created on 2016年7月11十八日 @author: 王凯(英文名:wáng kǎi) ''' ''' 该计算器思路: 1、递归寻觅表达式中只含有 数字和平运动算符的表明式,并总括结果 二、由于整数总结会忽视小数,全部的数字都是为是浮点型操作,以此来保存小数 使用才具: 1、正则表达式 2、递归 实行流程如下: ******************** 请总结表达式: 1 - 二 * ( (60-30 (-40.0/5) * (9-2*5/3 7 /3*99/4*2998 10 * 568/14 )) - (-4*3)/ (16-3*2) ) ******************** before: ['1-2*((60-30 (-40.0/5)*(9-2*5/3 7/3*99/4*2998 10*568/14))-(-4*3)/(16-3*2))'] -40.0/5=-8.0 after: ['1-2*必赢娱乐网址,((60-30 -8.0*(9-2*5/3 7/3*99/4*2998 10*568/14))-(-4*3)/(16-3*2))'] ========== 上叁次计算停止 ========== before: ['1-2*((60-30 -8.0*(9-2*5/3 7/3*99/4*2998 10*568/14))-(-4*3)/(16-3*2))'] 9-2*5/3 7/3*99/4*2998 10*568/14=173545.880953 after: ['1-2*((60-30 -8.0*173545.880953)-(-4*3)/(16-3*2))'] ========== 上一回计算停止 ========== before: ['1-2*((60-30 -8.0*173545.880953)-(-4*3)/(16-3*2))'] 60-30 -8.0*173545.880953=-1388337.04762 after: ['1-2*(-1388337.04762-(-4*3)/(16-3*2))'] ========== 上一次总括甘休========== before: ['1-2*(-1388337.04762-(-4*3)/(16-3*2))'] -4*3=-12.0 after: ['1-2*(-1388337.04762--12.0/(16-3*2))'] ========== 上三次总结截至 ========== before: ['1-2*(-1388337.04762--12.0/(16-3*2))'] 16-3*2=10.0 after: ['1-2*(-1388337.04762--12.0/10.0)'] ========== 上一次计算截至========== before: ['1-2*(-1388337.04762--12.0/10.0)'] -1388337.04762--12.0/10.0=-1388335.84762 after: ['1-2*-1388335.84762'] ========== 上贰次计算甘休 ========== 作者的乘除结果: 2776672.695二四 ''' import re,os,sys def compute_exponent(arg): """ 操作指数 :param expression:表明式 :return:总结结果 """ val = arg[0] pattern = re.compile(r'd .?d*[*]{2}[ -]?d .?d*') mch = pattern.search(val) if not mch: return content = pattern.search(val).group() if len(content.split('**'))>1: n1, n2 = content.split('**') value = float(n1) ** float(n2) else: pass before, after = pattern.split(val, 1) new_str = "%s%s%s" % (before,value,after) arg[0] = new_str compute_exponent(arg) def compute_mul_div(arg): """ 操作乘除 :param expression:表达式 :return:总计结果 """ val = arg[0] pattern = re.compile(r'd .?d*[*/%//] [ -]?d .*d*') mch = pattern.search(val) if not mch: return content = pattern.search(val).group() if len(content.split('*'))>1: n1, n2 = content.split('*') value = float(n1) * float(n2) elif len(content.split('//'))>1: n1, n2 = content.split('//') value = float(n1) // float(n2) elif len(content.split('%'))>1: n1, n2 = content.split('%') value = float(n1) % float(n2) elif len(content.split('/'))>1: n1, n2 = content.split('/') value = float(n1) / float(n2) else: pass before, after = pattern.split(val, 1) new_str = "%s%s%s" % (before,value,after) arg[0] = new_str compute_mul_div(arg) def compute_add_sub(arg): """ 操作加减 :param expression:表明式 :return:计算结果 """ while True: if arg[0].__contains__(' -') or arg[0].__contains__(" ") or arg[0].__contains__('- ') or arg[0].__contains__("--"): arg[0] = arg[0].replace(' -','-') arg[0] = arg[0].replace(' ',' ') arg[0] = arg[0].replace('- ','-') arg[0] = arg[0].replace('--',' ') else: break if arg[0].startswith('-'): arg[1] = 1 arg[0] = arg[0].replace('-','&') arg[0] = arg[0].replace(' ','-') arg[0] = arg[0].replace('&',' ') arg[0] = arg[0][1:] val = arg[0] pattern = re.compile(r'd .?d*[ -]{1}d .?d*') mch = pattern.search(val) if not mch: return content = pattern.search(val).group() if len(content.split(' '))>1: n1, n2 = content.split(' ') value = float(n1) float(n2) else: n1, n2 = content.split('-') value = float(n1) - float(n2) before, after = pattern.split(val, 1) new_str = "%s%s%s" % (before,value,after) arg[0] = new_str compute_add_sub(arg) def compute(expression): """ 操作加减乘除 :param expression:表达式 :return:计算结果 """ inp = [expression,0] # 管理表明式中的指数 compute_exponent(inp) # 管理表明式中的乘除求余等 compute_mul_div(inp) # 处理表明式的加减 compute_add_sub(inp) if divmod(inp[1],2)[1] == 1: result = float(inp[0]) result = result * -1 else: result = float(inp[0]) return result def exec_bracket(expression): """ 递归管理括号,并计算:param expression: 表明式 :return:最后总括结果 """ pattern = re.compile(r'(([ -*/%//**]*d .*d*){2,})') # 倘若表达式中已经未有括号,则间接调用担任总计的函数,将表明式结果回到,如:2*1-82 444 #if not re.search('(([ -*/]*d .*d*){2,})', expression): if not pattern.search(expression): final = compute(expression) return final # 获取 第一个 只含有 数字/小数 和 操作符 的括号 # 如: # ['1-2*((60-30 (-40.0/5)*(9-2*5/3 7/3*99/4*2998 10*568/14))-(-4*3)/(16-3*2))'] # 找出:(-40.0/5) content = pattern.search(expression).group() # 分割表达式,即: # 将['1-2*((60-30 (-40.0/5)*(9-2*5/3 7/3*99/4*2998 10*568/14))-(-4*3)/(16-3*2))'] # 分割更三有个别:['1-2*((60-30 ( (-40.0/5) *(9-2*5/3 7/3*99/4*2998 10*568/14))-(-4*3)/(16-3*2))'] before, nothing, after = pattern.split(expression, 1) print('before:',expression) content = content[1:len(content)-1] # 总结,提取的代表 (-40.0/伍),并活的结果,即:-40.0/五=-八.0 ret = compute(content) print('%s=%s' %( content, ret)) # 将实行结果拼接,['1-2*((60-30 ( -8.0 *(9-2*5/3 7/3*99/4*2998 10*568/14))-(-4*3)/(16-3*2))'] expression = "%s%s%s" %(before, ret, after) print('after:',expression) print("="*10,'previous result is',"="*10) # 循环继续下一次括号管理操作,本次指点者的是已被管理后的表明式,即: # ['1-2*((60-30 -8.0 *(9-2*5/3 7/3*99/4*2998 10*568/14))-(-4*3)/(16-3*2))'] # 如此周而复始的操作,直到表明式中不再含有括号 return exec_bracket(expression) # 使用 __name__ 的目的: # 唯有实施python index.py 时,以下代码才实行 # 如果其余人导入该模块,以下代码不实践 if __name__ == "__main__": flag = True os.system('clear') ###清屏### print('n================================================================') print('\033[33m 招待使用总计器 :\033[0m') print('n================================================================') while flag: calculate_input = raw_input('\033[32m请输入总括的表达式 | (退出:q)\033[0m') calculate_input = re.sub('s*','',calculate_input) if len(calculate_input) == 0: continue elif calculate_input == 'q': sys.exit('退出程序') elif re.search('[^0-9.- */%//**()]',calculate_input): print('\033[31m 输入错误,请重新输入!!!\033[0m') else: result = exec_bracket(calculate_input) print('the expression result is %s' % result) 计算器

 

四、针对python二.7和python三.肆无太大差距,故只须要三个版本就可以。

作业: 使用正则表明式和递归实现计算器功效。 达成: 1、完毕带括号的测算贰、达成指数、加减乘...

作业:

python落成简易版计算器,python落成总括器

学了一周的Python,那篇小说算是为这段时日自学做的小总括。

一、Python简介

       Python是1门十二分华美的脚本语言,如若学过java、c 那入门Python是特别轻巧的。Python具备足够和强大的类库。它常被别名为胶水语言,它亦可很自在的把用任何语言创设的各类模块(尤其是C/C )轻便地联合在一同。常见的1种选用意况是,使用Python快速转移程序的原型(临时依然是先后的尾声界面),然后对在那之中有特意要求的片段,用更方便的言语改写。

2、Python版总计器的贯彻

工具策画:

        1. Python2.7
        2. wxPython
        叁. wxGlade分界面编辑工具
        4. pyCharm

        具体布署哪些的作者就隐瞒了,网络有繁多。Python的GUI开荒库有繁多,这里大家运用wxPython。用wxGlade编辑界面,wxGlade是一款很好用的GUI编辑工具,它最大的亮点是能自动生成编辑好的图形分界面包车型大巴代码。

此地根本介绍几点:

wx.TextCtrl(文本输入控件),那几个作为总计器的显示屏,点击数字时用AppendText方法将数字增长至文本末尾,要抽出数字时用GetValue方法,点击运算符时要将文本框中的数字清空(先存储)用Clear方法然后还会有将操作符保存,点击等号后要将第三个操作数存款和储蓄,然后用int方法将字符串转变为数字,总结后用SetValue方法将结果送入文本框,具体代码如下:

import wx 

# begin wxGlade: extracode 
# end wxGlade 


class MyFrame(wx.Frame): 
  def __init__(self, *args, **kwds): 
    # begin wxGlade: MyFrame.__init__ 
    kwds["style"] = wx.DEFAULT_FRAME_STYLE 
    wx.Frame.__init__(self, *args, **kwds) 
    self.text_ctrl_1 = wx.TextCtrl(self, -1, "",style=wx.TE_READONLY) 
    self.button_37 = wx.Button(self, -1, "1") 
    self.button_38 = wx.Button(self, -1, "2") 
    self.button_39 = wx.Button(self, -1, "3") 
    self.button_40 = wx.Button(self, -1, " ") 
    self.button_41 = wx.Button(self, -1, "4") 
    self.button_42 = wx.Button(self, -1, "5") 
    self.button_43 = wx.Button(self, -1, "6") 
    self.button_44 = wx.Button(self, -1, "-") 
    self.button_46 = wx.Button(self, -1, "7") 
    self.button_45 = wx.Button(self, -1, "8") 
    self.button_47 = wx.Button(self, -1, "9") 
    self.button_48 = wx.Button(self, -1, "x") 
    self.button_49 = wx.Button(self, -1, "C") 
    self.button_50 = wx.Button(self, -1, "0") 
    self.button_51 = wx.Button(self, -1, "=") 
    self.button_52 = wx.Button(self, -1, "/") 

    self.__set_properties() 
    self.__do_layout() 

    self.Bind(wx.EVT_BUTTON, self.bu1, self.button_37) 
    self.Bind(wx.EVT_BUTTON, self.bu2, self.button_38) 
    self.Bind(wx.EVT_BUTTON, self.bu3, self.button_39) 
    self.Bind(wx.EVT_BUTTON, self.bu_plus, self.button_40) 
    self.Bind(wx.EVT_BUTTON, self.bu4, self.button_41) 
    self.Bind(wx.EVT_BUTTON, self.bu5, self.button_42) 
    self.Bind(wx.EVT_BUTTON, self.bu6, self.button_43) 
    self.Bind(wx.EVT_BUTTON, self.bu_min, self.button_44) 
    self.Bind(wx.EVT_BUTTON, self.bu7, self.button_46) 
    self.Bind(wx.EVT_BUTTON, self.bu8, self.button_45) 
    self.Bind(wx.EVT_BUTTON, self.bu9, self.button_47) 
    self.Bind(wx.EVT_BUTTON, self.bu_mul, self.button_48) 
    self.Bind(wx.EVT_BUTTON, self.bu_clear, self.button_49) 
    self.Bind(wx.EVT_BUTTON, self.bu0, self.button_50) 
    self.Bind(wx.EVT_BUTTON, self.bu_result, self.button_51) 
    self.Bind(wx.EVT_BUTTON, self.bu_chu, self.button_52) 
    # end wxGlade 
    self.Show(True) 

  def __set_properties(self): 
    # begin wxGlade: MyFrame.__set_properties 
    self.SetTitle("Python Calculater by CYG") 
    self.text_ctrl_1.SetMinSize((400, 50)) 
    self.button_37.SetMinSize((100, 50)) 
    self.button_38.SetMinSize((100, 50)) 
    self.button_39.SetMinSize((100, 50)) 
    self.button_40.SetMinSize((100, 50)) 
    self.button_41.SetMinSize((100, 50)) 
    self.button_42.SetMinSize((100, 50)) 
    self.button_43.SetMinSize((100, 50)) 
    self.button_44.SetMinSize((100, 50)) 
    self.button_46.SetMinSize((100, 50)) 
    self.button_45.SetMinSize((100, 50)) 
    self.button_47.SetMinSize((100, 50)) 
    self.button_48.SetMinSize((100, 50)) 
    self.button_49.SetMinSize((100, 50)) 
    self.button_50.SetMinSize((100, 50)) 
    self.button_51.SetMinSize((100, 50)) 
    self.button_52.SetMinSize((100, 50)) 
    # end wxGlade 

  def __do_layout(self): 
    # begin wxGlade: MyFrame.__do_layout 
    sizer_2 = wx.BoxSizer(wx.VERTICAL) 
    sizer_3 = wx.BoxSizer(wx.VERTICAL) 
    grid_sizer_1 = wx.GridSizer(4, 4, 0, 0) 
    sizer_3.Add(self.text_ctrl_1, 0, 0, 0) 
    grid_sizer_1.Add(self.button_37, 0, 0, 0) 
    grid_sizer_1.Add(self.button_38, 0, 0, 0) 
    grid_sizer_1.Add(self.button_39, 0, 0, 0) 
    grid_sizer_1.Add(self.button_40, 0, 0, 0) 
    grid_sizer_1.Add(self.button_41, 0, 0, 0) 
    grid_sizer_1.Add(self.button_42, 0, 0, 0) 
    grid_sizer_1.Add(self.button_43, 0, 0, 0) 
    grid_sizer_1.Add(self.button_44, 0, 0, 0) 
    grid_sizer_1.Add(self.button_46, 0, 0, 0) 
    grid_sizer_1.Add(self.button_45, 0, 0, 0) 
    grid_sizer_1.Add(self.button_47, 0, 0, 0) 
    grid_sizer_1.Add(self.button_48, 0, 0, 0) 
    grid_sizer_1.Add(self.button_49, 0, 0, 0) 
    grid_sizer_1.Add(self.button_50, 0, 0, 0) 
    grid_sizer_1.Add(self.button_51, 0, 0, 0) 
    grid_sizer_1.Add(self.button_52, 0, 0, 0) 
    sizer_3.Add(grid_sizer_1, 1, wx.EXPAND, 0) 
    sizer_2.Add(sizer_3, 1, wx.EXPAND, 0) 
    self.SetSizer(sizer_2) 
    sizer_2.Fit(self) 
    self.Layout() 
    # end wxGlade 

  def bu1(self, event): # wxGlade: MyFrame.<event_handler> 
    self.text_ctrl_1.AppendText("1") 
    event.Skip() 

  def bu2(self, event): # wxGlade: MyFrame.<event_handler> 
    self.text_ctrl_1.AppendText("2") 
    event.Skip() 

  def bu3(self, event): # wxGlade: MyFrame.<event_handler> 
    self.text_ctrl_1.AppendText("3") 
    event.Skip() 

  def bu_plus(self, event): # wxGlade: MyFrame.<event_handler> 
    self.num1=self.text_ctrl_1.GetValue() 
    self.op=" " 
    self.text_ctrl_1.Clear() 
    event.Skip() 

  def bu4(self, event): # wxGlade: MyFrame.<event_handler> 
    self.text_ctrl_1.AppendText("4") 
    event.Skip() 

  def bu5(self, event): # wxGlade: MyFrame.<event_handler> 
    self.text_ctrl_1.AppendText("5") 
    event.Skip() 

  def bu6(self, event): # wxGlade: MyFrame.<event_handler> 
    self.text_ctrl_1.AppendText("6") 
    event.Skip() 

  def bu_min(self, event): # wxGlade: MyFrame.<event_handler> 
    self.num1=self.text_ctrl_1.GetValue() 
    self.op="-" 
    self.text_ctrl_1.Clear() 
    event.Skip() 

  def bu7(self, event): # wxGlade: MyFrame.<event_handler> 
    self.text_ctrl_1.AppendText("7") 
    event.Skip() 

  def bu8(self, event): # wxGlade: MyFrame.<event_handler> 
    self.text_ctrl_1.AppendText("8") 
    event.Skip() 

  def bu9(self, event): # wxGlade: MyFrame.<event_handler> 
    self.text_ctrl_1.AppendText("9") 
    event.Skip() 

  def bu_mul(self, event): # wxGlade: MyFrame.<event_handler> 
    self.num1=self.text_ctrl_1.GetValue() 
    self.op="x" 
    self.text_ctrl_1.Clear() 
    event.Skip() 

  def bu_clear(self, event): # wxGlade: MyFrame.<event_handler> 
    self.text_ctrl_1.Clear() 
    event.Skip() 

  def bu0(self, event): # wxGlade: MyFrame.<event_handler> 
    self.text_ctrl_1.AppendText("0") 
    event.Skip() 

  def bu_chu(self, event): # wxGlade: MyFrame.<event_handler> 
    self.num1=self.text_ctrl_1.GetValue() 
    self.op="/" 
    self.text_ctrl_1.Clear() 
    event.Skip() 

  def bu_result(self, event): # wxGlade: MyFrame.<event_handler> 
    self.num2=self.text_ctrl_1.GetValue() 
    num1=int(self.num1) 
    num2=int(self.num2) 
    if self.op==" ": 
      self.text_ctrl_1.SetValue(str(num1 num2)) 
    elif self.op=="-": 
      self.text_ctrl_1.SetValue(str(num1-num2)) 
    elif self.op=="x": 
      self.text_ctrl_1.SetValue(str(num1*num2)) 
    elif self.op=="/": 
      self.text_ctrl_1.SetValue(str(num1/num2)) 
    event.Skip() 


# end of class MyFrame 
if __name__ == "__main__": 

  app=wx.App(False) 
  myframe=MyFrame(None) 
  app.MainLoop() 

开关的ID,名称什么的本身中央都以用wxGlade自动生成的。
不曾做什么美化,只是为着练练手,给张图:

必赢娱乐网址 1

以上就是本文的全体内容,希望对我们的上学抱有帮忙,也期待大家多多帮忙帮客之家。

学了三二十五日的Python,那篇小说算是为这段时光自学做的小计算。 壹、Python简介Python是一门十三分优秀...

(-40.0/5) 计算后为 (-八.0) ;则式子化简为: 壹-二*((60-30 (-8.0)*(9-2*5/3 7/3*99/4*2998 10*568/14))-(-4*3)/(16-3*2))
(9-2*5/3 7/3*99/4*2998 10*568/1四) 计算后为 173545.88095238098;则式子化简为: 一-二*((60-30 (-8.0)*173545.88095238098)-(-4*3)/(16-3*2))
(60-30 (-8.0)*17354五.880952380九八) 总计后为 (-1388337.0476一玖〇二7八) ;则式子化简为: 1-贰*((-1388337.0476190478)-(-4*3)/(16-3*2))
(-4*三) 总计后为 (-1二.0) ;则式子化简为: 一-2*((-1388337.0476190478)-(-12.0)/(16-3*2))
(16-3*二) 总括后为 十.0 ;则式子化简为: 1-二*((-1388337.0476190478)-(-12.0)/10.0)
((-1388337.047六19057捌)-(-1二.0)/10.0) 总括后为 (-138833⑤.847陆一九〇三7九) ;则式子化简为: 一-贰*(-1388335.8476190479)
聊起底结果为: 2776672.6952380九伍七

     使用正则表明式和递归完结总括器功能。

'''

 

凭借递归和正则表明式达成的,源码如下:

 实现:

# Author: Alan
import re
#实现输入数学式子(python里),计算其结果,类似计算器。思路如下:
#1.去括号:先计算最里层括号内的表达式(正则抓出)并计算出值,然后完成替换,最后循环此步骤(递归),直到没有括号或其内无表达式
#2.表达式(没有括号的干扰)计算:按运算符优先级(正则抓出)依次计算出值(递归),然后完成替换,最后会返回一个值(负数则用小括号括起)
#3.支持:python **,%,//等运算,小括号,中括号,及大括号(其实原理是一样的,正则都类似)
#4.坑:替换时如果用re.sub,由于式子包含一些特殊字符需要转义才能替换,然而我用的是replace
#5.输入:如果不是位于表达式的开头的负数请用小括号括起,避免符号混乱
def count_ex(list,strx):
    #计算一次结果 负数用()括起来
    list_left=re.sub('[()]*','',list[0])
    list_right=re.sub('[()]*','',list[2])
    list_sym=list[1]
    list_str=''.join(list)
    if list_sym=='**':
        num=float(list_left)**float(list_right)
        sym_str=str(num) if num>0 else '(%s)'%num #计算结果
        return strx.replace(list_str,sym_str,1)
    elif list_sym=='//':
        num = float(list_left) // float(list_right)
        sym_str = str(num) if num > 0 else '(%s)' % num  # 计算结果
        return strx.replace(list_str,sym_str,1)
    elif list_sym=='%':
        num = float(list_left) % float(list_right)
        sym_str = str(num) if num > 0 else '(%s)' % num  # 计算结果
        return strx.replace(list_str,sym_str,1)
    elif list_sym=='/':
        num = float(list_left) / float(list_right)
        sym_str = str(num) if num > 0 else '(%s)' % num  # 计算结果
        return strx.replace(list_str,sym_str,1)
    elif list_sym=='*':
        num = float(list_left) * float(list_right)
        sym_str = str(num) if num > 0 else '(%s)' % num  # 计算结果
        return strx.replace(list_str,sym_str,1)
    elif list_sym==' ':
        num = float(list_left)   float(list_right)
        sym_str = str(num) if num > 0 else '(%s)' % num  # 计算结果
        return strx.replace(list_str,sym_str,1)
    elif list_sym=='-':
        num = float(list_left) - float(list_right)
        sym_str = str(num) if num > 0 else '(%s)' % num  # 计算结果
        return strx.replace(list_str,sym_str,1)

def regex_split(str,pattern):
    #处理算术运算符
    list = re.findall(pattern, str)
    if not list:
        return str
    else:
        str = count_ex(list[0], str)
        return regex_split(str,pattern)

def bracket(strx):
    #处理括号中的内容,顺序小括号,中括号,大括号。结束条件没有中括号及大括号和小括号内无表达式(递归)
    regex_bracket=[
        '((?:[-]?d .?d*|([-]?d .?d*))(?:(?:**|//|%|*|/| |-)(?:d .?d*|([-]?d .?d*))*) )',
        '[(?:[-]?d .?d*|([-]?d .?d*))(?:(?:**|//|%|*|/| |-)(?:d .?d*|([-]?d .?d*))*) ]',
        '{(?:[-]?d .?d*|([-]?d .?d*))(?:(?:**|//|%|*|/| |-)(?:d .?d*|([-]?d .?d*))*) }'
    ]
    for i in regex_bracket:
        list=re.findall(i, strx)
        if not list:continue
        else:
            strx1=deal_expression(list[0][1:-1])#去掉最外层括号并处理此表达式
            strx=strx.replace(list[0], strx1, 1)#完成替换
            print(list[0],'计算后为',strx1,';则式子化简为:',strx)
    res_end=re.findall(
        '({|[|((?:[-]?d .?d*|([-]?d .?d*))(?:(?:**|//|%|*|/| |-)(?:d .?d*|([-]?d .?d*))*) ))',
        strx)
    if not res_end:return strx#结束条件
    return bracket(strx)

def deal_expression(strx):
    #处理表达式,运算符优先级,先**,在//,%,/,*,最后 ,-
    rank_sym_pattern=[
        '(([-]?d .?d*)|^-d .?d*|d .?d*)(**)(([-]?d .?d*)|d .?d*)',
        '(([-]?d .?d*)|^-d .?d*|d .?d*)(%|//|*|/)(([-]?d .?d*)|d .?d*)',
        '(^-d .?d*|d .?d*|([-]?d .?d*))( |-)(([-]?d .?d*)|d .?d*)'
    ]
    for i in rank_sym_pattern:
        strx=regex_split(strx, i)
    return strx

def run():
    while True:
        ex = input('ex>>>:').strip()
        if not ex: continue
        if ex == 'q': break
        ex=re.sub('s','',ex)
        print('最后结果为:',deal_expression(bracket(ex)).strip('()'))

if __name__ == '__main__':
    run()

# expression='22//2 1-2*((60 2*(-3-40.0/5)*(9-2*5/3 7/3*99/4*2998 10*568/14))-((-4)*3)/(16-3*2))'
# print(deal_expression(bracket(expression)))

       一、完结带括号的测算

本文由bwin必赢发布,转载请注明来源

关键词: 亚洲必赢252net python作业