展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > 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链拆成带名字的变量——这些小习惯比学会某个高级技巧重要得多。

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

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

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
编程开发 Python
相关文章 更多
精品专题 更多
装机必备

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

Windows

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

PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

macOS软件

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

IOS软件

正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

AI

正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

Mac软件 更多
WPS Office macOS版
WPS Office macOS版

WPS Office是一款面向macOS用户的综合办公套件,将文字处理、电子表格、演示文稿、PDF工具、模板与云协作整合在同一应用中。它兼容常见Microsoft Office格式,支持Intel及Apple芯片Mac,基础功能可免费使用,

Shapr3D macOS版
Shapr3D macOS版

Shapr3D是一款面向工业设计、机械工程、建筑概念和三维打印工作流的CAD软件。Mac版采用Parasolid建模内核,支持草图约束、实体建模、工程图、可视化渲染及常见CAD格式交换,并可通过账户在多台设备之间同步项目。

REAPER macOS版
REAPER macOS版

REAPER是Cockos开发的数字音频工作站,提供多轨音频与MIDI录制、剪辑、处理、混音和母带制作工具。Mac版兼容Intel与Apple芯片,支持AU、VST、VST3、CLAP等插件格式,并提供高度可定制的工作流程。

Ableton Live macOS版
Ableton Live macOS版

Ableton Live 是面向音乐制作人与现场表演者的数字音频工作站,提供编曲视图、独具特色的现场视图、音频录制、MIDI创作、实时变速、乐器及效果器。Mac版原生支持Apple芯片,并可连接音频接口、MIDI控制器和第三方插件。

Adobe After Effects macOS版
Adobe After Effects macOS版

Adobe After Effects 是面向动态图形、影视特效与视频合成的专业创作软件。它提供关键帧动画、遮罩抠像、运动跟踪、三维空间、文字动画和表达式等工具,并可与 Premiere Pro、Photoshop、Illustrator

Adobe Audition macOS版
Adobe Audition macOS版

Adobe Audition 是面向播客、影视后期、音乐制作及内容创作者的专业音频工作站,提供波形精修、多轨录制与混音、频谱编辑、降噪修复、响度匹配和效果处理工具,并可与 Adobe Premiere 协同完成视频声音制作。

Adobe Bridge macOS版
Adobe Bridge macOS版

Adobe Bridge 是面向摄影师、设计师及内容团队的免费数字资产管理工具,可集中预览照片、视频和 Adobe 项目文件,并利用评级、标签、关键词、元数据、筛选与收藏集完成分类检索。它还支持批量重命名、格式导出、相机导入及 Camera

Adobe Illustrator macOS版
Adobe Illustrator macOS版

Adobe Illustrator 是 Adobe 推出的专业矢量图形设计软件,适合在 Mac 上制作标志、图标、插画、包装、信息图及印刷版面。它以路径和锚点构建可无损缩放的图形,并提供钢笔、形状、文字、图像描摹、渐变、画板及生成式功能。

Adobe InDesign macOS版
Adobe InDesign macOS版

Adobe InDesign 是面向印刷品与数字出版物的专业版面设计软件,可在 Mac 上制作书籍、杂志、宣传册、海报、报告及交互式文档。它提供精细的文字样式、网格、母版、长文档管理和印前输出能力。

Adobe Lightroom Classic macOS版
Adobe Lightroom Classic macOS版

Adobe Lightroom Classic 是面向桌面摄影工作流的照片管理与后期处理软件,可将原始照片保存在本地硬盘,通过目录、关键词、评分和收藏夹高效整理图库,并提供 RAW 冲印、蒙版、镜头校正、批量同步及多格式导出等功能。

Adobe Media Encoder macOS版
Adobe Media Encoder macOS版

Adobe Media Encoder 是 Adobe 推出的专业音视频编码与转码工具,可通过队列、预设和监视文件夹批量完成格式转换、代理文件创建及多平台成片输出,并与 Premiere Pro、After Effects 等软件紧密协作。

Adobe Photoshop macOS版
Adobe Photoshop macOS版

