Python华为笔试题后缀表达式求值

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-'))


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值