Python之实现一个简易计算器 用re

功能分析

  用户输入一个类似这样 3*( 4+ 50 )-(( 100 + 40 )*5/2- 3*2* 2/4+9)*((( 3 + 4)-4)-4) 这样的表达式,假设表达式里面除了包含空格、'+'、'-'、'*'、'/'和括号再无其他特殊符号,然后自己动手写代码解析其中的表达式,实现加减乘除最后得出的结果与真实的计算机所算的结果必须一致。

程序实现流程分析

  1. 用正则表达式处理字符串,只提取其中的数字和运算符,并转换成列表
  2. 编写一个函数,处理没有括号的基本运算的基本表达式
  3. 再写一个函数递归处理带有括号的函数,先计算最内部括号中的表达式, 然后将最内部的括号替换为计算后的结果, 在递归外部一层的, 最后返回的就是所需的结果

 实现:

1、先实现乘除功能:

# -*- coding:utf-8 -*-
import re
'''
Created on 2018年7月10日

@author: Administrator
'''
#第一步,实现一个公式的加减乘除 #9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14

sub_s='9-10.0/3 + 7/3*99/4*2998 +10*568/14 '
print(sub_s)

#先计算乘除
def chengchu(gongshi):
    new_s_s=gongshi
    if '*' in new_s_s or '/' in new_s_s:#先计算乘除
        sub_sub_s=re.search('(\d*\.?\d*)([*/])(\d*\.?\d*)',new_s_s)
        if sub_sub_s==None:
            pass
        else:
            # print(sub_sub_s)
            # print(sub_sub_s.span())
            # print(sub_sub_s.group())
            if sub_sub_s.group(2)=='*':
                sss=str(float(sub_sub_s.group(1))*float(sub_sub_s.group(3)))
                # print(sss)
            elif sub_sub_s.group(2)=='/':
                sss = str(float(sub_sub_s.group(1)) / float(sub_sub_s.group(3)))
                # print(sss)
            else:
                print('没有需要运算的乘除法。')
        # s_new=s[0:18]+'-8'+s[25:]
        #     gongshi[0:sub_sub_s.span()[0]] + sss + gongshi[sub_sub_s.span()[1]:]
            new_s_s=gongshi[0:sub_sub_s.span()[0]]+sss+gongshi[sub_sub_s.span()[1]:]
            # print(new_s_s)
            return chengchu(new_s_s)
    else:
        return new_s_s
    # if '+' in gongshi or '-' in gongshi:  # 再计算加减

#再计算加减
def jiajian():
    pass

print(chengchu(sub_s))

运行结果:

"D:\Program Files (x86)\python36\python.exe" F:/python从入门到放弃/7.5/计算器.py
9-10.0/3 + 7/3*99/4*2998 +10*568/14 
9-3.3333333333333335 + 173134.50000000003 +405.7142857142857 

Process finished with exit code 0

2、实现加减功能:

猜你喜欢

转载自www.cnblogs.com/Mengchangxin/p/9284337.html
今日推荐