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,筆記