固镇网站建设,郑州网站seo顾问,湖北省建设厅信息网站,美工外包网站实现一个简单的计算器#xff0c;代码如下#xff1a; 下面的函数用来检验数学表达式的合规性#xff0c;当然此处只实现两个检验#xff1a;(1)括号应该闭合 (2)不能出现字母 def check_expression(str):check_result Trueif str.count(() ! str.count()):print(表达式有…实现一个简单的计算器代码如下 下面的函数用来检验数学表达式的合规性当然此处只实现两个检验(1)括号应该闭合 (2)不能出现字母 def check_expression(str):check_result Trueif str.count(() ! str.count()):print(表达式有误括号未闭合请重新输入)check_result Falseelif re.findall([a-z],str.lower()):print(表达式含有非法字符请重新输入)check_result Falsereturn check_result 下面的函数用来将表达式格式化:此处实现以下几个功能 def format_expression(str):str str.replace(--,)str str.replace(-,-)str str.replace( , ) #用空字符代替空格return str 计算乘除的函数 def calc_mul_div(str1):mul_div_exp \d\.?\d*[*/]-?\d\.?\d* #匹配一个带/*的表达式while re.findall(mul_div_exp,str1) ! []: #当能找到这样的表达式时进行以下计算search_expre.search(mul_div_exp,str1).group() #先匹配一个if search_exp.count(*) 1: #如果表达式中带的是*x,y search_exp.split(*) #则用*分割mul_result str(float(x) * float(y)) #进行计算str1 str1.replace(search_exp,mul_result) #用计算结果代替匹配的表达式str1 format_expression(str1) #再次格式化else: #如果表达式中带的是不是*那就必然是/x, y search_exp.split(/)div_result str(float(x) / float(y))str1 str1.replace(search_exp, div_result)str1 format_expression(str1)return str1 计算加减的函数 1 def calc_add_sub(str1):2 add_sub_exp -?\d\.?\d*[-]-?\d\.?\d*3 while re.findall(add_sub_exp,str1) ! []:4 search_exp re.search(add_sub_exp,str1).group()5 if search_exp.count() 1:6 x,y search_exp.split()7 add_result str(float(x) float(y))8 str1 str1.replace(search_exp,add_result)9 str1 format_expression(str1)
10 else:
11 num search_exp.split(-)
12 if len(num) 3: #像-3-5这样的式子用减号会分割出三个元素所以要进行判断
13 sub_result 0
14 for i in num:
15 if i ! :
16 sub_result - float(i)
17 else:
18 x,y search_exp.split(-)
19 sub_result float(x) - float(y)
20 sub_result str(sub_result)
21 str1 str1.replace(search_exp,sub_result)
22 str1 format_expression(str1)
23 return str1 下面是计算器工作流程 1 while True:2 exp input(请输入表达式)3 if check_expression(exp) True: #检验表达式4 format_expression(exp) #将表达式格式化5 while exp.count(() 0: #当有括号时先找到最里层括号再计算6 inner_exp re.search(\([^()]\),exp).group() #匹配最里层括号的表达式7 mul_div_ret calc_mul_div(inner_exp) #先算乘除8 add_sub_ret calc_add_sub(mul_div_ret) #再算加减9 exp format_expression(exp.replace(inner_exp,add_sub_ret[1:-1]))
10 else: #当没有括号时直接计算
11 mul_div_ret calc_mul_div(exp) # 先算乘除
12 add_sub_ret calc_add_sub(mul_div_ret) # 再算加减
13 calc_ret exp.replace(exp,add_sub_ret)
14 print(The result is:,calc_ret)
15 else: #如果没有通过检验让用户重新输入
16 continue 转载于:https://www.cnblogs.com/Finance-IT-gao/p/10452665.html