1 回答

TA貢獻2019條經驗 獲得超9個贊
錯誤是i is list[-1],當列表的最后一個元素是一個也出現在列表前面的值時,它就會出現。在 ['a', '+', 'a', '*', 'a'] 的情況下,條件將在循環的第一次迭代(以及第三次和最后一次)上為真。顯然這會產生錯誤的結果。
由于您只想在while循環的最后一次迭代時執行該for循環,因此您最好將該while循環無條件地移動到整個塊之后。for
我對您的代碼應用了一些與您的問題無關的其他更改,并且不是對算法本身的修復,但似乎是更好的做法。我從運算符列表中刪除了括號,因為您的代碼尚不支持該功能(波蘭表示法不應包含括號):
operator_priority = {
"+": 1,
"-": 1,
"*": 2,
"/": 2,
"^": 3,
}
all_operators = list(operator_priority.keys())
def notation(tokens):
result = []
stack = []
for token in tokens:
if token not in all_operators:
result.append(token)
else:
prio = operator_priority[token]
while len(stack) > 0 and operator_priority[stack[-1]] >= prio:
result.append(stack.pop())
stack.append(token)
while len(stack) > 0:
result.append(stack.pop())
return result
result = notation(['a', '+', 'a', '*', 'a'])
print(result)
添加回答
舉報