Python 布尔类型
程序经常需要记录只有两种结果的状态。例如:用户是否登录、课程是否完成、输入内容是否为空。
Python 使用布尔类型 bool 表示这类状态,它只有两个值:
True:条件成立,也叫真False:条件不成立,也叫假
先看一个登录状态:
is_logged_in = True
if is_logged_in:
print("已经登录")
else:
print("请先登录")运行结果:
已经登录当 is_logged_in 是 True 时,程序输出“已经登录”;改成 False 后,程序会执行另一条分支。if 的完整用法会在流程控制章节中讲解,这里先观察布尔值怎样影响程序的选择。
True 与 False
布尔值可以像数字和字符串一样保存到变量中:
is_logged_in = True
is_course_finished = False
print(is_logged_in)
print(is_course_finished)
print(type(is_logged_in))运行结果:
True
False
<class 'bool'>布尔变量通常用能够表达判断含义的名字,例如:
is_logged_in:是否已经登录has_permission:是否拥有权限can_submit:是否可以提交
这样的变量名读起来像一个可以回答“是”或“否”的问题,更容易看出它保存的是布尔值。
注意大小写
True 和 False 的首字母必须大写。下面的写法会被 Python 当成变量名,并出现 NameError:
is_logged_in = true
is_course_finished = false正确写法是:
is_logged_in = True
is_course_finished = False比较运算也会产生布尔值:
score = 85
is_passed = score >= 60
print(is_passed)
print(type(is_passed))运行结果:
True
<class 'bool'>score >= 60 用来判断成绩是否大于或等于 60,结果会赋值给 is_passed。比较运算符会在下一节集中讲解。
bool() 与真假转换
使用 bool() 可以查看一个值会被当成 True 还是 False:
print(bool(None))
print(bool(0))
print(bool(1))
print(bool(""))
print(bool("Python"))
print(bool([]))
print(bool([1, 2, 3]))运行结果:
False
False
True
False
True
False
True当前阶段先记住下面的规律:
None会被转换为False- 数字
0会被转换为False - 空字符串
""和空列表[]会被转换为False - 非零数字、非空字符串和非空列表通常会被转换为
True
函数和普通对象通常也会被当成 True。这部分暂时不需要展开,学习函数和类以后再回来看会更容易理解。
非空字符串不代表内容正确
bool() 判断字符串时,只关心它是不是空字符串,不会理解文字表达的含义:
print(bool("False"))
print(bool("0"))
print(bool(" "))运行结果:
True
True
True"False"、"0" 和只包含空格的字符串都有内容,所以结果都是 True。
在条件判断中使用布尔值
布尔值最常见的用途是控制程序是否执行某段代码。
例如,判断用户有没有输入姓名:
username = input("请输入用户名:")
if username:
print("用户名输入成功")
else:
print("用户名不能为空")这里的 if username: 会把 username 按照 bool(username) 的规则判断:
- 输入了内容,非空字符串会被当成
True - 直接按回车,空字符串会被当成
False
因此,不需要写成下面这种形式:
if username != "":
print("用户名输入成功")两种写法都能判断空字符串,但 if username: 更简洁,也更符合 Python 中的常见写法。
如果用户只输入空格,字符串仍然不是空的。上一节学过的 strip() 可以先去掉字符串两端的空白:
username = input("请输入用户名:").strip()
if username:
print("用户名输入成功")
else:
print("用户名不能为空")现在,无论直接按回车,还是只输入空格,都会进入“用户名不能为空”的分支。
布尔值与数字
在 Python 中,bool 是 int 的子类。因此,True 和 1 相等,False 和 0 相等:
print(True == 1)
print(False == 0)
print(isinstance(True, int))运行结果:
True
True
True这个关系主要用于理解 Python 的类型设计。实际编程时,布尔值应该用来表达“成立或不成立”,不要为了省事把它和数字混在一起,否则代码会变得难以理解。
小结
本节课最核心的是掌握 4 件事:
- 布尔类型
bool只有True和False两个值 0、None和空内容通常会被当成False- 非零数字和非空内容通常会被当成
True - 布尔值可以直接用于
if判断,控制程序执行不同分支
下一节学习运算符后,我们就可以通过比较和逻辑运算得到更多布尔结果。