python入门 实现计算器功能

# Author:Wang Zhuoqun
#实现计算器

import re,json

stra = "1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))"

def con(stra):
"""
将其转化为可用格式
"""
strb = re.sub("-", "+-", stra)
strb = re.sub("/", "*/", strb)
return strb

def MUL(str1):
"""
实现功能乘除
"""
mul0 = 1.0
list_mul = re.split("\*", str1)
for i in range(len(list_mul)):
if "/" in list_mul[i]:
list_mul[i] = list_mul[i].strip("/")
list_mul[i] = str(1 / float(list_mul[i]))
else:
pass
for i in list_mul:
i = float(i)
mul0 = mul0 * i
mul0 = str(mul0)
return mul0

def add(str1):
"""
实现功能加减
"""
add0 = 0.0
list_add = re.split("\+", str1)
for i in list_add:
if i == "":
pass
else:
i = float(i)
add0 = add0 + i
add0 = str(add0)
return add0

strc = con(stra)

n = 1
while n>0:
strb = strc
if "(" in strc:
m = 1
while m >0:
if "(" in strb:
str1 = re.search("\(.+\)", strb).group()
str1 = str1[1:]
strb = str1
else:
m = 0

str2 = re.search("\).+", str1)
if str2 == None:
str1 = str1.strip(")")
else:
str2 = str2.group()
str1 = str1.replace(str2, '')
str3 = str1

if "--" in str1:
str1 = str1.replace("--", "")
else:
pass
if "*" in str1:
list1 = re.split("\+", str1)
for j in list1:
if "*" in j :
j1 = MUL(j)
str1 = str1.replace(j,j1)
else:
pass
else:
pass
if "+" in str1:
j1 = add(str1)
str3 = "("+ str3 +")"
strc = strc.replace(str3,j1)
else:
pass
else:
if "*" in strc:
list1 = re.split("\+", strc)
for j in list1:
if "*" in j :
j1 = MUL(j)
strc = strc.replace(j,j1)
else:
pass
else:
pass
if "+" in strc:
j1 = add(strc)
strc = strc.replace(strc,j1)
print(strc)
else:
pass
n = 0

猜你喜欢

转载自www.cnblogs.com/wang0424/p/10840713.html