python练习—简单公式计算
需求:购物车程序联系:1.启程程序后,让用户输入工资,然后打印商品列表2.允许用户根据商品编号购买3.用户选择商品,检测月是否够用,够用直接扣款,不够用提示4.按q即可退出,退出时打印购买商品和余额实现代码:...
·
需求:
简单公式计算:
实现加减乘除及拓号优先级解析
用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-25/3 + 7 /399/42998 +10 * 568/14 )) - (-43)/ (16-32) )等类似公式后,必须自己解析里面的(),+,-,,/符号和公式(不能调用eval等类似功能偷懒实现),运算后得出结果,结果必须与真实的计算器所得出的结果一致
实现代码:
#!/usr/bin/python3
# czh
import re
#########乘除#######################
def Mu_di(formula):
if "*" in formula:
a,b = formula.split("*")
a = float(a)
b = float(b)
formula = float(a)*float(b)
return formula
if "/" in formula:
a,b = formula.split("/")
a = float(a)
b = float(b)
formula = float(a)/float(b)
return formula
else:
print("乘除函数符号错误")
##########加减###########################
def Add_Sub(num):
lst_num = re.findall("[-+]?[0-9]+\.?[0-9]*", num) ##匹配数字可以包含或不包含小数点后面和前面的正负数
count = 0
for i in lst_num:
count += float(i)
return count
# print(Mu_di("3.43/121"))
#############去符号###################
def degbug(num):
num = num.replace("--","+")
num = num.replace("-+","-")
num = num.replace("++","+")
num = num.replace("+-","-")
return num
# num = --343.23
# print(num)
####################计算#########################
def calculate(formula):
#formula = str(formula)
#print(type(formula))
while True:
tmp = re.search("[0-9]+\.?[0-9]*[*/][+-]?[0-9]+\.?[0-9]*",formula) ###找出第一个乘除,后面循环全部替换为浮点数
if tmp :
tmp = tmp.group()
tmp2 =str(Mu_di(tmp))
formula = formula.replace(tmp,tmp2)
#tmp = re.search("[0-9]+\.?[0-9]*[*/][+-]?[0-9]+\.?[0-9]*",formula).group()
else:
break
formula1 = degbug(formula)
formula2 = Add_Sub(formula1)
return formula2
##############括号内计算#############
def No_brackets(formula):
while True:
innum = re.search(r'\([^()]+\)', formula) ###匹配第一个没有内部括号的括号内函数,后面循环全部替换为浮点数
if innum:
tmp = innum.group()
tmp2 = calculate(tmp)
formula = formula.replace(tmp,str(tmp2))
else:
break
return formula
#############主函数################
def exp_mian(formula):
formula = formula.replace(" ","")
formula_tmp1 = No_brackets(formula)
result_exp = calculate(formula_tmp1)
#print(result_exp)
return result_exp
hanshu = " 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )"
s1 = exp_mian(hanshu)
print(s1)
#################验证##############
s2 = eval(hanshu)
print(s2)
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)