Python 基础语法与数据类型(四) - 布尔类型 (bool) 与逻辑运算符 (and, or, not) 和类型转换
文章目录
- 布尔类型 (bool)
- 逻辑运算符 (and, or, not)
- 布尔值的“真值”判断 (Truthiness / Falsiness)
- 类型转换 (Type Casting)
- 总结
在前面的文章中,我们学习了数字类型(整型、浮点型)和字符串。今天,我们要介绍另一种非常基础且极其重要的数据类型:布尔类型 (bool)。布尔类型是编程中进行逻辑判断和控制程序流程的基础。我们还会学习如何使用逻辑运算符组合布尔值,以及如何在不同数据类型之间进行转换。
布尔类型 (bool)
布尔类型只有两个可能的值:True
和 False
。它们是 Python 内置的关键字,注意首字母大写。
布尔值通常是比较表达式的结果。在 Python 中,可以使用各种比较运算符来生成布尔值:
==
:等于!=
:不等于>
:大于<
:小于>=
:大于或等于<=
:小于或等于
让我们看一些例子:
# 比较数字
print(10 == 10) # 输出: True
print(5 > 10) # 输出: False
print(20 <= 20) # 输出: True
print(100 != 50) # 输出: True# 比较字符串 (按字典顺序)
print("apple" == "apple") # 输出: True
print("apple" > "banana") # 输出: False
print("Python" != "python") # 输出: True (区分大小写)# 比较其他类型
print(True == 1) # 输出: True (在数值语境下,True 被视为 1,False 被视为 0)
print(False == 0) # 输出: True
print("Hello" == "hello") # 输出: False# 获取变量的布尔值
is_equal = (10 == 10)
is_greater = (5 > 10)
print(is_equal) # 输出: True
print(is_greater) # 输出: Falseprint(type(is_equal)) # 输出: <class 'bool'>
布尔值是程序做出决策的基石。例如,在条件语句(如 if
语句,我们后面会学到)中,程序会根据布尔值的真假来决定执行哪部分代码。
逻辑运算符 (and, or, not)
逻辑运算符用于组合或修改布尔表达式。Python 中有三个主要的逻辑运算符:and
、or
和 not
。
-
and
(逻辑与):
如果and
两边的布尔值都为True
,则结果为True
;否则,结果为False
。A B A and B True True True True False False False True False False False False print(True and True) # 输出: True print(True and False) # 输出: False print(False and True) # 输出: False print(False and False) # 输出: False# 结合比较表达式 age = 25 has_ticket = True is_allowed = (age >= 18) and has_ticket print(is_allowed) # 输出: True (因为 age >= 18 是 True,has_ticket 是 True)age = 16 is_allowed = (age >= 18) and has_ticket print(is_allowed) # 输出: False (因为 age >= 18 是 False)
短路求值 (Short-circuit Evaluation):
and
运算符有一个特性叫做短路求值。如果and
左边的表达式已经为False
,那么 Python 就不会再计算右边的表达式了,因为无论右边是什么,整个and
表达式的结果都一定是False
。# 示例: 如果第一个条件是 False,第二个条件(可能导致错误)就不会执行 # def might_raise_error(): # print("Executing second part...") # # ... 这里的代码可能出错 ... # return True# print(False and might_raise_error()) # might_raise_error() 不会执行,直接输出 False
-
or
(逻辑或):
如果or
两边的布尔值至少有一个为True
,则结果为True
;只有当两者都为False
时,结果才为False
。A B A or B True True True True False True False True True False False False print(True or True) # 输出: True print(True or False) # 输出: True print(False or True) # 输出: True print(False or False) # 输出: False# 结合比较表达式 is_weekend = False is_holiday = True is_day_off = is_weekend or is_holiday print(is_day_off) # 输出: True (因为 is_holiday 是 True)is_weekend = False is_holiday = False is_day_off = is_weekend or is_holiday print(is_day_off) # 输出: False
短路求值 (Short-circuit Evaluation):
or
运算符也有短路求值特性。如果or
左边的表达式已经为True
,那么 Python 就不会再计算右边的表达式了,因为无论右边是什么,整个or
表达式的结果都一定是True
。# 示例: 如果第一个条件是 True,第二个条件就不会执行 # def might_raise_error(): # print("Executing second part...") # return False# print(True or might_raise_error()) # might_raise_error() 不会执行,直接输出 True
-
not
(逻辑非):
not
运算符是一元运算符(只作用于一个布尔值),它会颠倒布尔值的结果。not True
是False
,not False
是True
。A not A True False False True print(not True) # 输出: False print(not False) # 输出: True# 结合比较表达式 is_adult = (age >= 18) is_child = not is_adult print(is_child) # 输出: True (如果 age 是 16)
运算符优先级: 逻辑运算符也有优先级。not
> and
> or
。这意味着在一个表达式中,not
会最先计算,然后是 and
,最后是 or
。为了避免混淆和确保逻辑正确,强烈建议在需要的地方使用圆括号 ()
来明确运算顺序。
# 示例:使用圆括号提高可读性和控制顺序
is_eligible = (age >= 18 and has_ticket) or is_vip
布尔值的“真值”判断 (Truthiness / Falsiness)
这是 Python 中一个非常重要的概念。在需要布尔值的上下文(比如 if
语句、while
循环条件)中,Python 不仅仅接受显式的 True
或 False
。任何值都可以被解释为一个布尔值。Python 会判断这个值是“像真值”还是“像假值”。
以下是 Python 中被视为“假值 (Falsy)” 的常见情况:
None
False
- 数字类型的零:
0
(整型),0.0
(浮点型),0j
(复数) - 空序列:
''
或""
(空字符串),[]
(空列表),()
(空元组),{}
(空字典),set()
(空集合) - 空范围对象:
range(0)
所有其他值都被视为“真值 (Truthy)”。
你可以使用内置的 bool()
函数来显式地查看一个值的布尔解释:
# 假值示例
print(bool(None)) # 输出: False
print(bool(False)) # 输出: False
print(bool(0)) # 输出: False
print(bool(0.0)) # 输出: False
print(bool("")) # 输出: False
print(bool('')) # 输出: False
print(bool([])) # 输出: False
print(bool(())) # 输出: False
print(bool({})) # 输出: False
print(bool(set())) # 输出: False
print(bool(range(0))) # 输出: False# 真值示例
print(bool(True)) # 输出: True
print(bool(1)) # 输出: True (任何非零数字)
print(bool(-5)) # 输出: True
print(bool(3.14)) # 输出: True
print(bool("Hello")) # 输出: True (非空字符串)
print(bool([1, 2])) # 输出: True (非空列表)
print(bool((1,))) # 输出: True (非空元组)
print(bool({"a": 1})) # 输出: True (非空字典)
理解真值判断对于编写简洁的 Python 代码非常重要。例如,检查一个列表是否为空,可以直接写 if my_list:
而不是 if len(my_list) > 0:
。
类型转换 (Type Casting)
在编程中,我们经常需要在不同数据类型之间进行转换。Python 提供了内置函数来执行这些转换。我们已经看到了 bool()
函数,现在我们看看其他常用的转换函数:
int(x)
: 将x
转换为整数。float(x)
: 将x
转换为浮点数。str(x)
: 将x
转换为字符串。
1. 转换为整数 (int()
)
- 从浮点数转换:截断小数部分,只保留整数部分(不是四舍五入)。
- 从字符串转换:字符串必须是有效的整数表示(可选带正负号)。如果字符串不是有效的整数,会引发
ValueError
。 - 从布尔值转换:
True
转换为1
,False
转换为0
。
print(int(10.8)) # 输出: 10
print(int(-3.9)) # 输出: -3
print(int("123")) # 输出: 123
print(int("-45")) # 输出: -45
# print(int("12.3")) # 引发 ValueError
# print(int("abc")) # 引发 ValueError
print(int(True)) # 输出: 1
print(int(False)) # 输出: 0
2. 转换为浮点数 (float()
)
- 从整数转换:在整数后添加
.0
。 - 从字符串转换:字符串必须是有效的数字表示(整数或浮点数,可选带正负号,可选指数)。如果字符串不是有效的数字,会引发
ValueError
。 - 从布尔值转换:
True
转换为1.0
,False
转换为0.0
。
print(float(10)) # 输出: 10.0
print(float("12.34")) # 输出: 12.34
print(float("-5")) # 输出: -5.0
print(float("1e-3")) # 输出: 0.001 (科学计数法)
# print(float("abc")) # 引发 ValueError
print(float(True)) # 输出: 1.0
print(float(False)) # 输出: 0.0
3. 转换为字符串 (str()
)
- 这是最通用的转换函数。它可以将几乎任何类型的值转换为其字符串表示形式。
print(str(123)) # 输出: "123"
print(str(3.14)) # 输出: "3.14"
print(str(True)) # 输出: "True"
print(str([1, 2, 3])) # 输出: "[1, 2, 3]" (列表的字符串表示)
print(str({"a": 1})) # 输出: "{'a': 1}" (字典的字符串表示)
4. 转换为布尔值 (bool()
)
- 正如我们上面讨论的,
bool()
函数会根据一个值的“真值”规则返回True
或False
。
print(bool(100)) # 输出: True
print(bool(0)) # 输出: False
print(bool("Python")) # 输出: True
print(bool("")) # 输出: False
print(bool([1, 2])) # 输出: True
print(bool([])) # 输出: False
总结
在本文中,我们深入学习了:
- 布尔类型 (
bool
),它只有True
和False
两个值,通常由比较运算产生。 - 逻辑运算符 (
and
,or
,not
),用于组合和修改布尔表达式,并了解了它们的短路求值特性。 - 真值判断 (Truthiness/Falsiness),理解了在布尔上下文中,Python 如何将不同类型的值解释为
True
或False
。 - 常用的类型转换函数 (
int()
,float()
,str()
,bool()
),掌握了如何在基本数据类型之间进行转换。