亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python 70行代碼實現(xiàn)簡單算式計算器解析

 更新時間:2019年08月30日 14:57:01   作者:秋葉紅了  
這篇文章主要介紹了Python 70行代碼實現(xiàn)簡單算式計算器解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

描述:用戶輸入一系列算式字符串,程序返回計算結(jié)果。

要求:不使用eval、exec函數(shù)。

實現(xiàn)思路:找到當前字符串優(yōu)先級最高的表達式,在算術(shù)運算中,()優(yōu)先級最高,則取出算式最底層的(),再進行加減乘除運算。對于加減乘除,也要確立一個優(yōu)先級,可以使用一個運算符列表,用for循環(huán)逐個處理運算符,并且要考慮同級情況(如for遍歷至*時,也要考慮同級別的\是否要提前運算)。不斷循環(huán)上述過程,直到最終得到一個結(jié)果。

關(guān)鍵點:使用re模塊匹配出當前狀態(tài)下優(yōu)先級最高的算式。

result = re.search('\([^()]+\)',s)

實現(xiàn)代碼:

import re
'''根據(jù)本邏輯,‘-'必須早于‘+'循環(huán) 否則特殊情況會報錯
  原因是若出現(xiàn)符號--,會被處理為+,若+優(yōu)先遍歷,最后+將無法被處理'''
oper_char = ['^','*','/','-','+']
def format_str(s):
  '''除去空格和兩邊括號'''
  return s.replace(' ','').replace('(','').replace(')','')
 
def handle_symbol(s):
  '''處理多個運算符并列的情況'''
  return s.replace('+-','-').replace('--','+').replace('-+','-').replace('++','+')
 
def cal(x,y,opertor):
  '''加減乘除開方'''
  if opertor == '^':return x**y
  elif opertor == '*':return x*y
  elif opertor == '/':return x/y
  elif opertor == '+':return x+y
  elif opertor == '-':return x-y
 
def Bottom_operation(s):
  '''無括號運算 返回一個浮點數(shù)
    symbol用于判斷返回值是正還是負'''
  symbol = 0
  s = handle_symbol(s)
  for c in oper_char:
    while c in s:
      id,char = (s.find(c),c)
      if c in ('*','/') and '*' in s and '/' in s:
        ids,idd = (s.find('*'),s.find('/'))
        id,char = (ids,'*') if ids <= idd else (idd,'/')
      if c in ('+','-') and '+' in s and '-' in s:
        ida,idd = (s.find('+'),s.find('-'))
        id,char = (ida,'+') if ida <= idd else (idd,'-')
      if id == -1:break
      left,right = ('','')
      for i in range(id - 1,-1,-1):
        if s[i] in oper_char:break
        left = s[i] + left
      for i in range(id + 1,len(s)):
       if s[id+1] == '-':
         right += s[i]
        continue
        if s[i] in oper_char:break
        right += s[i]
      if right == '' or left == '':
        if s[0] in ('-','+'):
          if '+' not in s[1:] and '-' not in s[1:]:break
          s = s[1:].replace('-','負').replace('+','-').replace('負','+')
          symbol += 1
          continue
        else:return '輸入算式有誤'
      old_str = left + char + right
      new_str = str(cal(float(left),float(right),char))
      s = handle_symbol(s.replace(old_str,new_str))
  return float(s) if symbol % 2 == 0 else -float(s)
 
def get_bottom(s):
  '''獲取優(yōu)先級最高的表達式'''
  res = re.search('\([^()]+\)',s)
  if res != None:return res.group()
 
if __name__ == '__main__':
  while True:
    s1 = input('請輸入您要計算的表達式(支持加減乘除開方): ')
    while get_bottom(s1) != None:
      source = get_bottom(s1)
      result = Bottom_operation(format_str((source)))
      s1 = s1.replace(source,str(result))
    print(Bottom_operation(format_str(s1)))

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python快速將ppt制作成配音視頻課件的操作方法

    Python快速將ppt制作成配音視頻課件的操作方法

    最近在搗鼓配音視頻課件的制作方法,發(fā)現(xiàn)使用Moviepy進行合成比圖形操作界面的合成軟件效果更好,可以完美的解決音頻和ppt材料的協(xié)同問題,下面就詳細介紹一下這個過程,供ppt視頻課件制作生手提供一個可以高效制作視頻的方法
    2021-06-06
  • python通過自定義isnumber函數(shù)判斷字符串是否為數(shù)字的方法

    python通過自定義isnumber函數(shù)判斷字符串是否為數(shù)字的方法

    這篇文章主要介紹了python通過自定義isnumber函數(shù)判斷字符串是否為數(shù)字的方法,涉及Python操作字符串判斷的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • python檢測IP地址變化并觸發(fā)事件

    python檢測IP地址變化并觸發(fā)事件

    這篇文章主要為大家詳細介紹了python檢測IP地址變化并觸發(fā)事件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 簡單了解Python下用于監(jiān)視文件系統(tǒng)的pyinotify包

    簡單了解Python下用于監(jiān)視文件系統(tǒng)的pyinotify包

    這篇文章主要介紹了Python下用于監(jiān)視文件系統(tǒng)的pyinotify包,pyinotify基于inotify事件驅(qū)動機制,需要的朋友可以參考下
    2015-11-11
  • Python?gRPC流式通信協(xié)議詳細講解

    Python?gRPC流式通信協(xié)議詳細講解

    這篇文章主要介紹了Python?gRPC流式通信協(xié)議,最近幾天在搞golang的grpc,跑通之后想用php作為客戶端調(diào)用一下grpc服務,結(jié)果拉了,一個php的grpc服務安裝,搞了好幾天,總算搞定了
    2022-11-11
  • Django實現(xiàn)圖片文字同時提交的方法

    Django實現(xiàn)圖片文字同時提交的方法

    這篇文章主要介紹了Django實現(xiàn)圖片文字同時提交的方法,較為詳細的分析了Django+jQuery實現(xiàn)圖片與文字同時提交的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • Python如何執(zhí)行精確的浮點數(shù)運算

    Python如何執(zhí)行精確的浮點數(shù)運算

    這篇文章主要介紹了Python如何執(zhí)行精確的浮點數(shù)運算,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • 關(guān)于keras中的Reshape用法

    關(guān)于keras中的Reshape用法

    這篇文章主要介紹了關(guān)于keras中的Reshape用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Python super()方法原理詳解

    Python super()方法原理詳解

    這篇文章主要介紹了Python super()方法原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Python3獲取電腦IP、主機名、Mac地址的方法示例

    Python3獲取電腦IP、主機名、Mac地址的方法示例

    這篇文章主要介紹了Python3獲取電腦IP、主機名、Mac地址的方法,結(jié)合具體實例形式分析了Python3基于socket與uuid模塊針對電腦的IP、主機名、Mac地址等信息的讀取操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2019-04-04

最新評論