当前位置:

首页 > 编程开发 > Python中条件判断语句新手实战与避坑指南

Python中条件判断语句新手实战与避坑指南

本文目录

    Python条件判断语句是程序控制流程的基础,涉及布尔值、比较运算符及严格的缩进规范。利用if、elif、else实现多分支逻辑,通过and/or/not短路求值简化代码。三元表达式和真假值判定规则可提高简洁性。常见缩进错误需注意,用户输入验证案例综合了所学知识。

    条件判断这东西,说白了就是让程序学会“看人下菜碟”。你输入用户名密码,它判断对不对,对了放行错了拦下——这就是最典型的条件控制。

    Python中条件判断语句新手实战与避坑指南

    刚上手的时候,老觉得if太简单了,有啥好讲的。结果写了个用户注册的逻辑,七八个if套在一起,改了一个地方崩了三个功能。后来才明白,条件判断不在难,在怎么写得清楚、改得动。

    这篇文章就盯着新手容易懵的点聊。你跟着敲一遍,至少不会再被缩进报错折磨半小时。

    一、布尔值与比较运算符快速入门

    条件判断绕不开布尔值——True和False,首字母必须大写,这个记死了。

    # 哪些东西自带布尔值?先记住这几个
    print(bool(0))        # False
    print(bool(1))        # True
    print(bool(""))       # False
    print(bool("abc"))    # True
    print(bool([]))       # False
    print(bool([1, 2]))   # True
    print(bool(None))     # False
    

    空的东西大多是False,非空的基本是True。这条规则记住,后面讲真假值判定的时候会用上。

    比较运算符返回的就是布尔值:

    age = 20
    print(age >= 18)    # True
    print(age == 18)    # False
    print(age != 18)    # True
    

    Python支持连写比较,这个写起来很舒服:

    score = 85
    if 80 <= score < 90:
        print("良好")    # 这下会打印
    

    其他语言得写成score >= 80 && score < 90,Python不用。

    新手容易搞混的地方:=是赋值,==是判等。写if age = 18直接报语法错误,因为赋值语句不能出现在条件位置。有新手因为这个问题卡了二十分钟。

    二、if语句基础结构与缩进规范

    先看一个完整的if结构长啥样:

    age = int(input("输入年龄: "))
    
    if age >= 18:
        print("你已经成年了")
        print("可以去考驾照了")
    

    重点说缩进。

    Python用缩进来表示代码块,不像C/Ja va用大括号。同一层级的代码缩进必须一致。

    # 这样写会报错
    if age >= 18:
        print("成年了")
      print("这行缩进不对")    # IndentationError
    

    缩进用几个空格? PEP8推荐4个。但更重要的是保持统一,不要这段用4个空格那段用Tab。大多数编辑器可以设置"Tab转空格",打开这个功能省很多事。

    这里有个很多人不知道的:缩进不光是空格数一致,空格和Tab混用会直接报错,肉眼看不出来那种。VSCode右下角能看到当前文件用的是空格还是Tab,如果混了会显示"混合缩进"。

    # 看起来一样,但一个用了空格一个用了Tab
    if True:
        print("这行用了4个空格")
    	print("这行用了Tab")   # 肉眼看不出来,但运行报错
    

    三、elif多分支逻辑判断实战

    elif是else if的缩写,用来处理多个互斥的条件:

    score = 78
    
    if score >= 90:
        grade = "A"
    elif score >= 80:
        grade = "B"
    elif score >= 70:
        grade = "C"
    elif score >= 60:
        grade = "D"
    else:
        grade = "E"
    
    print(f"等级: {grade}")    # C
    

    注意elif的条件判断顺序是从上到下,一旦匹配就停止往下走了。score=78匹配到>=70这个分支,后面的>=60不会再判断。

    很多新手会写出这样的代码:

    # 画蛇添足
    if score >= 90:
        grade = "A"
    if score >= 80 and score < 90:    # 其实不需要 and score < 90
        grade = "B"
    if score >= 70 and score < 80:
        grade = "C"
    

    用elif就干净多了,而且每个条件只判断一次。上面那种写法不仅啰嗦,而且score=95的时候第一和第二个if都会执行(虽然不影响结果,但浪费性能)。

    四、else默认处理机制应用

    else是"以上条件都不满足"时的兜底方案。很多逻辑里它充当默认值的角色:

    # 用户输入用户名,没输入就给个默认名
    username = input("请输入用户名: ")
    if username.strip() == "":
        username = "游客"
    else:
        print(f"欢迎回来, {username}")
    

    还有错误处理的场景:

    import re
    
    phone = input("输入手机号: ")
    if re.match(r'^1[3-9]d{9}$', phone):
        print("手机号格式正确")
    else:
        print("手机号格式有误,请重新输入")
    

    else还有个容易被忽视的用法——和循环配合。for和while可以带else,循环正常走完(没有被break打断)就会执行else块:

    # 查找列表中是否有某个元素
    items = [1, 2, 3, 4, 5]
    target = 6
    
    for item in items:
        if item == target:
            print("找到了!")
            break
    else:
        print("没找到")    # 循环没有被break,执行这里
    

    这个写法比设一个found标志变量清爽很多。不过新手看这个容易懵,先知道有这么回事就行。

    五、嵌套条件判断场景解析

    嵌套就是if里面再套if。能避免就避免,但有些场景确实绕不开。

    一个常见的嵌套场景——先判断大条件,再细化判断:

    age = 25
    has_license = True
    
    if age >= 18:
        if has_license:
            print("可以租车")
        else:
            print("需要先考驾照")
    else:
        print("未成年不能租车")
    

    这种可以优化成and连接:

    if age >= 18 and has_license:
        print("可以租车")
    elif age >= 18 and not has_license:
        print("需要先考驾照")
    else:
        print("未成年不能租车")
    

    但嵌套太深了谁也救不了:

    # 三层嵌套,看五分钟不知道在干嘛
    if condition1:
        if condition2:
            if condition3:
                do_something()
            else:
                do_other()
        else:
            do_third()
    else:
        do_fourth()
    

    碰到这种代码,要么提前返回(如果是在函数里),要么拆成多个独立的if,要么重新设计逻辑。三层以上的嵌套基本意味着思路该理一理了。

    六、and/or/not逻辑组合技巧

    and:全真才真。or:一真就真。not:取反。

    这部分真正的难点在于短路求值。

    # and 短路:左边为False,右边根本不会执行
    def expensive_check():
        print("这个函数执行了")
        return True
    
    if False and expensive_check():
        print("不会打印")
    # "这个函数执行了" 不会打印,因为左边的False已经让整个and确定为False了
    
    # or 短路:左边为True,右边不执行
    if True or expensive_check():
        print("会打印")
    # "这个函数执行了" 不会打印
    

    这个特性在写防御性代码的时候特别有用:

    # 安全地获取嵌套字典的值
    user = {"profile": {"name": "张三"}}
    if user and user.get("profile") and user["profile"].get("name"):
        print(user["profile"]["name"])
    
    # 用短路特性简化
    name = user and user.get("profile") and user["profile"].get("name")
    # 如果中间某个不存在,name就是False(或None),不会报错
    

    再比如给默认值:

    # 如果用户没输入名字,用默认值
    name = input("输入名字: ") or "匿名用户"
    print(name)
    

    or的短路特性让这行代码既安全又简洁。但别滥用,太长的or链读起来很费劲。

    七、三元表达式简洁写法演示

    三元表达式就是把if-else压缩成一行,语法是结果1 if 条件 else 结果2:

    age = 20
    status = "成年" if age >= 18 else "未成年"
    print(status)    # 成年
    

    这个比写四行if-else省地方,适合简单的二选一赋值:

    # 取最大值
    a, b = 10, 20
    max_val = a if a > b else b
    
    # 格式化输出
    price = 99.9
    tip = "需要配送费" if price < 100 else "免配送费"
    

    但别把三元表达式搞复杂了:

    # 让人看不懂的写法
    result = a if a > b else b if b > c else c    # 虽然能跑
    
    # 换成if-elif-else,三秒钟就看懂了
    if a > b and a > c:
        result = a
    elif b > c:
        result = b
    else:
        result = c
    

    嵌套三元表达式基本等于给后面维护的人埋雷。一个常见的标准是:写在一行里超过80个字符,就老老实实换回if-else。

    八、真假值判定规则详解

    Python里每个对象都可以当布尔值用,不光是True和False。

    会被判定为False的值(记住这几种就够了):

    • None
    • False
    • 数值0(0, 0.0, 0j)
    • 空序列/集合("", [], (), {}, set(), range(0))

    其他所有值都是True。

    这个规则的妙处是你可以直接写:

    # 不用写成 if len(name) > 0
    name = "张三"
    if name:
        print(f"你好, {name}")
    else:
        print("名字不能为空")
    
    # 不用写成 if len(items) != 0
    items = [1, 2, 3]
    if items:
        print(f"有{len(items)}个项目")
    
    # 不用写成 if user is not None and user != {}
    user = {"name": "张三"}
    if user:
        print(user["name"])
    

    很多新手会这样写:

    if name == True:      # 多此一举
    if items != []:       # 虽然能跑但不Pythonic
    if len(name) > 0:     # 可以但啰嗦
    

    记住:if x 比 if x == True 更地道,也比 if x is True 更宽松(因为后者要求x必须是布尔True,而if x能接受任何真值)。

    九、常见缩进错误与排查方法

    条件控制相关的报错,80%是缩进问题。遇到这类错误不用慌,挨个排查。

    错误1:IndentationError: expected an indented block

    意思是"这里应该有缩进"。if、elif、else、for、while、def后面的代码块必须有缩进。

    # 错误
    if age > 18:
    print("成年了")    # 缩进没对齐
    
    # 如果暂时不想写逻辑,用pass占位
    if age > 18:
        pass    # pass就是啥也不做,占位用的
    

    错误2:IndentationError: unindent does not match any outer indentation level

    缩进级别不一致。检查前后缩进的空格数是否相同。

    错误3:Tab和空格混用

    编辑器里看不出来,但运行报错。排查方法:

    • VSCode:右下角点击"空格"或"Tab"可以切换,也能看到当前文件用的是什么
    • 用python -t运行脚本会警告Tab和空格混用
    • 编辑器设置"显示空白字符",就能看到所有的点和箭头

    实践建议:

    1. 编辑器设置"Tab键转换为空格",并且用4个空格
    2. 写代码的时候盯着缩进对齐线看
    3. 如果报缩进错误,把这段代码的缩进全部删了重新打一遍

    十、用户输入验证综合案例

    把上面的东西串起来,写一个用户注册信息验证的小程序。

    import re
    
    def validate_username(username):
        """用户名:3-12位,字母数字下划线"""
        if not username:
            return False, "用户名不能为空"
        if len(username) < 3 or len(username) > 12:
            return False, "用户名长度需为3-12位"
        if not re.match(r'^[a-zA-Z0-9_]+$', username):
            return False, "用户名只能包含字母、数字、下划线"
        return True, "用户名可用"
    
    def validate_password(password, confirm):
        """密码:至少8位,包含字母和数字"""
        if not password:
            return False, "密码不能为空"
        if len(password) < 8:
            return False, "密码至少8位"
        if not re.search(r'[a-zA-Z]', password):
            return False, "密码需要包含字母"
        if not re.search(r'd', password):
            return False, "密码需要包含数字"
        if password != confirm:
            return False, "两次输入的密码不一致"
        return True, "密码可用"
    
    def validate_email(email):
        """邮箱:简单格式验证"""
        if not email:
            return False, "邮箱不能为空"
        if not re.match(r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$', email):
            return False, "邮箱格式不正确"
        return True, "邮箱格式正确"
    
    def main():
        print("=" * 40)
        print("用户注册信息验证")
        print("=" * 40)
        
        # 收集用户输入
        username = input("用户名: ").strip()
        password = input("密码: ").strip()
        confirm = input("确认密码: ").strip()
        email = input("邮箱: ").strip()
        
        # 逐项验证,只要有一项失败就停止
        valid, msg = validate_username(username)
        if not valid:
            print(f"❌ {msg}")
            return
        
        valid, msg = validate_password(password, confirm)
        if not valid:
            print(f"❌ {msg}")
            return
        
        valid, msg = validate_email(email)
        if not valid:
            print(f"❌ {msg}")
            return
        
        # 所有验证通过
        print("✅ 所有信息验证通过!")
        print(f"用户名: {username}")
        print(f"邮箱: {email}")
        print("密码: ********")
    
    if __name__ == "__main__":
        main()
    

    运行效果:

    ========================================

    用户注册信息验证

    ========================================

    用户名: 张三

    ❌ 用户名只能包含字母、数字、下划线

    用户名: zhangsan

    密码: 123456

    确认密码: 123456

    邮箱: zhangsan@qq.com

    ❌ 密码需要包含字母

    用户名: zhangsan

    密码: abc12345

    确认密码: abc12345

    邮箱: zhangsan@qq.com

    ✅ 所有信息验证通过!

    用户名: zhangsan

    邮箱: zhangsan@qq.com

    密码: ********

    这个例子把if、elif、else、and/or/not、真假值判定、比较运算符都串起来了。你可以试着改改验证规则,比如用户名不能用纯数字、密码不能包含用户名之类的,练练手。

    最后说两句

    条件控制说到底是"让程序做选择题"。代码怎么写才算好?一个常见的标准是:别人(包括三个月后的自己)看一遍就能明白这段逻辑在干嘛。

    缩进统一用4个空格,嵌套不超过三层,复杂的and/or链拆成带名字的变量——这些小习惯比学会某个高级技巧重要得多。

    前面讲的验证案例你可以跑一遍,改改规则、换换输入,看看输出变化。遇到报错就看看是哪类缩进错误,多折腾几次就有数了。

    如果卡在某个点上,把这个条件拆成最简的形式,一行一行打印中间结果,慢慢就定位到问题了。写代码这事儿,调试的时间永远比写的时间长,习惯就好。

    本文内容来源于网友投稿,如有侵权请联系删除。
    作者最新文章
    编程开发 Python
    相关文章 更多
    PHP递归性能优化技巧与迭代替代方案
    PHP递归性能优化技巧与迭代替代方案

    解析PHP递归函数在树形数据处理中的性能瓶颈,提供预加载数据消除I/O、使用显式栈替代深层递归的实战方案,帮助开发者在代码可读性与执行效率间做出合理取舍。

    Java测试中怎么使用Mockito模拟依赖对象
    Java测试中怎么使用Mockito模拟依赖对象

    详细讲解在Java单元测试中如何使用Mockito模拟依赖对象,包括引入依赖、创建Mock、打桩返回值、行为验证以及Mock与Spy的核心差异和常见陷阱排查。

    链表删除节点的时间复杂度是多少及其详细分析
    链表删除节点的时间复杂度是多少及其详细分析

    详细分析链表删除节点的时间复杂度,深入探讨单链表与双向链表在不同已知前提下的查找与删除开销,并结合完整代码与清晰图解进行对比总结。

    codex如何配置模型参数及文件设置教程
    codex如何配置模型参数及文件设置教程

    想知道如何让AI写出的代码更贴合你的习惯?本文手把手教你在VS Code中调整Codex相关模型参数,通过修改配置文件优化温度值和令牌限制,解决代码建议不准确或响应慢的问题。

    Claude Code AI编程工具实力揭秘与编程助手实测
    Claude Code AI编程工具实力揭秘与编程助手实测

    通过实测展示Claude Code在终端中如何理解自然语言指令、自动修改代码文件并处理复杂编程任务,帮助开发者评估其实际辅助能力。

    winforms教程自学入门与基础开发步骤详解
    winforms教程自学入门与基础开发步骤详解

    本教程详细讲解如何使用Visual Studio创建WinForms项目,通过添加按钮和标签控件并编写点击事件代码,实现一个基础的计数器功能,适合C#初学者快速上手Windows窗体应用开发。

    Cursor自动补全设置教程教你快速开启代码补全功能
    Cursor自动补全设置教程教你快速开启代码补全功能

    详解Cursor编辑器中自动补全功能的开启与优化设置,涵盖Tab触发机制、上下文窗口调整及模型切换,帮助开发者解决补全延迟、干扰大等问题,提升编码流畅度。

    pandas的数据格式怎么转换和设置方法教程
    pandas的数据格式怎么转换和设置方法教程

    详解Pandas中数据格式转换的核心方法,包括astype强制转换、to_numeric容错处理及日期解析技巧,解决常见类型错误并提升数据处理效率。

    VS Code中文设置方法 简体语言包安装与切换教程
    VS Code中文设置方法 简体语言包安装与切换教程

    详细介绍在Visual Studio Code中安装Chinese (Simplified)语言包的方法,包括通过扩展市场搜索、安装及自动重启切换至简体中文界面的完整步骤,帮助开发者快速将编辑器本地化。

    cursor安装过程无法更改安装位置的解决方法
    cursor安装过程无法更改安装位置的解决方法

    针对Cursor安装包默认锁定C盘且无路径选择界面的问题,提供通过手动移动文件并创建目录联结(Symbolic Link)的解决方案,实现将软件安装在其他磁盘分区。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    macOS软件
    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    Mac软件 更多
    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

    灵活计算器
    灵活计算器
    macOS/iOS/Android

    灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

    WINDOWS 更多
    3dmax(3ds max)
    3dmax(3ds max)
    Windows

    Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。