2017年试题
第三题:计算后序表达式,输入后序表达式字符串,输出表达式计算的结果(其中A~F表示10~15)。例如:
案例
输入
输出
案例一
32+5-
3+2-5
0
案例二
A5-3+
10-5+3
8
1. 读取输入结果字符串str
2. 将输入字符串转换为字符数组char[]
3. 判断每个字符
如果是数字,则直接入栈:arr[i] - ‘0’
如果是大写字符,则转换之后入栈:arr[i] - ‘A’
如果是运算符号:则弹出两个数值栈,然后根据符号计算结果后入栈
def doMath(op, op1, op2):
if op == "*":
return op1 * op2
elif op == "/":
return op1 / op2
elif op == "+":
return op1 + op2
else:
return op1 - op2
def postfixEval(postfixExpr):
operandStack = []
# tokenList = postfixExpr.split()
tokenList = list(postfixExpr)
for token in tokenList:
if token in "0123456789":
operandStack.append(int(token))
elif token in "ABCDEF":
operandStack.append(ord(token) - ord('A') + 10)
else:
operand2 = operandStack.pop() # 操作数2
operand1 = operandStack.pop() # 操作数1
result = doMath(token, operand1, operand2)
operandStack.append(result)
return operandStack.pop()
if __name__ == "__main__":
print(postfixEval('32+5-'))