master
/ 2.6.1 逻辑值测试.ipynb

2.6.1 逻辑值测试.ipynb @masterview markup · raw · history · blame

Notebook

逻辑值测试

Python中代表真值的布尔对象称为布尔(bool)类型,布尔类型只有两个常量实例:True和False。内置函数 bool() 可将任意值转换为布尔值。bool 是 int 的子类, 在许多数字场景下,True 和 Fasle 分别对应于整数“1”和“0”, 但是,一般建议使用 int() 显式地执行转换再进行运算。

In [1]:
print(bool(100))             # bool() 可将任意值转换为布尔值,True
print(True == 1)             # True 对应于整数“1”,比较运算结果为True
print(False == 0)            # Fasle 对应于整数“0”,比较运算结果为True
print(5 + True)              # 5 + 1,输出值为6
print(True * 5 + False * 2)  # 1 * 5 + 0 * 2,输出值为5
print(int(True) * 5 + int(False) * 2)  # 规范用法,等价于1 * 5 + 0 * 2,输出值为5
True
True
True
6
5
5

python中__任何对象都能直接进行逻辑(真假)值的测试__,而不需要额外的类型转换,用于__if__或者__while__语句的条件判断,也可以做为__布尔(逻辑)运算符__的操作数。</font>

对象的逻辑(真假)值测试的结果为__布尔类型__(bool),所以对象是不管什么类型,其逻辑值检测的结果必然是__True____False__中的一个。</font>

在python中逻辑值的测试结果可以通过调用__内置函数bool()__来确认。</font>

In [2]:
print(bool(3.14))   # True
print(bool(100))    # True
print(bool(3+4j))   # True
print(bool('123'))  # True
print(bool(0))      # False
True
True
True
True
False

利用if或while条件表达式或通过逻辑运算,任何对象都能被用于逻辑值检测。逻辑值检测的结果只有True和False。一个对象会被视为具有真值,除非其所属的类定义了在对象上调用时返回 False 的 bool() 方法或者返回零的 len() 方法。 以下基本完整地列出了具有假值的内置对象: Python中,除以下几种情形以外,__其他对象__的真值测试结果均为__True__:

  • 常量 __None__ 或者 __False__

其中,None是一个特殊的常量,起到空的占位作用,它有自己的数据类型NoneType。None不是False、不是0、不是空字符串。None是一个特殊的常量,起到空的占位作用,他有自己的数据类型NoneType。

  • 任何数值类型的__0__

Python中一切值为0的数值类型的真值测试结果均为False。包括: 0、0.0、0j、Decimal(0)、 Fraction(0, 1))。等。

  • __空对象__

Python中一切都是对象,一切空对象如:''、 ()、[]、 range(0)、{}、set()的真值测试结果均为False。
空对象包括:
空字符串
空序列
空字典
空集合
空对象等。

In [1]:
from decimal import Decimal     # decimal模块中的小数函数Decimal
from fractions import Fraction  # fractions模块中的分数函数Fraction


print(bool(0))                  # 整数0,False
print(bool(0.0))                # 浮点数0.0与数字0等值,False
print(bool(0j))                 # 复数0j,False
print(bool(Fraction(0, 1)))     # Fraction(0,1)表示分子为0分数,0/1,False
print(bool(Decimal(0)))         # Decimal(0) 表示0,False

print(bool('hello'))            # 非空字符串,True
print(bool(100))                # 非0数字,True
print(bool(' '))                # 空格是非空字符串,True

print(bool(''))                 # 空字符串,False
print(bool(()))                 # 空元组,False
print(bool([]))                 # 空列表,False
print(bool({}))                 # 空字典,False
print(bool(set()))              # 空集合,False
print(bool(range(0)))           # 空 range,False

print(bool(None))               # None类型,False
print(bool(False))              # False

练一练

完成下面的程序,判断输入的正整数是否为奇数。

用户输入一个正整数,若该数为奇数,则输出True;若该数为偶数,则输出False。

提示
奇数对2取模结果为1,真值测试为True;
偶数对2取模结果为0,真值测试为False。 所以只需要将整数对2取模(n % 2)做为bool()的参数进行输出即可

In [2]:
n = int(input())
# 补充代码,实现n为奇数时,输出True;否则输出False

内置函数all()用于判断给定的可迭代参数iterable中的所有元素是否都为 True。如果所有元素是否都为 True,函数返回 True,否则返回 False。

In [ ]:
print(all([1, 2, 3]))  # 输出: True
print(all([0, 1, 2]))  # 输出: False,因为0是False

内置函数any() 用于判断给定的可迭代参数 iterable 中的任一元素是否为真。如果有一个元素为 True,则返回 True,否则返回 False。

In [ ]:
print(any([0, 0, 1]))     # 输出: True
print(any([0, 0, None]))  # 输出: False
In [ ]: