電卓の文言|「1-2 *((60-30 +( - 40/5)*(9-2 * 5/3 + 7/3 * * 2998年4分の99 + 10 * 14分の568)) - ( -4 * 3)/(16-3 * 2)) '

再読み込み
#计算乘除的方法
デフ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)
	
	
	

  

おすすめ

転載: www.cnblogs.com/huangjiangyong/p/10960876.html