第 4 章
测试题
int() 函数总是向下取整(这个数左边的最大整数)。
在我们的温度转换程序中,可以这样做吗?
cel = float(5 / 9 (fahr - 32))
cel = 5 / 9 float(fahr - 32)
试试看,会发生什么:
>>> fahr = 75
>>> cel = float(5 / 9 * (fahr - 32))
>>> print cel
0.0
为什么不能正常工作?
要记住,括号里的一切会先完成。所以它会先这样:
75 - 32 = 43
然后再这样做:
5 / 9 = 0
因为它会从左到右计算,所以先完成 5/9 。因为 5 和 9 都是整数,所以 Python 会完成整除,将答案向下取整。由于这个答案小于 1,所以会取整为 0。然后得到:
0 * 43 = 0
接下来:
float(0) = 0.0
执行到 float() 时,已经太晚了——答案已经是 0 了!第二个公式也一样。
- 可以“骗过”int(),让它四舍五入而不是向下取整,只需将传入 int() 的数加 0.5。
右面是一个例子(交互模式中
>>> a = 13.2
>>> roundoff = int(a + 0.5)
>>> roundoff 13
>>> b = 13.7
>>> roundoff = int(b + 0.5)
>>> b 14
如果原先的数小于 13.5,int() 会得到一个小于 14 的数,这会向下取整为 13。
如果原来的数大于或者等于 13.5,int() 会得到一个等于或者大于 14 的数,这就会向下取整为 14。
动手试一试
- 可以使用 float() 将字符串转换为小数:
>>> a = float('12.34')
>>> print a
12.34
不过我们怎么能知道这是数而不是字符串呢?下面来检查类型:
>>> type(a)
<type 'float'>
- 可以使用 int() 把小数转换为整数:
>>> print int(56.78)
56
结果会向下取整。
- 可以使用 int() 把字符串转换为整数:
>>> a = int('75')
>>> print a
75
>>> type(a)
<type 'int'>
