当前位置: 首页 > java >正文

Python 基础语法与数据类型(四) - 布尔类型 (bool) 与逻辑运算符 (and, or, not) 和类型转换

文章目录

      • 布尔类型 (bool)
      • 逻辑运算符 (and, or, not)
      • 布尔值的“真值”判断 (Truthiness / Falsiness)
      • 类型转换 (Type Casting)
      • 总结

在前面的文章中,我们学习了数字类型(整型、浮点型)和字符串。今天,我们要介绍另一种非常基础且极其重要的数据类型:布尔类型 (bool)。布尔类型是编程中进行逻辑判断和控制程序流程的基础。我们还会学习如何使用逻辑运算符组合布尔值,以及如何在不同数据类型之间进行转换

布尔类型 (bool)

布尔类型只有两个可能的值:TrueFalse。它们是 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 中有三个主要的逻辑运算符:andornot

  1. and (逻辑与):
    如果 and 两边的布尔值True,则结果为 True;否则,结果为 False

    ABA and B
    TrueTrueTrue
    TrueFalseFalse
    FalseTrueFalse
    FalseFalseFalse
    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
    
  2. or (逻辑或):
    如果 or 两边的布尔值至少有一个True,则结果为 True;只有当两者都False 时,结果才为 False

    ABA or B
    TrueTrueTrue
    TrueFalseTrue
    FalseTrueTrue
    FalseFalseFalse
    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
    
  3. not (逻辑非):
    not 运算符是一元运算符(只作用于一个布尔值),它会颠倒布尔值的结果。not TrueFalsenot FalseTrue

    Anot A
    TrueFalse
    FalseTrue
    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 不仅仅接受显式的 TrueFalse任何值都可以被解释为一个布尔值。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 转换为 1False 转换为 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.0False 转换为 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() 函数会根据一个值的“真值”规则返回 TrueFalse
print(bool(100))      # 输出: True
print(bool(0))        # 输出: False
print(bool("Python")) # 输出: True
print(bool(""))       # 输出: False
print(bool([1, 2]))   # 输出: True
print(bool([]))       # 输出: False

总结

在本文中,我们深入学习了:

  • 布尔类型 (bool),它只有 TrueFalse 两个值,通常由比较运算产生。
  • 逻辑运算符 (and, or, not),用于组合和修改布尔表达式,并了解了它们的短路求值特性。
  • 真值判断 (Truthiness/Falsiness),理解了在布尔上下文中,Python 如何将不同类型的值解释为 TrueFalse
  • 常用的类型转换函数 (int(), float(), str(), bool()),掌握了如何在基本数据类型之间进行转换。

http://www.xdnf.cn/news/1915.html

相关文章:

  • ctfshow web入门 命令执行(29-77)
  • 智能分析网关摄像机实时接入分析平台,如何开启周界防护智能新时代?
  • 中小企业固定资产管理挑战与数字化破局之道
  • 轻量化AIGC边缘部署实战:在移动端实现实时AI内容生成
  • 身份与访问管理(IAM):零信任架构下的认证授权技术与实战
  • 终端运行java出现???
  • vite+vue2+elementui构建之 vite.config.js
  • 今日行情明日机会——20250425
  • 如何优化字符串替换:四种实现方案对比与性能分析
  • 自学新标日第二十二课(复习)
  • ViewPager FragmentPagerAdapter在系统杀死应用后重建时UI不刷新的问题
  • Hadoop生态圈框架部署 - Windows上部署Hadoop
  • MySQL锁
  • redis客户端库redis++在嵌入式Linux下的交叉编译及使用
  • 从线性到非线性:简单聊聊神经网络的常见三大激活函数
  • 不吃【Numpy】版
  • Spring AI 快速入门:从环境搭建到核心组件集成
  • 高精度运算
  • 有关虚拟奢侈品
  • Java知识日常巩固(四)
  • Linux Ubuntu18.04下安装Qt Craeator 5.12.9(图文详解)
  • 【Qt】文件
  • 探秘LLM推理模型:hidden states中藏着的self verification的“钥匙”
  • PubMed PDF下载 cloudpmc-viewer-pow逆向
  • C#中实现XML解析器
  • YOLOX-PAI手部检测模型
  • RocketMQ 主题与队列的协同作用解析(既然队列存储在不同的集群中,那要主题有什么用呢?)---管理命令、配置安装
  • 二项分布详解:从基础到应用
  • Nginx---总结
  • 服务网格助力云原生后端系统升级:原理、实践与案例剖析