Python之字串計算(計算器)

2022-02-25 11:43:11 字數 4194 閱讀 5113

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 arithmetic(expression='1+1'):

# content = re.search('\(([\-\+\*\/]*\d+\.?\d*)+\)', expression) # (-3-40.0/5)

content = re.search('\(([-+*/]*\d+\.?\d*)+\)', expression) # (-3-40.0/5)

print(111, content)

if content:

content = content.group()

content = content[1:-1]

print('content:', content)

replace_content = next_arithmetic(content)

expression = re.sub('\(([-+*/]*\d+\.?\d*)+\)', replace_content, expression, count=1)

print('next_expression:', expression)

else:

answer = next_arithmetic(expression)

return answer

return arithmetic(expression)

def next_arithmetic(content):

while true:

next_content_mul_div = re.search('\d+\.?\d*[*/][-+]?\d+\.?\d*', content) # 找出帶有*/的式子

if next_content_mul_div: # 如果content含有帶有*/的式子

next_content_mul_div = next_content_mul_div.group()

print('next_content_mul_div:', next_content_mul_div)

mul_div_content = mul_div(next_content_mul_div) # 計算出帶有*/的式子

print('mul_div_content:', mul_div_content)

content = re.sub('\d+\.?\d*[*/][-+]?\d+\.?\d*', str(mul_div_content), content, count=1) # 把帶有*/的式子計算出來後替換掉

print('content:', content)

continue

next_content_add_sub = re.search('-?\d+\.?\d*[-+][-+]?\d+\.?\d*', content) # 找出帶有-+的式子

if next_content_add_sub: # 如果content含有帶有+-的式子

next_content_add_sub = next_content_add_sub.group()

print('next_content_add_sub:', next_content_add_sub)

add_sub_content = add_sub(next_content_add_sub) # 計算出帶有-+的式子

print('add_sub_content:', add_sub_content)

add_sub_content = str(add_sub_content)

content = re.sub('-?\d+\.?\d*[-+]-?\d+\.?\d*', str(add_sub_content), content, count=1) # 把帶有-+的式子計算出來後替換掉

print('content:', content)

continue

else:

break

return content

def add_sub(content):

if '+' in content:

content = content.split('+')

print(content)

content = float(content[0]) + float(content[1])

return content

elif '-' in content:

content = content.split('-')

# 減法情況有多種

if content[0] == '-' and content[2] == '-':

# content = content.split('-')

print(content)

content = -float(content[1]) - float(content[-1])

return content

if content[0] == '-':

# content = content.split('-')

print(content)

content = -float(content[1]) - float(content[-1])

return content

if content[1] == '-' and content[2] == '-':

# content = content.split('-')

print(content)

content = -float(content[0]) + float(content[-1])

return content

if content[1] == '':

# content = content.split('-')

print(content)

content = float(content[0]) - float(content[2])

return content

if content[0] == '' and content[2] != '':

print(content)

content = -float(content[1]) - float(content[2])

return content

if content[0] == '' and content[2] == '':

print(content)

content = -float(content[1]) + float(content[3])

return content

else:

# content = content.split('-')

print(content)

content = float(content[0]) - float(content[1])

return content

def mul_div(content):

if '*' in content:

content = content.split('*')

print(content)

content = float(content[0]) * float(content[1])

return content

elif '/' in content:

content = content.split('/')

print(content)

content = float(content[0]) / float(content[1])

return content

# expression = '1-2*((60+2*(-3-40.0/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))'

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)'

answer = arithmetic(expression)

print(answer)

字串輸入計算器

一般會在喜歡考字串的筆試中遇到。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 ...

py字串的計算器,

參照乙個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.su...