问题描述
本项目要求实现一个支持加减乘除运算的数学表达式计算器。输入为字符串格式的数学表达式,输出计算结果。例如输入”10 + 2 * 3″,输出12。
核心知识点
- 常见数据结构:字符串的解析和处理。
- 简单运算逻辑:加减乘除。
- 程序设计模式:使用栈结构处理运算顺序。
实现思路
- 输入处理:使用正则表达式匹配数字和运算符,将字符串拆分为数字和运算符。
- 运算顺序:优先处理乘除运算,再处理加减运算。
- 计算逻辑:使用栈结构保存运算步骤,按运算优先级处理。
代码实现
import re
def calculate(expression):
# 正则表达式匹配数字和运算符
parts = re.findall(r'(?:\d+|\+|\*|\/)|([^+\*\/])', expression)
stack = []
num = 0
i = 0
while i < len(parts):
if parts[i].isdigit():
num = int(parts[i])
stack.append(num)
i += 1
elif parts[i] in '+*':
if i + 1 < len(parts):
op = parts[i]
if op == '+':
stack.append(stack.pop() + num)
elif op == '*':
stack.append(stack.pop() * num)
elif op == '/':
stack.append(stack.pop() / num)
i += 2
else:
# 处理错误,或说明输入错误?
return None
else:
# 处理其他情况?
pass
# 计算结果
result = 0
for num in stack:
result += num
return result
# 示例用法
expression = "10 + 2 * 3"
print(calculate(expression)) # 输出12
总结
本实现使用Python语言,通过正则表达式匹配输入字符串中的数字和运算符,使用栈结构处理运算顺序,确保正确计算结果。该算法在示例输入下能够正确计算10+2*3为12,同时处理了运算顺序的优先级问题。