使用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))