欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python 70行代碼實(shí)現(xiàn)簡(jiǎn)單算式計(jì)算器解析

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

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

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

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

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

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

實(shí)現(xiàn)代碼:

import re
'''根據(jù)本邏輯,‘-'必須早于‘+'循環(huán) 否則特殊情況會(huì)報(bào)錯(cuò)
  原因是若出現(xiàn)符號(hào)--,會(huì)被處理為+,若+優(yōu)先遍歷,最后+將無法被處理'''
oper_char = ['^','*','/','-','+']
def format_str(s):
  '''除去空格和兩邊括號(hào)'''
  return s.replace(' ','').replace('(','').replace(')','')
 
def handle_symbol(s):
  '''處理多個(gè)運(yùn)算符并列的情況'''
  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):
  '''無括號(hào)運(yùn)算 返回一個(gè)浮點(diǎn)數(shù)
    symbol用于判斷返回值是正還是負(fù)'''
  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('-','負(fù)').replace('+','-').replace('負(fù)','+')
          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)先級(jí)最高的表達(dá)式'''
  res = re.search('\([^()]+\)',s)
  if res != None:return res.group()
 
if __name__ == '__main__':
  while True:
    s1 = input('請(qǐng)輸入您要計(jì)算的表達(dá)式(支持加減乘除開方): ')
    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)))

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Python super()方法原理詳解

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

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

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

最新評(píng)論