计算器(第一版)

#!/usr/bin/env python
# -*- coding:utf-8 -*-  
# by wk

#1 - 2 * ( (60-30 +(-9-2-5-2*3-5/3-40*4/2-3/5+6*3) * (-9-2-5-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )

import re

def Remove_parentheses(my_cal):
    new_cal = re.search("\([^()]*\)",my_cal)
    new_cal2 = new_cal
    # print(new_cal2)
    # new_cal3 = re.search("[^(].*[^)]",new_cal2)
    return new_cal2

def Calculation(old_my_cal):
    new_cal6 = Remove_duplicates(old_my_cal)
    new_cal5 = re.search("[^(].*[^)]", new_cal6)
    # print('gjgkjh',new_cal5.group())
    new_cal,new_cal4 = Remove_dupli_md(new_cal5.group())
    # new_cal = re.split("[+-]",new_cal5.group())
    # new_cal4 = re.findall("[+-]",new_cal5.group())
    print('t1',new_cal)
    print('t2',new_cal4)
    new_cal,new_cal4 = Remove_spaces(new_cal,new_cal4)
    print('list',new_cal)
    # print(new_cal4)
    for k,v in enumerate(new_cal):
        if '*' in v or '/' in v:
            new_cal2 = re.split("[*/]",v)
            new_cal3 = re.findall("[*/]",v)
            # print(new_cal2)
            # print(new_cal3)
            res = None
            for k2,v2 in enumerate(new_cal2):
                if res:
                    if new_cal3[k2-1] == '*':
                        res *= float(v2)
                    elif new_cal3[k2-1] == '/':
                        res /= float(v2)
                else:
                    res = float(v2)
            new_cal[k] = res
    # print('a',new_cal,'b',new_cal4)
    result_as = Add_subtract(new_cal, new_cal4)
    return result_as

def Add_subtract(my_cal,my_cal2):
    # print('aaa',my_cal)
    # print('bbb',my_cal2)
    res = None
    for k,v in enumerate(my_cal):
        if res:
            if my_cal2[k-1] == '+':
                res += float(v)
            elif my_cal2[k-1] == '-':
                res -= float(v)
        else:
            res = float(v)
    # print('+++',res)
    return res

def Remove_duplicates(formula):                #过滤符合
    formula = formula.replace("++", "+")
    formula = formula.replace("+-", "-")
    formula = formula.replace("-+", "-")
    formula = formula.replace("--", "+")
    formula = formula.replace("- -", "+")
    return formula

def Remove_dupli_md(str1):                     #合并乘除后的加减
    res = re.split("[+-]", str1)
    res2 = re.findall("[+-]", str1)
    for k, v in enumerate(res):
        if v.endswith("*") or v.endswith("/"):
            res[k] = res[k] + res2[k] + res[k + 1]
            del res[k + 1]
            del res2[k]
    return res,res2

def Remove_spaces(my_list,my_list2):           #过滤掉开头的空格
   if my_list[0] == '':
       my_list[1] = my_list2[0] + my_list[1]
       del my_list[0]
       del my_list2[0]
   return my_list,my_list2

if __name__ == '__main__':
    my_cal = "1-2*(( 60-30+(-9-2-5-2* 3-5/3-40*4/2-3/5+6*3)*(-9 -2-5-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))"
    # result_as = Add_subtract(result_md,result_md2)
    parenthesise_flag = True
    while parenthesise_flag:
        # print('zzz',my_cal)
        result1 = Remove_parentheses(my_cal)
        # print('re',result1.group())
        if result1:
            result_as = Calculation(result1.group())
            # print('as',result_as)
            my_cal = my_cal.replace(str(result1.group()),str(result_as))
            print('new cal',my_cal)
        else:
            print('\033[41;1m----没拓号了...---\033[0m')
            # print('\n\n\033[42;1m最终结果:\033[0m', compute(formula))
            print('end',my_cal)
            new_my_cal = Remove_duplicates(my_cal)
            print(new_my_cal)
            res = Calculation(new_my_cal)
            print('res',res)
            parenthesise_flag = False

 

posted @ 2017-07-27 16:43  GodSpeed034  阅读(128)  评论(0编辑  收藏  举报