zoukankan      html  css  js  c++  java
  • 使用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))
  • 相关阅读:
    Windows下安装MySQLdb(mysql-python)报错解决
    关于安装bettercap的ERROR: Failed to build gem native extension 报错解决
    Centos6 下启动httpd报错 Could not reliably determine the server's解决方法
    Linux安装mysql-python库时报错解决办法
    [Flask]学习Flask第三天笔记总结
    [原创+实战+钓鱼]setoolkit+映射
    [实战]挖掘CSRF姿势
    [实战]记一次PUT方法拿下网站shell
    JAVA二维数组小记
    技术杂谈
  • 原文地址:https://www.cnblogs.com/guolei2570/p/8452866.html
Copyright © 2011-2022 走看看