python练习——moudule02——计算器

mac2022-06-30  80

#作业名称:计算器#作者:Marvin#博客地址:http://www.cnblogs.com/Macal/p/#作业需求:计算器#测试:##运行环境:python3.4第一步: 运行程序第二步: 输入算式

 

import redef md(date_list,symbol): ''' :param date_list: 匹配到的表达式 :param symbol: 符号 :return: 乘数计算得到的值 ''' a = date_list.index(symbol) #取到符号 # print(a) if symbol == '*' and date_list[a + 1] != '-': #如果是乘号并且索引的下一个位置不是负号计算 k = float(date_list[a - 1]) * float(date_list[a + 1]) elif symbol == '/' and date_list[a + 1] != '-': #如果是除号并且索引的下一个位置不是负号计算 k = float(date_list[a - 1]) / float(date_list[a + 1]) elif symbol == '*' and date_list[a + 1] == '-': #如果是乘号并且索引的下一个位置是负号计算 k = -(float(date_list[a - 1]) * float(date_list[a + 2])) elif symbol == '/' and date_list[a + 1] == '-': #如果是除号并且索引的下一个位置是负号计算 k = -(float(date_list[a - 1]) / float(date_list[a + 2])) del date_list[a - 1], date_list[a - 1], date_list[a - 1] #删除列表里参与计算的索引位置 date_list.insert(a - 1, str(k)) #把新的值插入到列表中 return date_list#处理混乱的四则,按照先算乘除后加减的原则def fun(s): ''' :param s: 去除括号后的表达式 :return: 表达式的返回值 ''' list_str = re.findall('([\d\.]+|/|-|\+|\*)',s) #匹配表达式 # print(list_str) sum=0 while True: #先算*/后算+- if '*' in list_str and '/' not in list_str: #判断*在表达式内,/不在 md(list_str, '*') elif '*' not in list_str and '/' in list_str: #判断*不在表达式内,/在 md(list_str, '/') #调用md函数处理除号 elif '*' in list_str and '/' in list_str: #判断*在表达式内,/也在 a = list_str.index('*') b = list_str.index('/') if a < b: md(list_str, '*') else: md(list_str, '/') else: if list_str[0]=='-': #判断首个数字是否是负号 list_str[0]=list_str[0]+list_str[1] del list_str[1] sum += float(list_str[0]) #3+1-4+7 for i in range(1, len(list_str), 2): #1,3,5,7,9 if list_str[i] == '+' and list_str[i + 1] != '-': sum += float(list_str[i + 1]) elif list_str[i] == '+' and list_str[i + 1] == '-': sum -= float(list_str[i + 2]) elif list_str[i] == '-' and list_str[i + 1] == '-': sum += float(list_str[i + 2]) elif list_str[i] == '-' and list_str[i + 1] != '-': sum -= float(list_str[i + 1]) break return suma=input("请输入算式:")#a='1 - 2 * ( (60-30 +(-40.0/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'#循环去除括号while True: ret = re.split('\(([^()]+)\)', a , 1) # print(ret) if len(ret) == 3: a,b,c = re.split('\(([^()]+)\)', a, 1) rec = fun(b) a = a + str(rec) + c else: red = fun(a) print(red) break

转载于:https://www.cnblogs.com/Macal/p/7608093.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)