jmu-python-简单计算器 分数 20 全屏浏览题目 作者 linli 单位 集美大学 输入一个表达式字符串,计算其结果 输入格式: 行1:输入字符串数目 下面分别输入要计算的表达式 输出格式: 输出计算结果,结果保留2位小数。对于异常数据能输出相应异常信息。
时间: 2024-02-28 21:56:45 浏览: 81
表达式代码,可以输入相关的字符串计算出结果
好的,下面是一个参考实现的代码,代码中有注释来帮助理解:
```python
import re
# 定义运算符优先级
priority = {'+': 1, '-': 1, '*': 2, '/': 2}
# 定义计算函数
def calculate(num1, num2, operator):
if operator == '+':
return num1 + num2
elif operator == '-':
return num1 - num2
elif operator == '*':
return num1 * num2
elif operator == '/':
return num1 / num2
# 读取输入字符串数目
n = int(input())
for i in range(n):
# 读取输入表达式字符串
expression = input().strip()
# 使用正则表达式将表达式字符串拆分成数字和运算符
tokens = re.findall(r'[\d\.]+|\+|\-|\*|\/', expression)
# 定义数字栈和运算符栈
num_stack = []
op_stack = []
# 遍历拆分后的每一个token
for token in tokens:
if re.match(r'[\d\.]+', token):
# 如果是数字,直接入数字栈
num_stack.append(float(token))
else:
# 如果是运算符,弹出数字栈的两个数进行运算
while op_stack and priority[op_stack[-1]] >= priority[token]:
num2 = num_stack.pop()
num1 = num_stack.pop()
operator = op_stack.pop()
result = calculate(num1, num2, operator)
num_stack.append(result)
op_stack.append(token)
# 处理剩余的运算符和数字
while op_stack:
num2 = num_stack.pop()
num1 = num_stack.pop()
operator = op_stack.pop()
result = calculate(num1, num2, operator)
num_stack.append(result)
# 输出结果,保留两位小数
print('%.2f' % num_stack[0])
```
需要注意的是,这个实现只支持四则运算,如果需要支持更多的运算符,需要在 priority 字典中添加相应的优先级。同时,这个实现也没有对输入的表达式字符串进行错误处理,如果输入的字符串不符合规范,程序可能会出现错误。需要在实际使用中对这些问题进行进一步的处理。
阅读全文