• 开发一个简单的python计算器


    1.实现加减乘除及拓号优先级解析

    2.用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式(不能调用eval等类似功能偷懒实现),运算后得出结果,结果必须与真实的计算器所得出的结果一致

     1 import re
     2 def func(a):
     3     while True:
     4         if '*' in a:
     5             c = a.split('*')
     6             if '/' in c[0]:
     7                 a = div(a)
     8             else:
     9                 a = mul(a)
    10         elif '/' in a:
    11             a = div(a)
    12         else:
    13             a = add(a)
    14             return a
    15 def mul(a):
    16     b = re.search(r'd+.?d**-?d+.?d*', a)
    17     if b:
    18         b = b.group()
    19         l=b.split("*")
    20         c=float(l[0])*float(l[1])
    21         res = re.sub(r'd+.?d**-?d+.?d*', str(c), a,1)
    22         return res
    23 def div(a):
    24     b = re.search(r'd+.?d*/-?d+.?d*', a)
    25     if b:
    26         b = b.group()
    27         l=b.split("/")
    28         c=float(l[0])/float(l[1])
    29         res = re.sub(r'd+.?d*/-?d+.?d*', str(c), a,1)
    30         return res
    31 def add(a):
    32     if '--' in a:
    33         a = a.replace('--', '+')
    34     b = re.findall(r'-?d+.?d*', a) #把负数两个字符看成一个整体
    35     c=0
    36     for i in b:
    37         c+=float(i)
    38     return c
    39 def caculate():
    40     a = ''.join(input('请输入计算公式(如1-2*((60-30+(-40/5))等此类:').split())#把输入字符串以空格切片然后在拼接
    41     while True:
    42         if '(' in a:
    43             b = re.search(r'(([^()]+))', a)
    44             if b:
    45                 c = b.group()
    46                 d = func(c)
    47                 a = re.sub(r'(([^()]+))', str(d), a, 1)
    48         else:
    49             print(func(a))
    50             break
    51 caculate()
  • 相关阅读:
    checkbox 实现单选效果(html)
    HDU-6850 Game
    牛客练习赛29----F 算式子
    牛客多校第二场 B Boundary
    D. Omkar and Circle
    【洛谷】P3306 [SDOI2013]---- 随机数生成器
    二次剩余
    【洛谷】--P2704 [NOI2001]炮兵阵地
    【洛谷】4310 绝世好题
    快速排序
  • 原文地址:https://www.cnblogs.com/lixiaomingpython/p/6791198.html
Copyright © 2020-2023  润新知