zoukankan      html  css  js  c++  java
  • 简单的计算功能,还需要优化

    #还有需要优化的
    #
    !/usr/bin/env python3 Example = '1-2*((60-30+(9-2*5/-3+7/3*99/4*2998+10*568/14)*(-40/5))-(-4*3)/(16-3*2))' import re # 乘法函数 def multiplication(): value = 0 for n, i in enumerate(new_value): if n != 0: fa = '%.2f'%(float(new_value[n-1])) fb = '%.2f'%(float(new_value[n])) value = '%.2f'%(float(fa) * float(fb)) return value # 除法函数 def division(): value = 0 for n, i in enumerate(new_value): if n != 0: fa = '%.2f'%(float(new_value[n - 1])) fb = '%.2f'%(float(new_value[n])) value = '%.2f'%(float(fa) / float(fb)) return value # 加法函数 def addition(): value =0 for n, i in enumerate(new_value): if n != 0: fa = '%.2f'%(float(new_value[n - 1])) fb = '%.2f'%(float(new_value[n])) value = '%.2f'%(float(fa) + float(fb)) return value # 减法函数 def subtraction(): value = 0 for n, i in enumerate(new_value): if n != 0: fa = '%.2f'%(float(new_value[n - 1])) fb = '%.2f'%(float(new_value[n])) value = '%.2f'%(float(fa) - float(fb)) return valuewhile True: brackets = re.search("([^()]*)",Example) #匹配括号内容,'('中表示转义,serach函数匹配所有字符串 if brackets: take_off_brackets = brackets.group().strip('()')#脱掉括号 while True: element = re.findall('-?d+.d+|d+', take_off_brackets) if len(element) > 1: #计算take_off_brackets中的元素数量是否大于1 print(take_off_brackets) if '*' in take_off_brackets or '/' in take_off_brackets: #判断字符串中带有'*'或者'/' multiplication_and_division = re.search('(d+.d+|d+)(*|/)(-?d+.d+|-?d+)',take_off_brackets)#匹配字符串中的乘法和除法, # 其中'd+.d+'表示匹配浮点,'d+'表示整数,(d+.d+|d+)表示匹配浮点或者整数,括号表示这是一组,(*|/)表示匹配'*'或者'/', # (-?d+.d+|-?d+)中-?d+.d+表示正浮点数或者负浮点数,-?d+表示正数或者负数 if multiplication_and_division: mul_and_div = multiplication_and_division.group() if '*' in mul_and_div: new_value = mul_and_div.split('*') #将mul_and_div以*隔开生成列表 replace = multiplication() take_off_brackets = re.sub('(d+.d+|d+)*(-?d+.d+|-?d+)',str(replace),take_off_brackets,1) # print(take_off_brackets) continue elif '/' in mul_and_div: new_value = mul_and_div.split('/') replace = division() take_off_brackets = re.sub('(d+.d+|d+)/(-?d+.d+|-?d+)',str(replace),take_off_brackets,1) # print(take_off_brackets) continue else: break else: break elif '+' in take_off_brackets or '-' in take_off_brackets: addition_and_subtraction = re.search('(d+.d+|d+)(+|-)(-?d+.d+|-?d+)',take_off_brackets) if addition_and_subtraction: add_and_sub = addition_and_subtraction.group() if '+' in add_and_sub: if '++' in add_and_sub: new_value = add_and_sub.split('+', 1) replace = addition() take_off_brackets = re.sub('(d+.d+|d+)+(-?d+.d+|-?d+)', str(replace), take_off_brackets, 1) # print(take_off_brackets) continue else: new_value = add_and_sub.split('+') replace = addition() take_off_brackets = re.sub('(d+.d+|d+)+(-?d+.d+|-?d+)', str(replace), take_off_brackets, 1) # print(take_off_brackets) continue elif '-' in add_and_sub: if '--' in add_and_sub: new_value = add_and_sub.split('-', 1) replace = subtraction() take_off_brackets = re.sub('(d+.d+|d+)-(-?d+.d+|-?d+)', str(replace), take_off_brackets, 1) # print(take_off_brackets) continue else: new_value = add_and_sub.split('-') replace = subtraction() take_off_brackets = re.sub('(d+.d+|d+)-(-?d+.d+|-?d+)', str(replace), take_off_brackets, 1) # print(take_off_brackets) continue else: break else: break else: break else: # take_off_brackets = brackets.group().strip('()') aa = re.sub('+','+',brackets.group()) #将字符串中的'+'、'-'、'*'、'/'都加上转义符'/'这样替换的时候才能找到 bb = re.sub('-','-',aa) cc = re.sub('*','*',bb) dd = re.sub('/','/',cc) Example = re.sub(dd, str(take_off_brackets).strip('()'), Example, 1) brackets = re.search("([^()]*)", Example) tt = re.sub('(','(',brackets.group()) yy = re.sub(')',')',tt) Example = re.sub(yy,take_off_brackets,Example) print(Example) break else: while True: if '*' in Example or '/' in Example: multiplication_and_division = re.search('(d+.d+|d+)(*|/)(-?d+.d+|-?d+)', Example) if multiplication_and_division: mul_and_div = multiplication_and_division.group() if '*' in mul_and_div: new_value = mul_and_div.split('*') #将mul_and_div以*隔开生成列表 replace = multiplication() Example = re.sub('(d+.d+|d+)*(-?d+.d+|-?d+)',str(replace),Example,1) print(Example) continue elif '/' in mul_and_div: new_value = mul_and_div.split('/') replace = division() Example = re.sub('(d+.d+|d+)/(-?d+.d+|-?d+)',str(replace),Example,1) print(Example) continue else: break else: break elif '+' in Example or '-' in Example: addition_and_subtraction = re.search('(d+.d+|d+)(+|-)(-?d+.d+|-?d+)', Example) if addition_and_subtraction: add_and_sub = addition_and_subtraction.group() if '+' in add_and_sub: if '++' in add_and_sub: new_value = add_and_sub.split('+', 1) replace = addition() Example = re.sub('(d+.d+|d+)+(-?d+.d+|-?d+)', str(replace), Example, 1) print(Example) continue else: new_value = add_and_sub.split('+') replace = addition() Example = re.sub('(d+.d+|d+)+(-?d+.d+|-?d+)', str(replace), Example, 1) print(Example) continue elif '-' in add_and_sub: if '--' in add_and_sub: new_value = add_and_sub.split('-', 1) replace = subtraction() Example = re.sub('(d+.d+|d+)-(-?d+.d+|-?d+)', str(replace), Example, 1) print(Example) continue else: new_value = add_and_sub.split('-') replace = subtraction() Example = re.sub('(d+.d+|d+)-(-?d+.d+|-?d+)', str(replace), Example, 1) print(Example) continue else: break else: break
  • 相关阅读:
    java高并发程序设计模式-并发级别:阻塞、无障碍、无锁、无等待【转载】
    Java创建线程的三种主要方式
    Java乐观锁实现之CAS操作
    Java解释执行和编译执行
    手把手教你使用百度大脑地址识别API
    详解百度大脑EdgeBoard出色的视频处理技术
    一步到位!!百度大脑语音合成快速搞定会员到访提醒功能
    一文带你了解百度大脑云狐语音全攻略(附代码)
    AI小程序之语音听写来了,十分钟掌握百度大脑语音听写全攻略!!
    快速上手百度大脑EasyDL专业版·物体检测模型(附代码)
  • 原文地址:https://www.cnblogs.com/xieyi5420/p/10754614.html
Copyright © 2011-2022 走看看