1.浮点数判断:工作中遇到类似下面逻辑判断
i = 1
while i!= 1.5:
i = i+0.1
print i
在想象中i应该停止在1.5就不输出了,但是实际的输出结果是无限循环。
这是因为在计算机的逻辑中,浮点数的存储规则决定了不是所有的浮点数都能准确表示,有些是不准确的,只是无限接近。如0.1转换为二进制表示形式为0.0001100110011.....后面1001无限循环。在内存中根据浮点数位数规定,多余部分直接被截断,因此当循环到第5此的时候i的实际值为1.5000000000000004,表达式i!=1.5为True,循环永远执行下去。
解决方法:浮点数的比较最好能够指明精度,或者使用Decomal来处理。
#限制精度 处理浮点数判断
i = 1.0
while i- 1.5<0:
i = i+0.1
print i
2.None值判断
a = [1,2,3]
c = list()
if a is not None and c is not None:
print a,c
输出结果为:[1,2,3][]
常量None的特殊性体现在它既不是0、False、空的列表、字典。其数据类型为NoneType,遵循单例模式,是唯一的,一次不能创建None对象。所有赋值为None的变量都相等,并且None与任何其他非None的对象比较结果都为False。
如需判断某个列表为空怎么办?
解决方案:
a = [1,2,3]
c = list()
if a and c :
print a,c
eles:
print "有值为空"