程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Python 基础

    • Python基础
  • Python 进阶

    • 装饰器与生成器
    • 异常处理
    • 标准库精讲
    • 模块与包
    • pip包管理工具
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
前端 (opens new window)
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Python 基础

    • Python基础
  • Python 进阶

    • 装饰器与生成器
    • 异常处理
    • 标准库精讲
    • 模块与包
    • pip包管理工具
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
前端 (opens new window)
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • Python 基础

    • 环境搭建
    • 标识符
    • 变量
    • 缩进和注释
    • 数据类型
    • 数据类型转换
    • 运算符
    • 字符串
    • 列表
    • 元组
    • 字典
    • 集合
    • if判断
      • 1. 核心概念:真值测试 (Truthiness)
        • 被视为 False 的值:
      • 2. 基本 if 语句:最简单的决策
      • 3. if-else 语句:二选一的抉择
      • 4. if-elif-else 语句:多路分支的选择
      • 5. 嵌套 if 语句:层层递进的逻辑
      • 6. 组合条件:and, or, not
        • 6.1 and:所有条件都为真
        • 6.2 or:至少一个条件为真
        • 6.3 not:反转逻辑
        • 6.4 短路求值 (Short-circuiting)
      • 7. 三元条件运算符 (Ternary Operator):简洁的单行 if-else
      • 8. 最佳实践与常见陷阱
      • 9. 综合实战案例:简单的用户验证系统
    • for循环
    • while循环
    • 循环综合练习
    • Python函数
    • 函数与循环实战
    • 生成式
    • 文件读写
    • 面向对象
    • 面向对象综合案例
  • Python 进阶

  • Python
  • Python 基础
scholar
2025-07-20
目录

if判断

# if 判断

在编程世界中,程序需要根据不同的情况做出不同的反应。if 语句就是 Python 用来实现这种逻辑决策的核心工具,它允许你的代码根据特定条件的真假来选择执行哪一个代码块。


# 1. 核心概念:真值测试 (Truthiness)

在深入 if 语句之前,必须理解 Python 如何判断事物的“真”与“假”,这个概念被称为真值测试。在条件判断中,Python 会自动将任何表达式或变量的值评估为一个布尔值 (True 或 False)。

# 被视为 False 的值:

  • 布尔值 False 本身。
  • 特殊常量 None。
  • 任何数值类型的零:0, 0.0, 0j。
  • 任何空的序列或集合:"" (空字符串), [] (空列表), () (空元组), {} (空字典), set() (空集合)。

除了以上这些,其他所有值都被视为 True!

def check_truthiness(value):
    if value:
        print(f"'{value}' 被视为 True")
    else:
        print(f"'{value}' 被视为 False")

check_truthiness(1)          # 输出: '1' 被视为 True
check_truthiness("Hello")    # 输出: 'Hello' 被视为 True
check_truthiness([1, 2])     # 输出: '[1, 2]' 被视为 True

check_truthiness(0)          # 输出: '0' 被视为 False
check_truthiness("")         # 输出: '' 被视为 False
check_truthiness(None)       # 输出: 'None' 被视为 False
check_truthiness([])         # 输出: '[]' 被视为 False
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 2. 基本 if 语句:最简单的决策

这是最基础的条件判断形式。如果条件为 True,则执行紧跟的缩进代码块;否则,直接跳过。

  • 语法结构:

    if condition:
        # 条件为 True 时执行的代码
        ...
    
    1
    2
    3
  • 示例:

    age = 20
    if age >= 18:
        print("你已经成年,可以进入。") # 输出: 你已经成年,可以进入。
    
    temperature = 15
    if temperature < 20:
        print("天气有点冷,记得多穿一件衣服。") # 输出: 天气有点冷,记得多穿一件衣服。
    
    1
    2
    3
    4
    5
    6
    7

# 3. if-else 语句:二选一的抉择

当你需要在条件成立和不成立时分别执行不同的操作,if-else 结构就派上用场了。

  • 语法结构:

    if condition:
        # 条件为 True 时执行的代码
        ...
    else:
        # 条件为 False 时执行的代码
        ...
    
    1
    2
    3
    4
    5
    6
  • 示例:

    score = 75
    if score >= 60:
        print("恭喜你,考试及格!") # 输出: 恭喜你,考试及格!
    else:
        print("很遗憾,考试未及格,请继续努力。")
    
    1
    2
    3
    4
    5

# 4. if-elif-else 语句:多路分支的选择

当有多个互斥的条件需要判断时,使用 if-elif-else 结构可以使代码逻辑清晰。Python 会从上到下依次检查每个条件,一旦找到第一个为 True 的条件,便执行其对应的代码块,然后跳出整个结构。

  • 语法结构:

    if condition_1:
        # 条件1为 True 时执行
        ...
    elif condition_2:
        # 条件1为 False,但条件2为 True 时执行
        ...
    elif condition_3:
        # ...以此类推
        ...
    else:
        # 所有以上条件都为 False 时执行 (可选)
        ...
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
  • 示例:成绩评级

    score = 88
    if score >= 90:
        grade = "优秀"
    elif score >= 80:
        grade = "良好" # score=88 满足此条件,程序进入此分支后结束判断
    elif score >= 60:
        grade = "及格"
    else:
        grade = "不及格"
    
    print(f"你的成绩等级是: {grade}") # 输出: 你的成绩等级是: 良好
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

