[python]白駿/後列マーキング式2/1935号/スタック


質問する
接尾辞2題リンク
接尾辞式と各演算子に対応する値を指定する場合は、式を計算するプログラムを作成します.
入力
第1行は、被演算子の個数(1≦N≦26)を与える.次に、2行目に接尾辞タグが与えられます.(ここで、被演算子はA~Zのゼロ大文字であり、Aから順にN個のゼロ大文字のみを使用し、長さは100を超えない).3行目からN+2行目まで、各被演算子には対応する値がある.3行目はAの値、4行目はBの値、5行目はC...被演算子に対応する値が100以下の自然数が与えられる.
前から下位タグ式を計算する場合、式の結果と中間結果は-20億以上であり、20億以下の入力のみが与えられる.
5
ABC*+DE/-
1
2
3
4
5
しゅつりょく
計算結果を小数点2位に出力します.
6.20
方法

コード#コード#
import sys

n = int(sys.stdin.readline())

strs = input()

# strs에서 중복을 제외한 후 알파벳만을 정렬해서 각 원소에 입력받은 수를 딕셔너리 형태로 저장
dict_ = {i : int(sys.stdin.readline())  for i in sorted(filter(lambda x : x.isalpha(), set(strs))) }

stack_ = []

for char in strs:
    if char.isalpha() :
        stack_.append(dict_[char])
    else:
        num2 = stack_.pop()
        num1 = stack_.pop()

        if char == '+' :
            stack_.append(num1+num2)
        elif char == '-' :
            stack_.append(num1-num2)
        elif char == '*' :
            stack_.append(num1*num2)
        elif char == '/' :
            stack_.append(num1/num2)

print('{:.2f}'.format(stack_.pop()))