KY129 简单计算器

KY129 简单计算器

import sys

for line in sys.stdin:
    if line.strip() == '0':
        break
    else:
        result = "{0:.2f}".format(eval(line.strip())) 
        print(result)
import sys
# 7 / 9 / 10 * 1 * 4 / 6 - 3 * 9 - 8 - 7
priority = {'+' : 0, "-" : 0, "*" : 1, "/" : 1}
def printEvaluation(line):
    line = line.split(' ')  # 去除多余空格
    opStack, numStack = list(), list()  # 操作符, 操作数
    for c in line:
        if c not in priority:  # 是数字
            numStack.append(c)  # 放入操作数
        else:  
            # 取运算符                                      
            if len(opStack)==0:  # 不含运算符
                opStack.append(c)  # 放入运算符
            elif priority[opStack[-1]]>=priority[c]:
                lastOp = opStack.pop()  # 运算符
                b = numStack.pop()
                a = numStack.pop()
                res = str(eval(a+lastOp+b))  # 执行加减乘除
                numStack.append(res)
                if len(opStack)==0:
                    opStack.append(c)  # 添加运算符
                elif priority[opStack[-1]]>=priority[c]:
                    lastOp = opStack.pop()  # 运算符
                    b = numStack.pop()
                    a = numStack.pop()
                    res = str(eval(a+lastOp+b))  # 执行加减乘除
                    numStack.append(res)
                    opStack.append(c)  # 添加运算符
                else:
                    opStack.append(c)  # 添加运算符
            else:
                opStack.append(c)  # 添加运算符
    while len(opStack)!=0:  # 含有运算符
        lastOp = opStack.pop()  # 取出运算符
        b = numStack.pop()
        a = numStack.pop()  
        res = str(eval(a+lastOp+b))  # 执行加减乘除
        numStack.append(res)      
    print("{0:.2f}".format(eval(numStack.pop())))

for line in sys.stdin:
    line = line.strip()
    if line == '0':
        break
    else:
        printEvaluation(line)

# 4 * 8 / 4 / 7 + 10 - 3 / 1 / 4 * 1 * 3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值