1 回答

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊
錯(cuò)誤是i is list[-1],當(dāng)列表的最后一個(gè)元素是一個(gè)也出現(xiàn)在列表前面的值時(shí),它就會(huì)出現(xiàn)。在 ['a', '+', 'a', '*', 'a'] 的情況下,條件將在循環(huán)的第一次迭代(以及第三次和最后一次)上為真。顯然這會(huì)產(chǎn)生錯(cuò)誤的結(jié)果。
由于您只想在while循環(huán)的最后一次迭代時(shí)執(zhí)行該for循環(huán),因此您最好將該while循環(huán)無條件地移動(dòng)到整個(gè)塊之后。for
我對(duì)您的代碼應(yīng)用了一些與您的問題無關(guān)的其他更改,并且不是對(duì)算法本身的修復(fù),但似乎是更好的做法。我從運(yùn)算符列表中刪除了括號(hào),因?yàn)槟拇a尚不支持該功能(波蘭表示法不應(yīng)包含括號(hào)):
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)
添加回答
舉報(bào)