在Python中开始使用布尔逻辑
布尔逻辑是数学、工程和编程的重要组成部分。在大多数编程语言中,有专门的布尔数据类型。当你刚接触Python时,布尔值可能会让你感到困惑,因为它们在本语言中的具体工作方式。我们将探讨Python中布尔逻辑的方方面面。
理解布尔逻辑的基础知识
布尔逻辑是编程中决策的基础。归根结底,这取决于一个简单的问题。某事是真还是假?
这个概念起源于数学家乔治·布尔,他在19世纪开发了一个只使用两个值:真和假的代数逻辑系统。在计算机科学中,这种二元思维方式完美地转化为数字世界。这是因为计算机最终处理的是两种状态:开(1)和关(0)。
这不仅仅是计算机。还有许多现实世界中的类比遵循这个概念。灯泡可以是开着的或关着的。门可以是锁上的或未锁上的。当查看天气时,它可以是晴天或非晴天。这些都是布尔结果的例子。
在编程中,布尔逻辑使计算机能够“做出决定”。每当程序需要检查某些东西时,无论是验证密码、控制游戏机制,还是确定在线支付是否成功,它都依赖于布尔逻辑。如果没有布尔逻辑,计算机将只是盲目地处理数据。有了布尔逻辑,计算机可以对不同情况作出反应、分支和适应。
Python中的布尔值
现在你已经了解了布尔逻辑的概念,让我们看看它如何在 Python 中表现。在 Python 中,布尔值由两个特殊的关键字表示:
True
False
注意两个单词中的大写字母。这很重要,因为以小写写入true或false会导致Python错误,因为Python将它们视为未定义的变量。True和False属于Python内置的bool数据类型。
print(type(True))
print(type(False))
一个有趣的事实是,bool 实际上是 int 的子类。这意味着布尔值在某些情况下的表现类似于数字 1 和 0:
print(True == 1)
print(False == 0)
print(True + True)
print(False + 5)
在某些情况下,这可能会很有用,但如果您没有预料到它,也可能导致混淆。因此,虽然 Python 允许这种行为,但最好将布尔值视为逻辑值,而不是数字。
Python 提供了 bool() 函数,该函数将任何值转换为布尔值。这就是“真值”(truthy)和“假值”(falsy)概念发挥作用的地方。假值被视为 False。这些包括
0- <代码>0.0
- (空字符串)
[](空列表){}(空字典)无
其他所有东西都被认为是真(并评估为 True)。
print(bool(0))
print(bool(""))
print(bool([]))
print(bool(42))
print(bool("hi"))
print(bool([1, 2]))
Python中的逻辑运算符
到目前为止,我们已经看到 Python 有两个布尔值:True 和 False。但是我们如何在实际中使用它们呢?这就是逻辑运算符的作用。这些类型的运算符让我们可以比较值、检查关系,并提出是非问题。
比较运算符
比较运算符用于比较两个值。比较的结果总是一个布尔值(True 或 False。)以下是 Python 的所有比较运算符的完整列表:
操作员 |
意义 |
|---|---|
== | 等于 |
!= | 不等于 |
> | 大于 |
< | 少于 |
≥ |
大于等于 |
≤ | 小于或等于 |
让我们看看他们做的一些例子。
print(10 > 3)
print(10 < 3)
print(5 == 5)
print(5 != 5)
print(8 >= 8)
print(2 <= 1)
比较运算符不仅适用于数字,还适用于字符串和其他数据类型。
print("apple" == "apple")
print("apple" != "banana")
print("cat" < "dog")
身份运算符
虽然比较运算符检查两个值是否相等,但身份运算符检查两个变量是否实际上引用内存中的同一对象。Python 提供了两个身份运算符:
操作员 | 意义 |
|---|---|
| 如果两个变量指向同一个对象,则返回 |
| 如果它们指向不同的对象,则返回 |
一个快速的例子:
a = [1, 2, 3]
b = a
c = [1, 2, 3]
print(a == b)
print(a is b)
print(a is c)
在这里,a 和 b 不仅仅是相等,它们在内存中实际上是同一个列表。另一方面,a 和 c 可能具有相同的内容,但它们是两个不同的对象。这就是结果为 False 的原因。
成员运算符
成员运算符用于检查一个值是否存在于序列或集合中。如果找到该项,它们返回True,如果没有找到,则返回False。它们使你的代码更易读且更具表现力。你可以用它们来检查某个东西是否是集合的成员,而无需编写循环或复杂的检查。
操作员 | 意义 |
|---|---|
| 如果值在序列中,则返回 |
| 如果值不存在,则返回 |
让我们来看一些字符串类型的例子。
print("a" in "apple")
print("app" in "apple")
print("z" not in "apple")在这里,in 用于检查子字符串以及单个字符。至于序列:
numbers = [1, 2, 3, 4, 5]
print(3 in numbers)
print(10 in numbers)
print(10 not in numbers)我们检查某个元素是否存在于序列中,在这个例子中,是一个Python列表。
条件和循环中的布尔逻辑
然而,布尔值不仅仅是抽象值。在许多程序中,它们将控制你的代码流和决策。每当你的程序需要选择路径或重复某个动作时,它都依赖于布尔逻辑。你会在以下两个主要地方看到这一点的应用:
- 条件语句(if/elif/else)
- 循环(while 和 for)
让我们逐一探索。
条件句
条件使您的程序根据条件是 True 还是 False 作出不同的响应。以下是一个简单的条件检查:
age = 20
if age >= 18:
print("You are allowed to vote.")
Python 计算 age >= 18。如果结果是 True,则执行缩进块。如果结果是 False,则跳过该块。在这里,由于 20 >= 18 是 True,消息将被打印。这里还有另一个例子,我们在遇到 False 时执行另一个代码语句。
password = "password123"
if password == "password123":
print("Access granted.")
else:
print("Access denied.")
如果条件为 True,第一个代码块就会运行。如果不是,else 代码块将会运行。如果有多个条件,则使用 elif 语句。
score = 85
if score >= 90:
print("Grade: A")
elif score >= 80:
print("Grade: B")
elif score >= 70:
print("Grade: C")
else:
print("Grade: F")
Python 按顺序检查每个条件。一旦某个条件为 True,就会运行其代码块,其他的将被跳过。这就是布尔值如何帮助程序分支到不同的可能性。
循环
循环使用布尔逻辑来判断是否应该继续运行。它在 while 循环中特别有用。
count = 0
while count < 3:
print("Counting:", count)
count += 1
Python 检查 count < 3。如果是 True,则循环体执行。执行后,Python 再次检查条件。当条件变为 False 时,循环停止。您还可以使用布尔值 True 来启动无限循环。
while True:
command = input("Type 'exit' to quit: ")
if command == "exit":
break
在这里,条件 True 使得循环永远运行,但循环中的布尔逻辑 (command == "exit") 允许我们在需要时跳出。布尔逻辑在 for 循环中也起着作用。它可能看起来并不明显,但它们确实存在。
numbers = [1, 2, 3, 4, 5]
for num in numbers:
if num % 2 == 0:
print(num, "is even")
else:
print(num, "is odd")
在每次迭代中,Python 实际上是在询问列表中是否还有其他项。如果有,就将其赋值给 num 并运行循环体。如果没有,就停止循环。那个隐藏的是/否问题就是布尔逻辑的表现。
条件语句和循环是编程逻辑的基础。没有布尔值,你的代码将只会从上到下按顺序运行,每次都是一样的。有了布尔值,你的程序可以根据数据做出决策并重复执行操作。
避免的常见错误
一旦掌握了,Python中的布尔逻辑是简单的,但初学者(有时甚至是有经验的开发者)会遇到一些陷阱。
将 is 与 == 混淆
== 符号用于检查两个值是否相等。而 is 用于检查两个变量是否指向内存中的同一个对象。当你关心值的相等性时,使用 ==。当检查对象身份时,仅使用 is。
假设 bool() 转换是直观的
bool() 函数根据值的真实性将其转换为 True 或 False。初学者通常认为写 bool("False") 会返回 False。在 Python 中,任何非空字符串都是“真”的,无论它说了什么。只有 ""(空字符串)才会评估为 False。
忽略运算符优先级
布尔运算符并不总是从左到右求值。例如:
a = 5
print(not a == 5)乍一看,这看起来像是表示 not (a == 5)(这为 False),但它真正的意思是 (not a) == 5。因为 not a 为 False,所以你实际上是在比较 False == 5。这就是为什么在将布尔运算符与比较混合时,你应该始终使用括号。
print(not (a == 5))到现在为止,你应该已经很好地掌握了如何在Python中使用布尔逻辑。现在你可以避免在学习Python时犯错误。不要忘记构建项目来巩固你的学习。






