计算器实现运算符优先级
时间: 2023-12-08 08:05:04 浏览: 168
实现计算器时,可以使用栈来处理运算符优先级。具体实现步骤如下:
1. 定义两个栈,一个用于存储数字,一个用于存储运算符。
2. 读入表达式,遇到数字时将其压入数字栈,遇到运算符时将其与运算符栈顶元素比较优先级:
- 如果当前运算符优先级高于栈顶运算符,将其压入运算符栈。
- 如果当前运算符优先级低于或等于栈顶运算符,弹出栈顶运算符,从数字栈中弹出两个数进行计算,将计算结果压回数字栈中,继续比较当前运算符与新的栈顶运算符的优先级。
3. 当表达式读完后,将运算符栈中剩余的运算符依次弹出,从数字栈中弹出两个数进行计算,将计算结果压回数字栈中。
4. 最终数字栈中剩下的元素即为计算结果。
下面是一个示例代码实现:
```python
def calculate(s):
stack_num = []
stack_op = []
i = 0
while i < len(s):
if s[i].isdigit():
j = i
while j < len(s) and s[j].isdigit():
j += 1
num = int(s[i:j])
stack_num.append(num)
i = j
elif s[i] in '+-*/':
while stack_op and priority(stack_op[-1]) >= priority(s[i]):
op = stack_op.pop()
num2 = stack_num.pop()
num1 = stack_num.pop()
res = compute(num1, num2, op)
stack_num.append(res)
stack_op.append(s[i])
i += 1
else:
i += 1
while stack_op:
op = stack_op.pop()
num2 = stack_num.pop()
num1 = stack_num.pop()
res = compute(num1, num2, op)
stack_num.append(res)
return stack_num[-1]
def priority(op):
if op in '+-':
return 1
elif op in '*/':
return 2
else:
return 0
def compute(num1, num2, op):
if op == '+':
return num1 + num2
elif op == '-':
return num1 - num2
elif op == '*':
return num1 * num2
elif op == '/':
return num1 // num2
```
该代码支持基本的加减乘除运算,并考虑了运算符的优先级。注意,该代码中除法运算采用整除操作,如果需要浮点数结果可以将 `//` 改为 `/`。
阅读全文