再読み込み #计算乘除的方法 デフparse_exp(EXP): EXPであれば、 "*": 、B = exp.split( "*") #プリント(a、b)は 戻りSTR(フロート(A)*フロート(B )) であれば"/" EXPで: 、B = exp.split( "/") の戻りSTR((A)/フロート(B))フロート #去除++ + - - - +バグ情况の デフexp_format(EXP ): EXP = exp.replace( "+ - "、 " - ") EXP = exp.replace( " - "、 "+") EXP = exp.replace( " - +"、 " - ") EXP = EXP .replace( "++"、 "+") のリターンのEXP #实际计算 デフexp_calc(strvar): #计算乘除 しばらく真: 。?res_obj = re.search( "\ dが+(\ \ D +)[* /] [ + - ] \ dは+(\ \ D +。)「、?strvar) res_objの場合: RES = res_obj.group() #プリント(RES)# "5 * -2" RES2 = parse_exp(RES) #プリント(RES2) strvar = strvar.replace(RES、RES2) 他: ブレーク #プリント(strvar) #计算加减 RES = exp_format(strvar ) #プリント(RES) LST = re.findall( "[+ - ] \ D +(:?。\ \ D +)?"、RES) #印刷(LST)は = 0を数える LSTに私のために: 数+ =フロート(ⅰ) #印刷(カウント) 戻りカウント #去除括号 デフremove_bracket(strvar): 真の中: res_obj = re.search( "\([^()] + \)"、strvar) の場合res_obj: res_exp = res_obj。グループ() #プリント(res_exp) #计算括号里面的值、exp_calc のres = strの( exp_calc(res_exp)) #印刷(RES、タイプ(RES)) #は文字列に実際の値のために非常に良い変換前の括弧を置き換え strvar = strvar.replace(res_exp、RES) 他: #ダイレクト文字列置換の良い返す リターンstrvarの #主な機能の DEFのメイン(strvar): #最初にすべてのスペース削除 strvar strvar.replaceを=( ""、 "") #削除ブラケット RES = remove_bracket(strvar) #印刷(RES) #算出された最終結果 リターンexp_calc(RES) #strvar = " - 30 +(40 + -2 5 *)* 2" A =「1-2 *((+ 60-30( - 40/5)*(の9- 。。。5 * 2/7 + 3/3 * 10分の99 * 4 * 2998 + 14分の568)) - ( - 4 * 3)/(16-3 * 2)) ' RES =メイン(A) プリント(RES) #検証結果 RES =のeval(A) 印刷(RES)