zoukankan      html  css  js  c++  java
  • day06_final

    # 开发一个简单的python计算器
    # 实现加减乘除及拓号优先级解析
    # 用户输入
    # 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、空格函数将算式最内层括号交给计算函数处理
    # 3、计算函数将最内层括号算式交给乘除函数和加减函数处理
    # 4、乘除函数计算算式中乘除,并将结果拼接到算式中
    # 5、加减函数计算算式中加减,并将结果拼接到算式中
    # 6、将最内层括号计算结果拼接到用户输入的算式。递归进行空格函数

    #!/usr/bin/env python3
    #-*- coding:utf-8 -*-
    #Author:ray.zhang

    import re
    def fun_add(bra):
    res_add = re.search('d+.*d*[+-]{1}d+.*d*', bra)
    if not res_add:
    print('加减运算结果是:%s'%bra)
    return
    res_add1=res_add.group()
    if len(res_add1.split('+')) > 1:
    n1,n2=res_add1.split('+')
    val=float(n1)+float(n2)
    else:
    val=eval(res_add1) #考虑负数与减号-一样,split('-')无效
    first,end=bra.split(res_add1)
    bra='%s%s%s'%(first,val,end)
    fun_add(bra)

    def fun_mul(bra):
    res_mul = re.search('d+.*d*[*/]+[+-]?d+.*d*', bra)
    if not res_mul:
    print('乘除运算结果:%s'%bra)
    return bra
    else:
    res_mul1=res_mul.group()
    if len(res_mul1.split('*')) > 1:
    n1,n2=res_mul1.split('*')
    val=float(n1)*float(n2)
    else:
    n1, n2 = res_mul1.split('/')
    val=round(float(n1) / float(n2),2)
    first,end=bra.split(res_mul1)
    bra='%s%s%s'%(first,val,end)
    fun_mul(bra)

    def fun_bra_compute(bra):
    #9-2*5/3+7/3*99/4*2998+10*568/14
    res_mul = re.search('d+.*d*[*/]+[+-]?d+.*d*', bra)
    if res_mul:
    res1=fun_mul(bra)
    print(res1)
    exit()
    res_add = re.search('d+.*d*[+-]{1}d+.*d*', res1)
    if res_add:
    res2=fun_add(res1)
    return res2

    def fun_bra(equation):
    bra=re.search('([^()]+)', equation)
    if not bra:
    res=fun_bra_compute(equation)
    print('最终运算结果是:%s'%res)
    return res
    bra1=bra.group()
    first,end=equation.split(bra1)
    bra1=bra1[1:len(bra1)-1]
    print('计算前的算式:%s' % equation)
    res=fun_bra_compute(bra1)
    equation='%s%s%s' %(first,res,end)
    print('计算后的算式:%s' %equation)
    fun_bra(equation)

    def main():
    equation=input('请输入您的算式:').strip().replace(' ','')
    bra=re.search('(([-+*/]*d+.?d*)+)',equation).group()
    fun_bra(equation)

    res=main()
    print(res)

  • 相关阅读:
    Python学习 :面向对象 -- 三大特性
    Python学习 :面向对象(一)
    小米oj #40 找小“3”
    第三次作业
    排序算法模板
    树状数组求逆序数
    最短路模板
    字典树模板
    LCS
    多项式朴素乘法
  • 原文地址:https://www.cnblogs.com/zhangray/p/7746114.html
Copyright © 2011-2022 走看看