py字串的計算器,

2022-05-17 02:47:56 字數 2125 閱讀 3426

參照乙個demo

import re

def 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...