习题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