计算器思路
1、要求输入公式
2、检测公式是否包含字母
3、如果包含字母则需要重新输入,否则进行下一步运算
4、检测是否存在括号,如果存在括号,把括号里面的值进行优先级运算,然后赋值到原位,没有则按照优先级运算,取出最后运算结果
流程图
具体代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = ‘weibinf‘ import re #导入模块 def kuohao(self): #判断是否存在括号 self = list(self) if self.count(‘)‘) != 0 : for k,v in enumerate(self): if v == ")": x = k a = self[0:k] q = a.count("(") qq = 0 for k,v in enumerate(a): if v == "(": z = k qq +=1 if q == qq : b = self[z+1:x] c = str(fushu(b)) del self[z:x+1] self.insert(z,c) return kuohao(self) else: return fushu(self) def fushu(self):#取出所有运算符和相应运算数字 temp = ‘‘ expp = [] self = list(self) i = 0 for k,v in enumerate(self): if v == ‘+‘ or v == ‘-‘ or v == ‘*‘ or v == ‘/‘: if k == 0 or self[k-1] == "+" or self[k-1] == "-" or self[k-1] == "*" or self[k-1] == "/" : temp += v else: expp.append(int(temp)) expp.append(v) temp = ‘‘ else: temp += v if i == len(self) -1 : expp.append(int(temp)) i +=1 return zhengshu(expp) def get_aob(a, o, b):#运算方式 if o == ‘+‘: return a + b elif o == ‘-‘: return a - b elif o == ‘*‘: return a * b elif o == ‘/‘: return a / b def zhengshu(exp_list):#运算公式 if len(exp_list) == 1: return exp_list[0] else: q = exp_list.count("*") w = exp_list.count("/") if q != 0 or w != 0: for k,v in enumerate(exp_list): if v == "*" or v == "/": a = exp_list[k - 1] o = exp_list[k] b = exp_list[k+1] del exp_list[k] del exp_list[k] exp_list[k-1] = get_aob(a, o, b) return zhengshu(exp_list) else: for k,v in enumerate(exp_list): if v == "+" or v == "-": a = exp_list[k - 1] o = exp_list[k] b = exp_list[k+1] del exp_list[k] del exp_list[k] exp_list[k-1] = get_aob(a, o, b) return zhengshu(exp_list) # return zhengshu(exp_list) while True: calc = raw_input("\033[31m请输入需要计算的公式: \033[0m").replace(‘ ‘,‘‘).strip() #获取用户输入 a = re.findall(‘[a-zA-Z]+‘,calc) #正则匹配是否存在字母 if not len(calc) == 0 : #判断用户输入是否为空 if len(a) == 0: #判断用户输入字符串是否存在字母 print "\033[31m程序运算结果: \033[0m",kuohao(calc) print ‘\033[43;1mpython计算器运算结果:\033[0m‘,eval(calc) else: print "\033[31m没有正确输入,运算字符串包含字母。\033[0m" else: print "\033[31m没有正确输入,请重新输入。。。\033[0m" print "\033[31m-\033[0m" * 50
时间: 2024-10-24 22:34:52