python核心编程学习笔记-2016-07-23-01-习题5-6

这篇博客记录了Python核心编程的学习笔记,重点是习题5-6的简单计算器实现。文章提到了浮点型计算可能存在的问题,并指出使用decimal类型可以得到更精确的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

习题5-6

简单计算器

代码如下:

#-*-coding: utf-8-*-

# 计算器

# 根据输入结果进行计算
def cal(expr):
    L = expr.split()
    N1 = isIntorFloat(L[0])
    N2 = isIntorFloat(L[2])
    if L[1] == '+':
        return N1 + N2
    elif L[1] == '-':
        return N1 - N2
    elif L[1] == '*':
        return N1 * N2
    elif L[1] == '/':
        while True:
            try:
                N1 / N2
            except ZeroDivisionError, e:
                print "Divisor can't be zero.", e
                expr = getInput()
                L = expr.split()
                N1 = isIntorFloat(L[0])
                N2 = isIntorFloat(L[2])
            else:
                return N1 / N2
    elif L[1] == '%':
        while True:
            try:
                N1 % N2
            except ZeroDivisionError, e:
                print "Divisor can't be zero.", e
                expr = expr.split()
                L = expr.split()
                N1 = isIntorFloat(L[0])
                N2 = isIntorFloat(L[2])
            else:
                return N1 % N2
    elif L[1] == '**':
        return N1 ** N2

# 检查输入的两个数为整型还是浮点型
def isIntorFloat(str):
    try:
        n = int(str)
    except ValueError, e:
        n = float(str)
    finally:
        return n

# 输入
def getInput():
    while True:
        expr = raw_input("Please enter an expression: ")
        L = expr.split()
        if len(L) == 3:
            if isNumber(L[0]) and isOperation(L[1]) and isNumber(L[2]):
                return expr
            else:
                print "Enter a correct expression."
        else:
            print "Enter a correct expression."

# 判断输入的字符是否是数字
def isNumber(num):
    try:
        float(num)
    except ValueError, e:
        return False
    else:
        return True

# 判断输入的字符是否为运算符
def isOperation(oper):
    if oper in ['+', '-', '*', '/', '%', '**']:
        return True
    else:
        return False

if __name__ == "__main__":
    expr = getInput()
    print cal(expr)
要注意浮点型的取余运算,注意定义 a % b = r,即 a = k * b + r,a,b,r的类型可以是整型,也可以是浮点型,但是k必须是整型。

另外,计算机的浮点型问题依然要考虑, 比如:

>>> 2 % 0.1
0.099999999999


如果是用decimal类型,会给出我们期待的结果,如:

>>> from decimal import Decimal
>>> print 2 % Decimal('0.1')
0.0




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值