Adobe Photoshop 是面向摄影师、设计师和内容创作者的专业图像处理软件,提供图层、蒙版、选区、修复、调色、文字排版、智能对象及生成式编辑等能力。Mac 版支持 Intel 与 Apple Silicon 处理器。

WINDOWS 更多
AutoCAD Windows版
AutoCAD Windows版

AutoCAD 是 Autodesk 推出的专业计算机辅助设计软件,Windows 版支持精确二维绘图、三维实体与曲面建模、图纸标注、布局发布和任务自动化,并包含多套行业专业化工具组合,适用于建筑、机械、电气、工程建设及制造设计人员。

SketchUp Pro Windows版
SketchUp Pro Windows版

SketchUp Pro 是面向建筑、室内、景观、施工和产品设计等专业场景的三维建模工具,提供桌面建模、LayOut 二维文档、模型资源库、扩展程序及云端协作能力。其操作逻辑直观,适合从概念推敲、空间规划到图纸表达和方案汇报的完整工作流程。

AutoCAD LT Windows版
AutoCAD LT Windows版

AutoCAD LT 是 Autodesk 推出的专业二维 CAD 软件,适合建筑师、工程师、施工人员和设计师完成精确绘图、标注及文档编制。它支持 DWG 工作流、智能块、图形比较、计数、表格和 AutoLISP 自动化,

Rhino 3D Windows版
Rhino 3D Windows版

Rhino 3D 是 McNeel 推出的专业三维建模工具,可创建、编辑和分析 NURBS 曲线曲面、实体、网格、SubD 与点云。Windows 版支持精确造型、工程制图、渲染、文件转换及 Grasshopper 参数化设计,

Autodesk Fusion Windows版
Autodesk Fusion Windows版

Autodesk Fusion 是面向产品设计与制造的云连接开发平台,在统一环境中整合三维 CAD、CAM、CAE、PCB、工程图、数据管理和团队协作功能,适合产品设计师、机械工程师、电子工程师及加工制造团队完成从概念建模、验证分析到生产交

Archicad Windows版
Archicad Windows版

Archicad 是 Graphisoft 面向建筑师、设计师、工程师及 BIM 团队开发的建筑信息模型平台。它把三维建筑建模、施工文档、数据管理、专业协调、实时协作和可视化集中在统一项目环境中,适合从概念方案到施工交付的完整建筑设计流程。

Vectorworks Architect Windows版
Vectorworks Architect Windows版

Vectorworks Architect 是面向建筑师、室内设计师和建筑顾问的综合设计与BIM平台,覆盖概念草图、二维制图、三维建模、施工文档、数据报表、可视化及开放式协作。它强调自由造型与数据化建筑对象并存,

Shapr3D Windows版
Shapr3D Windows版

Shapr3D 是一款基于 Siemens Parasolid 几何内核的专业三维CAD软件,可在 Windows 电脑和平板设备上完成草图绘制、实体建模、参数化修改、模型可视化及技术图纸制作。软件提供免费基础方案,

FreeCAD Windows版
FreeCAD Windows版

FreeCAD 是面向机械设计、产品开发、建筑建模和创客项目的免费开源参数化三维 CAD 工具。它可在 Windows 上完成约束草图、实体零件、装配、工程图、BIM、有限元分析及 CAM 等任务,

Twinmotion Windows版
Twinmotion Windows版

Twinmotion 是 Epic Games 推出的实时三维可视化工具,可导入常见 CAD、BIM 与三维模型,通过材质、环境、植被、灯光及动画资源快速构建场景,并输出图片、视频、全景图和交互演示。

BricsCAD Windows版
BricsCAD Windows版

BricsCAD 是以 DWG 为核心格式的专业 CAD 平台,可用于二维制图、三维建模、工程文档与设计协作。产品按 Lite、Pro、BIM、Mechanical 和 Ultimate 等层级提供不同工具,

Ableton Live Windows版
Ableton Live Windows版

Ableton Live 是面向音乐创作、录音、编曲、声音设计、混音与现场演出的数字音频工作站。它将适合即兴触发素材的 Session 视图与传统时间线编曲结合,并提供音频变速、MIDI工具、软件乐器、效果器和声音资源,