输入一个表达式字符串,计算其结果 输入格式: 行1:输入字符串数目 下面分别输入要计算的表达式 输出格式: 输出计算结果,结果保留2位小数。对于异常数据能输出相应异常信息。
时间: 2024-02-28 13:57:00 浏览: 19
好的,您的问题是如何输入一个表达式字符串并计算其结果,我可以为您提供一个Python代码示例:
```python
import math
def postfix_eval(postfix_expr):
stack = []
for token in postfix_expr:
if token.isdigit():
stack.append(int(token))
else:
operand2 = stack.pop()
operand1 = stack.pop()
result = do_math(token, operand1, operand2)
stack.append(result)
return round(stack[0], 2)
def do_math(op, op1, op2):
if op == "+":
return op1 + op2
elif op == "-":
return op1 - op2
elif op == "*":
return op1 * op2
elif op == "/":
if op2 == 0:
raise ValueError("除数不能为0!")
return op1 / op2
elif op == "^":
return math.pow(op1, op2)
else:
raise ValueError("无效的运算符!")
def infix_to_postfix(infix_expr):
prec = {}
prec["^"] = 4
prec["*"] = 3
prec["/"] = 3
prec["+"] = 2
prec["-"] = 2
prec["("] = 1
opstack = []
postfixList = []
tokenList = infix_expr.split()
for token in tokenList:
if token.isdigit():
postfixList.append(token)
elif token == '(':
opstack.append(token)
elif token == ')':
topToken = opstack.pop()
while topToken != '(':
postfixList.append(topToken)
topToken = opstack.pop()
else:
while (len(opstack) != 0) and (prec[opstack[-1]] >= prec[token]):
postfixList.append(opstack.pop())
opstack.append(token)
while len(opstack) != 0:
postfixList.append(opstack.pop())
return postfixList
n = int(input())
for i in range(n):
expr = input()
try:
postfix_expr = infix_to_postfix(expr)
result = postfix_eval(postfix_expr)
print(result)
except ValueError as e:
print(str(e))
```
这个代码实现了将中缀表达式转换为后缀表达式,并计算后缀表达式的值。您可以通过输入多个表达式字符串来测试它。