如下資料是關于python實現(xiàn)逆波蘭計算表達式的代碼。
symbol_priority = {}
symbol_priority[0] = ['#']
symbol_priority[1] = ['(']
symbol_priority[2] = ['+', '-']
symbol_priority[4] = [')']
def comparePriority(symbol, RPN_stack, symbol_stack):
'''Compare priority between two symbols'''
global symbol_priority
if len(symbol_stack) > 0:
symbol_pop = symbol_stack.pop()
else:
return
for list in symbol_priority.values():
if (symbol in list) and (symbol_pop in list):
'''same priority'''
symbol_stack.append(symbol_pop)
symbol_stack.append(symbol)
return
elif symbol in list:
'''symbol is smaller'''
RPN_stack.append(symbol_pop)
#recusion call
comparePriority(symbol, RPN_stack, symbol_stack)
return
elif symbol_pop in list:
'''symbol is bigger'''
symbol_stack.append(symbol_pop)
symbol_stack.append(symbol)
return
else:
continue
symbol_stack.append(symbol_pop)
return
def scanEveryone(input_string, RPN_stack, symbol_stack):
for ch in input_string:
if ch.isdigit():
RPN_stack.append(ch)
else:
if len(symbol_stack) > 0:
if ch == '(':
symbol_stack.append(ch)
elif ch == ')':
while True:
symbol_pop = symbol_stack.pop()
if symbol_pop == '(':
break
else:
RPN_stack.append(symbol_pop)
else:
comparePriority(ch, RPN_stack, symbol_stack)
else:
symbol_stack.append(ch)
def scanInput(RPN_stack, symbol_stack):
input_string = raw_input()
input_string += '#'
scanEveryone(input_string, RPN_stack, symbol_stack)
def calRPN(RPN_stack):
value_stack = []
RPN_stack.append('#')
for value in RPN_stack:
if value == '#':
return value_stack.pop()
break
if value.isdigit():
value_stack.append(value)
else:
right_value = value_stack.pop()
left_value = value_stack.pop()
cal_string = left_value + value + right_value
value_stack.append(str(eval(cal_string)))
def main():
RPN_stack = []
symbol_stack = []
scanInput(RPN_stack, symbol_stack)
print calRPN(RPN_stack)
if __name__ == '__main__':
main()
calRPN.py
symbol_priority = {}
symbol_priority[0] = ['#']
symbol_priority[1] = ['(']
symbol_priority[2] = ['+', '-']
symbol_priority[4] = [')']
def comparePriority(symbol, RPN_stack, symbol_stack):
'''Compare priority between two symbols'''
global symbol_priority
if len(symbol_stack) > 0:
symbol_pop = symbol_stack.pop()
else:
return
for list in symbol_priority.values():
if (symbol in list) and (symbol_pop in list):
'''same priority'''
symbol_stack.append(symbol_pop)
symbol_stack.append(symbol)
return
elif symbol in list:
'''symbol is smaller'''
RPN_stack.append(symbol_pop)
#recusion call
comparePriority(symbol, RPN_stack, symbol_stack)
return
elif symbol_pop in list:
'''symbol is bigger'''
symbol_stack.append(symbol_pop)
symbol_stack.append(symbol)
return
else:
continue
symbol_stack.append(symbol_pop)
return
def scanEveryone(input_string, RPN_stack, symbol_stack):
for ch in input_string:
if ch.isdigit():
RPN_stack.append(ch)
else:
if len(symbol_stack) > 0:
if ch == '(':
symbol_stack.append(ch)
elif ch == ')':
while True:
symbol_pop = symbol_stack.pop()
if symbol_pop == '(':
break
else:
RPN_stack.append(symbol_pop)
else:
comparePriority(ch, RPN_stack, symbol_stack)
else:
symbol_stack.append(ch)
def scanInput(RPN_stack, symbol_stack):
input_string = raw_input()
input_string += '#'
scanEveryone(input_string, RPN_stack, symbol_stack)
def calRPN(RPN_stack):
value_stack = []
RPN_stack.append('#')
for value in RPN_stack:
if value == '#':
return value_stack.pop()
break
if value.isdigit():
value_stack.append(value)
else:
right_value = value_stack.pop()
left_value = value_stack.pop()
cal_string = left_value + value + right_value
value_stack.append(str(eval(cal_string)))
def main():
RPN_stack = []
symbol_stack = []
scanInput(RPN_stack, symbol_stack)
print calRPN(RPN_stack)
if __name__ == '__main__':
main()
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
當前文章:python實現(xiàn)逆波蘭計算表達式的代碼-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://jinyejixie.com/article4/djsdie.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、ChatGPT、做網(wǎng)站、網(wǎng)站維護、Google、網(wǎng)站營銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)