网站搜索

在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 提供了两个身份运算符:

操作员

意义

is

如果两个变量指向同一个对象,则返回 True

is not

如果它们指向不同的对象,则返回 True

一个快速的例子:

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。它们使你的代码更易读且更具表现力。你可以用它们来检查某个东西是否是集合的成员,而无需编写循环或复杂的检查。

操作员

意义

in

如果值在序列中,则返回 True

not in

如果值不存在,则返回True

让我们来看一些字符串类型的例子。

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列表。

条件和循环中的布尔逻辑

然而,布尔值不仅仅是抽象值。在许多程序中,它们将控制你的代码流和决策。每当你的程序需要选择路径或重复某个动作时,它都依赖于布尔逻辑。你会在以下两个主要地方看到这一点的应用:

  1. 条件语句(if/elif/else)
  2. 循环(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时犯错误。不要忘记构建项目来巩固你的学习。