算数表达式求值过程的代码
时间: 2024-02-05 15:12:16 浏览: 20
以下是一个简单的算数表达式求值过程的代码示例,仅供参考:
```python
# 定义栈类
class Stack:
def __init__(self):
self.items = []
def is_empty(self):
return len(self.items) == 0
def push(self, item):
self.items.append(item)
def pop(self):
if not self.is_empty():
return self.items.pop()
else:
return None
def peek(self):
if not self.is_empty():
return self.items[-1]
else:
return None
def size(self):
return len(self.items)
# 定义操作符优先级
priority = {
'+': 1,
'-': 1,
'*': 2,
'/': 2,
'(': 0,
}
# 定义将中缀表达式转换为后缀表达式的函数
def infix_to_postfix(expression):
stack = Stack()
output = []
for item in expression:
if item.isdigit():
output.append(item)
elif item == '(':
stack.push(item)
elif item == ')':
while True:
op = stack.pop()
if op == '(':
break
output.append(op)
else:
while not stack.is_empty() and priority[item] <= priority[stack.peek()]:
output.append(stack.pop())
stack.push(item)
while not stack.is_empty():
output.append(stack.pop())
return output
# 定义求后缀表达式值的函数
def postfix_eval(expression):
stack = Stack()
for item in expression:
if item.isdigit():
stack.push(int(item))
else:
b = stack.pop()
a = stack.pop()
if item == '+':
stack.push(a + b)
elif item == '-':
stack.push(a - b)
elif item == '*':
stack.push(a * b)
elif item == '/':
stack.push(a / b)
return stack.pop()
# 测试样例
expression = '3+5*(7-2)'
postfix_expression = infix_to_postfix(expression)
result = postfix_eval(postfix_expression)
print(result) # 输出 28
```
以上代码中,`infix_to_postfix` 函数将中缀表达式转换为后缀表达式,`postfix_eval` 函数求后缀表达式的值。运行测试样例,输出结果为 28。