簡単な四則演算を実現

「」 '
シンプルな非挿入句の負4つの操作を

注意:
1.追加しない=
2、右でなければならない式を入力します。

テストケース:
(111+(30-12)/2.5)* 11から114.34
'' '

演算子= [ '+'、 ' - '、 '*'、 '/'、 '(' ')']
優先= { '+':1、 ' - ':1、 '*':2「/ 「:2}

change_to DEF(S):
印刷(F '元の式:{S}')
RES =リスト()#逆ポーランド記法の
OP =リスト()#ストア演算子
I = 0#添字
iはlenの<ながら(S) :
#直接RESに番号
IF S [I]> = '0'とS [I] <= '9' :
NUM = ""
私は<一方がlen(S)及び((S [I]> = 0 '及びS [I] <=' 9 ')またはS [I] =='「):.
NUM = S + [I]
I = +。1
res.append(エバール(NUM))eval関数に本当に便利#
Sのelif演算子における[I]:
S IF [I] == '(':
op.append(S [I])
配置RES遭遇取ら#オペアンプ要素右括弧
のelif S [I] == '') :
しばらくOP:
TEMP = op.pop()
TEMP IF == '(':
BREAK
他に:
res.append(TEMP)
他:
もしLEN(上)== 0:
op.append(S [i])と、
I = 1 +
続行
:一方OP
TEMP = op.pop()
最初の抽出を取り出すときに)優先順位がOPを入れた場合、#優先決意を
TEMP IF == '('優先または[S [I]]>優先[TEMP] :
OP = + [TEMP、Sは、[I]
BREAK
他の:
res.append(TEMP)
否定OP IF:
op.append(S [I])
。I = 1 +
#OPが過剰添加
:一方オペアンプ
res.appendを(op.pop())
RESを返します

DEF計算(RES):
スタック=リスト()
iに対するRESで:
もしオペレータのI:
nums1 = stack.pop()
nums2 = stack.pop()
かどう== '+':
stack.append(nums2 + nums1 )
私== ' - 'の場合:
stack.append(nums2 - nums1)
場合、私は== ' 「:
stack.append(nums2の
nums1)
場合、私== '/':
stack.append(nums2 / nums1)
他:
スタック.append(I)
の戻りstack.pop()

RUN DEF():
しばらく真:
S = INPUT( "計算式に入力:\ N-")
IF == S 'Q':
BREAK
RES = change_to(一覧(s.replaceはありません( ""、 "")))
印刷( fが"逆ポーランド記法に変換されます:\ n-RES {}")
ANS =計算(RES)
プリント( "計算結果:%s"の%のANS)

もし名前 ==「メイン」:
実行()

おすすめ

転載: www.cnblogs.com/fanwenkeer/p/11711463.html