-1

私はポーランド記法アルゴリズムを書きました。ただし、演​​算子間に同じオペランドがあると正しく動作しません。このコードを現在のリスト ['a', '+', 'a', '*', 'b'] で実行すると正しく動作しますが、(a) を (b) に変更すると動作しません。 . 最初のケースの結果は (a, a, b, *, +) で、2 番目のケースの結果は (a, a, +, a, *) です。なぜそれが起こるのですか?

operators = ["+", "-"]
operators1 = ["*", "/"]
operators2 = ["^"]
operators3 = ["(", ")"]
all_operators = ["+", "-", "*", "/", "^"]


def get_priority(operator):
    if operator in operators:
        priority = 1
    if operator in operators1:
        priority = 2
    if operator in operators2:
        priority = 3
    if operator in operators3:
        priority = 4
return priority


def notation():
exit = []
stack = []
list = ['a', '+', 'a', '*', 'b']
for i in list:

    if i not in all_operators:
        exit.append(i)

    else:
        stack.append(i)
        while len(stack) > 1 and get_priority(stack[-2]) >= get_priority(stack[-1]):
            exit.append(stack.pop(-2))

    if i is list[-1]:
        while len(stack) > 0:
            exit.append(stack.pop())

print(exit)
    


notation()

 
4

1 に答える 1