# 5. 嵌套 if 语句:层层递进的逻辑

if 语句内部可以包含另一个 if 语句,形成嵌套结构,用于处理更复杂的、有层次的逻辑。

  • 示例:会员折扣
    is_vip = True
    order_total = 120
    
    if order_total > 100:
        print("订单金额超过100元。") # 输出: 订单金额超过100元。
        if is_vip:
            print("你是VIP,享受额外折扣!") # 输出: 你是VIP,享受额外折扣!
        else:
            print("成为VIP,享受更多优惠。")
    else:
        print("订单金额未满100元。")
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

编码建议:嵌套不宜超过两到三层。如果嵌套过深,应考虑重构代码,比如使用函数或更清晰的逻辑运算符组合。


# 6. 组合条件:and, or, not

使用逻辑运算符可以组合多个条件,形成更强大的判断逻辑。

# 6.1 and:所有条件都为真

当且仅当 and 两边的条件都为 True 时,整个表达式才为 True。

age = 25
has_ticket = True
if age >= 18 and has_ticket:
    print("验证通过,欢迎入场。") # 输出: 验证通过,欢迎入场。
1
2
3
4

# 6.2 or:至少一个条件为真

只要 or 两边的条件中至少有一个为 True,整个表达式就为 True。

has_coupon = False
is_first_time_user = True
if has_coupon or is_first_time_user:
    print("你可以享受折扣。") # 输出: 你可以享受折扣。
1
2
3
4

# 6.3 not:反转逻辑

not 用于反转一个布尔值。not True 结果是 False,not False 结果是 True。

is_logged_in = False
if not is_logged_in:
    print("请先登录。") # 输出: 请先登录。
1
2
3

# 6.4 短路求值 (Short-circuiting)

这是一个非常重要的优化特性:

  • A and B:如果 A 为 False,Python 知道整个表达式必为 False,所以根本不会去计算 B。
  • A or B:如果 A 为 True,Python 知道整个表达式必为 True,所以根本不会去计算 B。
# 示例:利用短路避免错误
user = None
# 因为 user 是 None (False),`and` 后面的 user.is_admin 就不会被执行,从而避免了 AttributeError
if user and user.is_admin:
    print("管理员,你好!")
else:
    print("访客,你好!") # 输出: 访客,你好!
1
2
3
4
5
6
7

# 7. 三元条件运算符 (Ternary Operator):简洁的单行 if-else

对于简单的 if-else 赋值操作,可以使用一种更简洁的单行写法。

  • 语法结构: value_if_true if condition else value_if_false

  • 示例:

    age = 20
    status = "成年人" if age >= 18 else "未成年人"
    print(status) # 输出: 成年人
    
    1
    2
    3

# 8. 最佳实践与常见陷阱

  1. 使用 is None 进行 None 值判断: 判断一个变量是否为 None 时,应始终使用 is None 或 is not None,而不是 == None。这是 Python 社区的约定,也更高效。

  2. 善用真值测试简化代码:

    my_list = []
    # 不推荐
    if len(my_list) == 0:
        print("列表为空")
    
    # 推荐
    if not my_list:
        print("列表为空") # 输出: 列表为空
    
    1
    2
    3
    4
    5
    6
    7
    8
  3. 避免过深的嵌套: 过深的 if 嵌套会使代码难以阅读和维护。可以尝试使用 elif、逻辑运算符组合,或将内部逻辑封装成函数来优化。

  4. 保持缩进一致: Python 严格依赖缩进(通常是4个空格)来定义代码块。缩进错误是初学者最常见的错误之一,会导致 IndentationError。


# 9. 综合实战案例:简单的用户验证系统

# 模拟一个用户数据库
users = {"alice": {"password": "123", "is_active": True}, "bob": {"password": "456", "is_active": False}}
username = input("请输入用户名: ")

# 1. 检查用户名是否存在 (利用真值测试)
user_data = users.get(username) # .get() 在键不存在时返回 None (False)

if user_data:
    # 2. 检查用户是否被禁用 (使用 not)
    if not user_data["is_active"]:
        print("错误:该账户已被禁用。")
    else:
        # 3. 验证密码
        password = input("请输入密码: ")
        if password == user_data["password"]:
            print(f"欢迎回来, {username.capitalize()}!")
        else:
            print("错误:密码不正确。")
else:
    print("错误:用户不存在。")

# 场景1 输入: alice, 123 -> 输出: 欢迎回来, Alice!
# 场景2 输入: bob -> 输出: 错误:该账户已被禁用。
# 场景3 输入: charlie -> 输出: 错误:用户不存在。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
编辑此页 (opens new window)
上次更新: 2025/07/23, 06:33:16
集合
for循环

← 集合 for循环→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式