• python 计算器


    import re
    def calculator(s):
    def two_num_cal(s):#给定str格式的两个数字(可能是整数或小数)组成的四则运算表达式(可能包含多余的+或-,如'3.5346*-23.2354'、'-3.5346-23.2354'),返回float型的计算结果
    ret=re.search(r'([+-]?d+(?:.d+)?)([*/+-])([+-]?d+(?:.d+)?)',s)
    if ret.group(2)=='*': return float(ret.group(1))*float(ret.group(3))
    elif ret.group(2)=='/': return float(ret.group(1))/float(ret.group(3))
    elif ret.group(2)=='+': return float(ret.group(1))+float(ret.group(3))
    elif ret.group(2)=='-': return float(ret.group(1))-float(ret.group(3))
    while not re.search(r'^[+-]?d+(.d+)?$',s):#当s不能转化为float型时,执行此while循环
    while re.search('[+-]{2,}',s): s = s.replace('++', '+').replace('--', '+').replace('+-', '-').replace('-+', '-') # 循环替换表达式中多余的+-号
    ret1 = re.search(r'[(][^()]+[)]', s) # 匹配首个最内层小括号,递归计算其值,将结果替换至原字符串
    if ret1:
    s = s[:ret1.span()[0]] + str(calculator(ret1.group()[1:len(ret1.group())-1])) + s[ret1.span()[1]:]
    ret2 = re.search(r'd+(.d+)?[*/][+-]?d+(.d+)?', s) # 匹配首个乘法或除法,将结果替换至原字符串
    if ret2:
    s = s[:ret2.span()[0]] + str(two_num_cal(ret2.group())) + s[ret2.span()[1]:]
    ret3=re.search(r'[+-]?(d+(.d+)?[+-]d+(.d+)?)', s) # 匹配首个加法或减法,将结果替换至原字符串
    if ret2==None and ret3:
    s = s[:ret3.span()[0]] + str(two_num_cal(ret3.group())) + s[ret3.span()[1]:]
    return float(s)
  • 相关阅读:
    编程总结3
    编程总结2
    编程总结1
    对我影响最深的老师
    自我介绍
    BFC 规则及解决的问题?
    简述 CSS 精灵图原理,及优缺点?
    等高布局、圣杯布局、双飞翼布局的实现原理
    CSS 基本选择器有哪些?
    CSS 引入方式有哪些?
  • 原文地址:https://www.cnblogs.com/shaohuagu/p/12264988.html
Copyright © 2020-2023  润新知