參照乙個demo
import redef symbol_processing(string):
string = re.sub('--', '+', string)
string = re.sub(r'\+\+', '+', string)
string = re.sub(r'\+-', '-', string)
string = re.sub(r'-\+', '-', string)
string = re.sub(r'/\+', '/', string)
string = re.sub(r'\*\+', '*', string)
return string
def calc_str(string):
string = re.sub('\s', '', string) # 去除多餘空格
brackets_s = re.compile('\((?p
[^\(]+?)\)') # 匹配括號內容
while true:
brackets_content_obj = brackets_s.search(string)
if brackets_content_obj:
kuohao_content = brackets_content_obj.group('bracket') # 計算括號中的內容
result = clac_do(kuohao_content) # '9-2*5/3+7/3*99/4*2998+10*568/14'
string = brackets_s.sub(result, string, 1)# 將括號和內容用計算結果替換掉,替換第一處 # 替換完成後繼續迴圈檢視是否還有括號,然後繼續迴圈,直到沒有括號為止
string= symbol_processing(string)
else:
return clac_do(string)
def clac_do(string):# 得到乙個沒有括號的計算式,呼叫計算函式計算得到結果
pattern = re.compile('[+-]?(\d+\.\d+|\d+)[*/][+-]?(\d+\.\d+|\d+)')
while true:# 先算乘除,再算加減
ret = pattern.search(string) # ret = 2*5
if ret:
ret_list = [float(x) for x in re.split('[*/]', ret.group())] # 得到兩個數
if '*' in ret.group(): # 判斷乘法還是除法
result = ret_list[0] * ret_list[1]
else:
result = ret_list[0] / ret_list[1]
if result >= 0: # 如果為正數則帶+號
result = '+' + str(result)
else:
result = str(result)
string = pattern.sub(result, string, 1) # 替換1處
else:
break
pattern1 = re.compile(r'[+-]?(?:\d+\.\d+|\d+)') # 計算加減
while true:
ret = pattern1.findall(string) # ret = 2*5
sum=float(0)
if len(ret)>1:
for x in ret:
sum=sum+float(x)
string=str(sum)
else:
return string
ans=calc_str('1 - 2 * ( (60-30 +(9-2*9/-3 +12 /(-3*4)/-4*2 +10 * 42/(14-28) )*(-40/-5) ) - (-4*3)/ (16-3*4) )')
print(eval('1 - 2 * ( (60-30 +(9-2*9/-3 +12 /(-3*4)/-4*2 +10 * 42/(14-28) )*(-40/-5) ) - (-4*3)/ (16-3*4) )'))
print(ans)
字串輸入計算器
一般會在喜歡考字串的筆試中遇到。1.無括號,簡單計算器設定 首先給出python 實現 class solution def calculate self,s str int d 0 sign res 0 for i in range len s if s i 0 d d 10 int s i if...
字串應用(計算器)
給定乙個包含正整數 加 減 乘 除 的算數表示式 括號除外 計算其結果。表示式僅包含非負整數,四種運算子和空格。整數除法僅保留整數部分。示例 輸入 3 2 2 輸出 7 答案 思路 1.碰到數字直接入棧 2.碰到空格,直接下一步 3.碰到 碰到 下乙個數字直接入棧 碰到 num入棧 num num ...
Python之字串計算(計算器)
import re expression 1 2 60 2 3 40.0 42425 5 9 2 5 3 357 553 3 99 4 2998 10 568 14 4 3 16 3 2 56 56 45 question eval expression print question def ari...