zoukankan      html  css  js  c++  java
  • 一个忧郁的python计算器

     1 import re
     2 def input_process(formula):
     3     #替换运算符
     4     formula = formula.replace(" ", "")
     5     formula = formula.replace("+-", "-")
     6     formula = formula.replace("--", "+")
     7     return formula
     8 def muldiv(formula_list):
     9     '''
    10     计算公式里面的乘除
    11     element(元素),ope(运算符列表operators),calc_list(计算清单)
    12     '''
    13     for index, element in enumerate(formula_list):
    14         if "*" in element or "/" in element:
    15             ope = re.findall("[*/]", element)
    16             calc_list = re.split("[*/]", element)
    17             num = None
    18             for i, e in enumerate(calc_list):
    19                 if num:
    20                     if ope[i - 1] == "*":
    21                         num *= float(e)
    22                     elif ope[i - 1] == "/":
    23                         num /= float(e)
    24                 else:
    25                     num = float(e)
    26             formula_list[index] = num
    27     return formula_list
    28 def plumin(ope, num_list):
    29     '''
    30     加减
    31     :operators: 运算符列表
    32     :num_list: 进行运算的数字列表
    33     '''
    34     num = None
    35     for i, e in enumerate(num_list):
    36         if num:
    37             if ope[i - 1] == "+":
    38                 num += float(e)
    39             elif ope[i - 1] == "-":
    40                 num -= float(e)
    41         else:
    42             num = float(e)
    43     return num
    44 def merge(plusminus, calculate_list):
    45     '''
    46     合并
    47     :plusminus:加减符
    48     :calculate_list:乘除列表
    49     '''
    50     for index, element in enumerate(calculate_list):
    51         if element.endswith("*") or element.endswith("/"):
    52             calculate_list[index] = element + plusminus[index] + calculate_list[index + 1]
    53             del calculate_list[index + 1]
    54             del plusminus[index]
    55             return merge(plusminus, calculate_list)
    56     return plusminus, calculate_list
    57 def Internal_calc(formula):
    58     '''
    59     对括号最内层的公式进行计算
    60     :Internal_calc:内部计算
    61     '''
    62     formula = re.sub("[()]", "", formula)  # 去除两边的()
    63     formula = input_process(formula)
    64     plus_minus = re.findall("[+-]", formula)  # 列表 '+' '-' 运算符
    65     calculate_list = re.split("[+-]", formula)  # 列表 有'*' '/'
    66     if calculate_list[0] == "":  # multiply_divide_list列表第一个字符为空的话,表示一个数字为负号
    67         calculate_list[1] = "-" + calculate_list[1]
    68         del plus_minus[0]
    69         del calculate_list[0]
    70     res = merge(plus_minus, calculate_list)
    71     plus_minus = res[0]  # 列表 '+' '-' 运算符 进行合并处理
    72     calculate_list = res[1]
    73     plus_minus_list = muldiv(calculate_list)  # 生成只进行加减运算的列表
    74     res = plumin(plus_minus, plus_minus_list)
    75     return res
    76 
    77 def calculate(formula):
    78     '''先计算()里的值,算出来后再算乘除,再算加减'''
    79     while True:
    80         a = re.search("([^()]+)", formula)
    81         if a:
    82             a = a.group()
    83             res = Internal_calc(a)
    84             formula = formula.replace(a, str(res))
    85             #print("33[34;1m%s33[0m" % (formula))
    86         else:
    87             res = Internal_calc(formula)
    88             print("结果:%s" % (res))
    89             exit()
    90 
    91 
    92 if __name__ == '__main__':
    93     while True:
    94         formula = "".join(input('请输入需要计算的算式').split())
    95         calculate(formula)
    96         if format :
    97             exit()
    98         else:
    99             continue

    哎就这样吧!

  • 相关阅读:
    两个栈实现一个队列,C语言实现,队列可伸缩,容纳任意数目的元素。
    创建双向链表的一个陷阱!!
    实现单链表的倒置
    《征服c指针》学习笔记-----统计文本单词数目的程序word_count
    [stm32]IAR环境 hardfault定位
    [FreeRTOS] 函数笔记
    [C语言]字符串函数大全
    [verilog]常用任务之模拟UART Rxd引脚输入数据
    [git] 知识点
    [FreeRTOS] 临界区处理
  • 原文地址:https://www.cnblogs.com/xuzheng940806/p/6791245.html
Copyright © 2011-2022 走看看