1、判断字符串长度、最长的表达式
""" 1、所有数字,计算长度不能超过long 2、如果有多个长度一样,请返回第一个表达式结果 3、数学表达式必须要是最长的,合法的 4、操作符不能是连续的,如 +--+1是不合法的 """ import re s = input("请输入字符串:") #保留只有0-9 +-*字符 list1 = re.findall("[-+*0-9]+",s) s0 = "" for s1 in list1: lens = 0 T = True for s2 in s1:#判断是否有连续的运算符 if s2 in ["-","+","*"]: lens+=1 if lens > 1: print("不合法表达式:",s1) T = False break else: lens = 0 if T:#求出最长的表达式 if len(s0)<len(s1): s0 = s1 if s0 == "": A=0 else: if s0[0] == "*": s0 = s0[1:] if s0.find("*") == 1: print("暂时无法计算乘法:",s0) else: A = eval(s0) else: if s0.find("*") == 1: print("暂时无法计算乘法:", s0) else: A = eval(s0) print(A)
2、计算器方法--百度的方法
# judgment a char is a operation or not from pip._vendor.distlib.compat import raw_input def is_operation(oper): if oper == '+' or oper == '-' or oper == '*' or oper == '/': return True else: return False # split expression def mixed_operation(exp): exp_list = list(exp) temp = '' behavor_list = [] i = 0 length = len(exp_list) for item in exp_list: if is_operation(item): behavor_list.append(int(temp)) behavor_list.append(item) temp = '' else: temp += item if i == length - 1: behavor_list.append(int(temp)) break i += 1 return behavor_list # cal a o b 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 # Calculation op1 and op2('*' and '/' or '+' and '-') def cal_op1_op2(exp_list, op1, op2): if len(exp_list) == 1: return exp_list i = 0 has_op = False for i in range(2, len(exp_list), 2): a = exp_list[i - 2] o = exp_list[i - 1] b = exp_list[i] if o == op1 or o == op2: has_op = True exp_list[i - 2] = get_aob(a, o, b) del exp_list[i] del exp_list[i - 1] break if has_op == False: return exp_list return cal_op1_op2(exp_list, op1, op2) # cal exp def cal_exp(exp_list): exp_list = cal_op1_op2(exp_list, '*', '/') exp_list = cal_op1_op2(exp_list, '+', '-') return exp_list[0] # while True: expre = input('Enter your expression(0 to end):') # if expre == '0': # break result = mixed_operation(expre) print('list result = ',result) print(cal_exp(result)) #print ('END')
遗留问题解决方法:
计算器方法里没有判断表达式首字符是运算符情况,加个判断,再使用上计算器方法结合,就能计算合法的最长表达式结果了。
2021-1-2,笔记