设计一个代码完成计算器设计
时间: 2024-02-13 16:06:00 浏览: 28
好的,这里给你一个Python代码的示例,可以实现一个简单的计算器:
```python
import math
# 定义操作符的优先级
priority = {'+': 1, '-': 1, '*': 2, '/': 2, '%': 2, '√': 3, '^': 4}
# 判断是否为数字
def is_number(token):
try:
float(token)
return True
except ValueError:
return False
# 将中缀表达式转换成后缀表达式
def infix_to_postfix(infix_expr):
postfix_expr = []
op_stack = []
tokens = infix_expr.split()
for token in tokens:
if is_number(token):
postfix_expr.append(float(token))
elif token == '(':
op_stack.append(token)
elif token == ')':
top_token = op_stack.pop()
while top_token != '(':
postfix_expr.append(top_token)
top_token = op_stack.pop()
else:
while op_stack and priority[op_stack[-1]] >= priority[token]:
postfix_expr.append(op_stack.pop())
op_stack.append(token)
while op_stack:
postfix_expr.append(op_stack.pop())
return postfix_expr
# 计算后缀表达式的值
def calculate_postfix(postfix_expr):
num_stack = []
for token in postfix_expr:
if is_number(token):
num_stack.append(token)
else:
if token == '+':
num2 = num_stack.pop()
num1 = num_stack.pop()
num_stack.append(num1 + num2)
elif token == '-':
num2 = num_stack.pop()
num1 = num_stack.pop()
num_stack.append(num1 - num2)
elif token == '*':
num2 = num_stack.pop()
num1 = num_stack.pop()
num_stack.append(num1 * num2)
elif token == '/':
num2 = num_stack.pop()
num1 = num_stack.pop()
num_stack.append(num1 / num2)
elif token == '%':
num2 = num_stack.pop()
num1 = num_stack.pop()
num_stack.append(num1 % num2)
elif token == '√':
num = num_stack.pop()
num_stack.append(math.sqrt(num))
elif token == '^':
num2 = num_stack.pop()
num1 = num_stack.pop()
num_stack.append(num1 ** num2)
return num_stack.pop()
# 主程序
while True:
infix_expr = input('请输入中缀表达式(支持的操作符包括+、-、*、/、%、(、)、√和^):')
postfix_expr = infix_to_postfix(infix_expr)
try:
result = calculate_postfix(postfix_expr)
print('计算结果为:', result)
except:
print('表达式非法,请重新输入!')
```
这个代码实现了一个简单的计算器,它可以接受用户输入的中缀表达式,并将其转换为后缀表达式进行计算。如果表达式非法,则会输出错误信息。你可以在此基础上进行修改和扩展,实现更复杂的功能,比如添加界面等。