• 使用python实现计算器功能


    # 实现带括号的复杂加减乘除优先级运算
    # 主要运用到了正则表达式、while循环、列表的几种方法等。
    # 为实现要求的运算功能该代码共分为两个部分,一个是实现不带括号的加减乘除运算的函数add_sub_mul_div
    # 另外一个是一个循环加6行代码来不断去掉最内层括号并完成括号内表达式,该部分将不断调用函数add_sub_mul_div
    # 实例 a = '1-2*(3+4/((5-6*7)+8)*9/10-(11+12)*13*14/15/(16-17)/18/19)*20'
    # 运算结果 a = -146.67385897694427

    # 代码正文:

     1 import re
     2 a = '1-2*(3+4/((5-6.0*7)+8)*9/10-(11+12)*13*14/15/(16-17)/18/19)*20'
     3 b = re.findall('([d.]+|-[d.]+|+|/|*|-|(|))', a)
     4 
     5 
     6 def add_sub_mul_div(exp):
     7     # 完成复杂的不带括号的加减乘除运算
     8     sum = 0
     9     while '*' in exp and '/' in exp:
    10         # 遵循乘除运算从左到右计算
    11         i = exp.index('*')
    12         j = exp.index('/')
    13         if i < j:
    14             exp[i] = float(exp[i-1]) * float(exp[i+1])
    15             del exp[i+1], exp[i-1]
    16         else:
    17             exp[j] = float(exp[j-1]) / float(exp[j+1])
    18             del exp[j+1], exp[j-1]    
    19     while '*' in exp:
    20         # 乘法运算
    21         i = exp.index('*')
    22         exp[i] = float(exp[i-1]) * float(exp[i+1])
    23         del exp[i+1], exp[i-1]
    24     while '/' in exp:
    25         # 除法运算
    26         i = exp.index('/')
    27         exp[i] = float(exp[i-1]) / float(exp[i+1])
    28         del exp[i+1], exp[i-1]
    29     while '+' in exp:
    30         # 加法运算
    31         i = exp.index('+')
    32         exp[i] = float(exp[i-1]) + float(exp[i+1])
    33         del exp[i+1], exp[i-1]
    34     while '-' in exp:
    35         # 减法运算
    36         i = exp.index('-')
    37         exp[i] = float(exp[i-1]) - float(exp[i+1])
    38         del exp[i+1], exp[i-1]
    39     for j in exp:
    40         # 将剩余的正负数进行相加求和
    41         sum += float(j)
    42     return sum
    43 
    44 
    45 while '(' in b:
    46     y = b.index(')')  # 最里面的小括号中右括号的索引位置
    47     list_copy = b.copy()[0:y+1]
    48     list_copy.reverse()
    49     x = y - list_copy.index('(')  # 最里面小括号中左括号的索引位置
    50     b[x] = add_sub_mul_div(b[x+1:y])  # 完成最里面小括号内加减乘除运算并赋值给左括号
    51     del b[x+1:y+1]  # 删除完成运算后的小括号以及里面的表达式
    52 add_sub_mul_div(b)
    53 print(add_sub_mul_div(b))
  • 相关阅读:
    asp.net笔记第一章
    数据库复习笔记
    tp5博客项目实战2
    springboot调整MybatisPlus全局的验证策略
    SpringBoot整合MybatisPlus,并实现新增、修改、删除、查看、分页
    springboot整合Apollo
    创建apollo项目,并发布配置
    Apollo部门管理
    搭建Apollo环境(Ubuntu-18.04.4)
    启动apollo时出现的问题,../demo.sh: 行 84: curl: 未找到命令
  • 原文地址:https://www.cnblogs.com/guolei2570/p/8452866.html
Copyright © 2020-2023  润新知