def smartArithmetic1():
#x存储表达式
#loc记录当前读取位置
#count用于将括号和括转进行匹配
#locStart记录被括号括起来的整体的起始位置,locEnd则记录结束位置(不包括那一对括号)
x = input("input your expression")
def cal(exp):
loc = 0
count = 0
# 读入第一个数字/整体(被括号括起来的)
firstNum = exp[loc]
if firstNum != "(":
result = int(firstNum)
loc += 1
else:
locStart = loc + 1
count += 1 # 为了将( 与 ) 进行匹配
while count != 0:
loc += 1
if exp[loc] == "(":
count += 1
elif exp[loc] == ")":
count -= 1
locEnd = loc
loc += 1
result = cal(exp[locStart:locEnd])
while loc < len(exp):
operator = exp[loc]
loc += 1
#完善第一个整体,即若后面有跟*或者/时读进来计算为一个整体
while operator == "*" or operator =="/":
secNum = exp[loc]
if secNum != "(":
loc += 1
else:
locStart = loc+1
count += 1#为了将( 与 ) 进行匹配
while count != 0:
loc += 1
if exp[loc] == "(":
count += 1
elif exp[loc] == ")":
count -= 1
locEnd = loc
loc += 1
secNum = cal(exp[locStart:locEnd])
if operator == "*":
result = result * int(secNum)
else:
result = result / int(secNum)
if loc >= len(exp):
break
operator = exp[loc]
loc += 1
#加号或者减号
operator1 = operator
if loc >= len(exp):
break
secNum = exp[loc]
if secNum != "(":
secNum = int(secNum)
loc += 1
else:
locStart = loc + 1
count += 1 # 为了将( 与 ) 进行匹配
while count != 0:
loc += 1
if exp[loc] == "(":
count += 1
elif exp[loc] == ")":
count -= 1
locEnd = loc
loc += 1
secNum = cal(exp[locStart:locEnd])
#完善第二个加数/减数
if loc < len(exp):
operator = exp[loc]
loc += 1
flag = False
while operator == "*" or operator =="/":
flag = True
thirdNum = exp[loc]
if thirdNum != "(":
loc += 1
else:
locStart = loc+1
count += 1#为了将( 与 ) 进行匹配
while count != 0:
loc += 1
if exp[loc] == "(":
count += 1
elif exp[loc] == ")":
count -= 1
locEnd = loc
loc += 1
thirdNum = cal(exp[locStart:locEnd])
if operator == "*":
secNum = secNum * int(thirdNum)
else:
secNum = secNum / int(thirdNum)
if loc >= len(exp):
break
operator = exp[loc]
loc += 1
if not flag:
loc -= 1
if operator1 == "+":
result += int(secNum)
else:
result -= int(secNum)
if loc >= len(exp):
break
return result
return cal(x)
qqq=smartArithmetic1()
print(qqq)
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。