本质上还是把中缀表达式转化为表达式,然后判断运算优先级进行计算。转化的过程我们可以利用栈的先入后出的特性去解决这个问题。
废话不多说,直接上代码:
# 存储运算符
ops = []
# 存储数字
nums = []
def cal():
op = ops.pop()
num1 = nums.pop()
num2 = nums.pop()
if op == "+":
nums.append(num1 + num2)
elif op == "-":
nums.append(num2 - num1)
elif op == "*":
nums.append(num1 * num2)
elif op == "/":
nums.append(num2 / num1)
def main():
# 输入表达式
experssion = input("请输入运算表达式:")
for epn in experssion:
if epn == "+" or epn == "-":
while len(ops) > 0 and (ops[-1] == "*" or ops[-1] == "/" or ops[-1] == "+" or ops[-1] == "-"):
cal()
ops.append(epn)
elif epn == "*" or epn == "/":
while len(ops) > 0 and (ops[-1] == "*" or ops[-1] == "/"):
cal()
ops.append(epn)
elif epn == "(":
ops.append(epn)
elif epn == ")":
while ops[-1] != "(":
cal()
ops.pop()
else:
nums.append(int(epn))
while len(ops) > 0:
cal()
print(nums.pop())
if __name__ == "__main__":
main()