第五周作业-模拟计算器开发

需求:

模拟计算器开发:

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

用户输入 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.逻辑图

2.readme.txt

博客地址:http://www.cnblogs.com/Mr-hu/

程序运行步骤:
输入公式:
1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )

本程序介绍:
1.消除不可见字符
2.程序逻辑
while True:
   找内层括号
If没括号:
   计算表达式
   break
计算括号表达式
用结果替换表达式
readme

3.主程序

#-*- coding:utf-8 -*-

import re

def calculate():

 a = ''.join(input('请输入计算的公式:').split())

 while True:
     if '(' in a:
         x = re.search('\(([^()]+)\)', a)
         if x is not None:
             b = x.groups()[0]
             c = count(b)
             a = re.sub('\(([^()]+)\)', str(c), a, 1)
     else:
         c = count(a)
         print(c)
         break

def add_min(a):

 if '--' in a:
     a = a.replace('--', '+')

 c = re.findall('-?\d+\.?\d*', a)
 ls = []
 for i in c:
     ls.append(float(i))
 cal = sum(ls)
 return cal


def mul(a):

 b = re.search('\d+\.?\d*(\*-?\d+\.?\d*)+', a)
 if b is not None:
     b = b.group()
     c = re.findall('-?\d+\.?\d*', b)
     ls =[]
     cal = 1
     for item in c:
         ls.append(float(item))
     for item1 in range(len(ls)):
         cal = cal * ls[item1]
     a = re.sub('\d+\.?\d*(\*-?\d+\.?\d*)+', str(cal), a, 1)
     return a


def div(a):

 b = re.search('\d+\.?\d*(\/-?\d+\.?\d*)+', a)
 if b is not None:
     b = b.group()
     c = re.findall('-?\d+\.?\d*', b)
     ls =[]
     for i in c:
         ls.append(float(i))
     cal = ls[0]
     for item1 in range(1,len(ls)):
         cal = cal / ls[item1]
     a = re.sub('\d+\.?\d*(\/-?\d+\.?\d*)+', str(cal), a, 1)
     return a


def count(b):

 while True:
     if '*' in b:
         c = b.split('*')
         if '/' in c[0]:
             b = div(b)
         else:
             b = mul(b)
     elif '/' in b:
         b = div(b)

     elif '+' or '-' in b:
         b = add_min(b)
         return b
     else:
         return b


calculate()
主程序

4.程序运行

posted @ 2017-08-24 14:56  Mr.hu  阅读(104)  评论(0编辑  收藏  举报