Python简单计算器
时间: 2023-11-29 19:45:20 浏览: 75
简单的Python计算器
以下是一个简单的Python计算器的实现,可以进行加减乘除四则运算,同时支持括号的使用:
```python
def calculate(expression):
# 定义数字栈和运算符栈
num_stack = []
op_stack = []
# 定义运算符优先级
priority = {'+': 1, '-': 1, '*': 2, '/': 2}
# 定义数字字符串和运算符字符串
num_str = ''
op_str = '+'
# 遍历表达式
for i in range(len(expression)):
# 如果当前字符是数字或小数点,将其加入数字字符串中
if expression[i].isdigit() or expression[i] == '.':
num_str += expression[i]
# 如果当前字符是运算符或括号
if expression[i] in ['+', '-', '*', '/', '(', ')'] or i == len(expression) - 1:
# 如果数字字符串不为空,将其转换为数字并加入数字栈中
if num_str:
num_stack.append(float(num_str))
num_str = ''
# 如果当前字符是左括号,将其加入运算符栈中
if expression[i] == '(':
op_stack.append(expression[i])
# 如果当前字符是右括号,弹出运算符栈中的运算符和数字栈中的数字进行计算,直到遇到左括号
elif expression[i] == ')':
while op_stack[-1] != '(':
num2 = num_stack.pop()
num1 = num_stack.pop()
op = op_stack.pop()
num_stack.append(calculate_op(num1, num2, op))
op_stack.pop()
# 如果当前字符是运算符,弹出运算符栈中的运算符和数字栈中的数字进行计算,直到运算符栈为空或者栈顶运算符优先级小于当前运算符
elif expression[i] in ['+', '-', '*', '/']:
while op_stack and op_stack[-1] != '(' and priority[op_stack[-1]] >= priority[expression[i]]:
num2 = num_stack.pop()
num1 = num_stack.pop()
op = op_stack.pop()
num_stack.append(calculate_op(num1, num2, op))
op_stack.append(expression[i])
# 遍历完表达式后,弹出运算符栈中的运算符和数字栈中的数字进行计算,直到运算符栈为空
while op_stack:
num2 = num_stack.pop()
num1 = num_stack.pop()
op = op_stack.pop()
num_stack.append(calculate_op(num1, num2, op))
# 返回数字栈中的最后一个数字,即为计算结果
return num_stack[-1]
def calculate_op(num1, num2, op):
# 根据运算符进行计算
if op == '+':
return num1 + num2
elif op == '-':
return num1 - num2
elif op == '*':
return num1 * num2
elif op == '/':
return num1 / num2
# 测试
expression = '3+4*2/(1-5)^2'
result = calculate(expression)
print(result) # 输出:3.5
```
阅读全文