最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)現(xiàn)逆波蘭計(jì)算表達(dá)式實(shí)例詳解

 更新時(shí)間:2015年05月06日 09:42:13   作者:feige  
這篇文章主要介紹了python實(shí)現(xiàn)逆波蘭計(jì)算表達(dá)式的方法,較為詳細(xì)的分析了逆波蘭表達(dá)式的概念及實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下

本文實(shí)例講述了python實(shí)現(xiàn)逆波蘭計(jì)算表達(dá)式的方法。分享給大家供大家參考。具體分析如下:

逆波蘭表達(dá)式又叫做后綴表達(dá)式。在通常的表達(dá)式中,二元運(yùn)算符總是置于與之相關(guān)的兩個(gè)運(yùn)算對(duì)象之間,所以,這種表示法也稱為中綴表示。波蘭邏輯學(xué)家J.Lukasiewicz于1929年提出了另一種表示表達(dá)式的方法。按此方法,每一運(yùn)算符都置于其運(yùn)算對(duì)象之后,故稱為后綴表示。

# -*- coding: utf-8 -*-
symbol_priority = {}
symbol_priority[0] = ['#']
symbol_priority[1] = ['(']
symbol_priority[2] = ['+', '-']
symbol_priority[3] = ['*', '/']
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

# -*- coding: utf-8 -*-
symbol_priority = {}
symbol_priority[0] = ['#']
symbol_priority[1] = ['(']
symbol_priority[2] = ['+', '-']
symbol_priority[3] = ['*', '/']
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()

希望本文所述對(duì)大家的Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Python字符串格式化輸出方法分析

    Python字符串格式化輸出方法分析

    這篇文章主要介紹了Python字符串格式化輸出方法,結(jié)合實(shí)例形式分析了Python格式化構(gòu)建字符串的三種常用技巧,需要的朋友可以參考下
    2016-04-04
  • Python練習(xí)之制作企業(yè)獎(jiǎng)金計(jì)算器

    Python練習(xí)之制作企業(yè)獎(jiǎng)金計(jì)算器

    在本篇博客中,我們將使用Python代碼解決一個(gè)企業(yè)獎(jiǎng)金計(jì)算的問(wèn)題,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-06-06
  • 分享四個(gè)python接口常用封裝函數(shù)

    分享四個(gè)python接口常用封裝函數(shù)

    這篇文章主要給大家分享的是分享四個(gè)python接口常用封裝函數(shù),文章基于python的相關(guān)資料展開(kāi)詳細(xì)的內(nèi)容介紹,需要的小伙伴可以參考一下
    2022-04-04
  • 用Python按時(shí)間分割txt文件中的數(shù)據(jù)方法步驟

    用Python按時(shí)間分割txt文件中的數(shù)據(jù)方法步驟

    這篇文章主要給大家介紹了如何用Python按時(shí)間分割txt文件中的數(shù)據(jù)的方法步驟,文中通過(guò)代碼示例給大家講解的非常詳細(xì),對(duì)大家學(xué)習(xí)Python處理txt文件有一定的幫助,需要的朋友可以參考下
    2023-12-12
  • Python爬蟲DNS解析緩存方法實(shí)例分析

    Python爬蟲DNS解析緩存方法實(shí)例分析

    這篇文章主要介紹了Python爬蟲DNS解析緩存方法,結(jié)合具體實(shí)例形式分析了Python使用socket模塊解析DNS緩存的相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2017-06-06
  • Python3.6中Twisted模塊安裝的問(wèn)題與解決

    Python3.6中Twisted模塊安裝的問(wèn)題與解決

    這篇文章主要介紹了Python3.6中Twisted模塊安裝的問(wèn)題與解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 詳細(xì)解讀Python中的json操作

    詳細(xì)解讀Python中的json操作

    json操作是最為基本的、最為常用的,Python自帶的json模塊就可以滿足大部分應(yīng)用場(chǎng)景,而且使用起來(lái)極為簡(jiǎn)單,下面這篇文章主要給大家介紹了關(guān)于Python中json操作的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • pip安裝提示Twisted錯(cuò)誤問(wèn)題(Python3.6.4安裝Twisted錯(cuò)誤)

    pip安裝提示Twisted錯(cuò)誤問(wèn)題(Python3.6.4安裝Twisted錯(cuò)誤)

    這篇文章主要介紹了pip安裝提示Twisted錯(cuò)誤問(wèn)題(Python3.6.4安裝Twisted錯(cuò)誤),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • 使用python處理一萬(wàn)份word表格簡(jiǎn)歷操作

    使用python處理一萬(wàn)份word表格簡(jiǎn)歷操作

    這篇文章主要介紹了使用python處理一萬(wàn)份word表格簡(jiǎn)歷操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • python匿名函數(shù)用法實(shí)例分析

    python匿名函數(shù)用法實(shí)例分析

    這篇文章主要介紹了python匿名函數(shù)用法,結(jié)合實(shí)例形式分析了Python匿名函數(shù)的特點(diǎn)、功能及相關(guān)使用方法,需要的朋友可以參考下
    2019-08-08

最新評(píng)論

清涧县| 嵊泗县| 潜山县| 札达县| 贵州省| 阳西县| 芜湖县| 安塞县| 霍邱县| 兴业县| 石楼县| 进贤县| 新巴尔虎右旗| 龙州县| 台安县| 徐闻县| 隆化县| 修武县| 资兴市| 乳源| 朝阳市| 威海市| 乐至县| 拉萨市| 渭源县| 九龙城区| 凤城市| 佛学| 和顺县| 巴楚县| 游戏| 外汇| 洪江市| 镇赉县| 永登县| 施秉县| 铜山县| 黔东| 密山市| 灵台县| 福鼎市|