青岛手机建站模板企业免费邮箱注册申请
news/
2025/9/24 3:47:42/
文章来源:
青岛手机建站模板,企业免费邮箱注册申请,可以下载电影的网站怎么做,如何注册自己的wordpress#计算器开发需求##1、实现加减乘除及拓号优先级解析#2、用户输入 1 - 2 * ( (60-30 (-40/5) * (9-2*5/3 7 /3*99/4*2998 10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后#xff0c;#必须自己解析里面的(),,-,*,/符号和公式#xff0c;运算后得出结果#xff0c;结果必须…#计算器开发需求##1、实现加减乘除及拓号优先级解析#2、用户输入 1 - 2 * ( (60-30 (-40/5) * (9-2*5/3 7 /3*99/4*2998 10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后#必须自己解析里面的(),,-,*,/符号和公式运算后得出结果结果必须与真实的计算器所得出的结果一致import reimport functoolsdef minus_operator_handler(formula):处理一些特殊的符号minus_operator re.split(-,formula)calc_list re.findall([0-9],formula)if minus_operator[0] :#第一值肯定是负号clac_list[0] -%s % calc_list[0]res functools.reduce(lambda x,y:float(x) - float(y),calc_list)print(\33[33;1m减号[%s]处理结果\033[0m % formula,res)return resdef remove_duplicates(formula):formula formula.replace(,)formula formula.replace(-,-)formula formula.replace(-,-)formula formula.replace(--,)formula formula.replace(- -,)return formuladef compute_mutiply_dividend(formula):算乘除传进来的是字符串operators re.findall([*/],formula)calc_list re.split([*/],formula)res Nonefor index,i in enumerate(calc_list):if res:if operators[index-1] *:res * float(i)else operators[index-1] /res / float(i)else:res float(i)print(\033[31;1m[%s]运算结果\033[0m %formula, res)return resdef handle_minus_in_list(operators_list,calc_list):for index,i in enumerate(calc_list):if i :#它其实代表负号改成负号calc_list[index1] i calc_list[index1].strip()def handle_special_occactions(plus_and_minus_operators,multiply_and_dividend):for index,i in enumerate(multiply_and_dividend):i i.strip()if i.endswith(*) or i.endswith(/):multiply_and_dividend[index] multiply_and_dividend[index] plus_and_minus_operators[index] multiply_and_dividend[index1]del multiply_and_dividend[index1]del plus_and_minus_operators[index]return plus_and_minus_operators,multiply_and_dividenddef compute(formula):这里计算的是不带括号的公式formula formula.strip(())#去除外面包的括号formula remove_duplicates(formula)#去除外重复的-号plus_and_minus_operators re.findall([-],formula)multiply_and_dividend re.split([-],formula)#取出乘除公式if len(multiply_and_dividend[0].strip()) 0:#代表这肯定是个减号multiply_and_dividend[1] plus_and_minus_operators[0] multiply_and_dividend[1]del multiply_and_dividend[0]del plus_and_minus_operators[0]plus_and_minus_operators,multiply_and_dividendhandle_special_occactions(plus_and_minus_operators,multiply_and_dividend)for index,i in enumerate(multiply_and_dividend):if re.search([*/],i):sub_res compute_mutiply_dividend(i)multiply_and_dividend[index] sub_res#开始运算-print(multiply_and_dividend,plus_and_minus_operators)total_res Nonefor index,item in enumerate(multiply_and_dividend):if total_res:#代表不是第一次循环if plus_and_minus_operators[index-1] :total_res float(item)elif plus_and_minus_operators[index-1] -:total_res - float(item)else:total_res float(item)print(\033[32;1m[%s]运算结果\033[0m %format,total_res)return total_resdef calc(formula):计算程序入口主要逻辑是先计算括号里的值算出来后再计算乘除再算加减parenthesise_flag Turecalc_res None#初始化运算结果为Nonewhile parenthesise_flag:m re.search(\[^()*\],formula)#找到最里层的括号if m:#print(先算括号里的值,m.group())sub_res compute(m.group())formula formula.replace(m.group(),str(sub_res))else:print(\033[41;1m----没括号了...---\033[0m)print(\n\n033[42;1m最终结果:\033[0m,compute(formula))parenthesise_flag False#代表公式里的括号已经都被剥除if __name__ __main__:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/914759.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!