Python if语句完全指南:零基础也能掌握条件判断与分支逻辑

📅 发布时间:2026/9/8 14:40:43
Python if语句完全指南:零基础也能掌握条件判断与分支逻辑
很多刚开始学Python的朋友学到if语句时都会有一种“好像看懂了但自己一写就乱”的感觉。这篇文章是我自己学习过程的第4篇记录专门把if语句这块从头到尾理了一遍。我不打算讲一堆官方文档里那种干巴巴的定义而是把if语句到底是什么、为什么需要它、写的时候哪里最容易翻车以及怎么在真实场景里把它用好一次性讲清楚。如果你是零基础刚入门或者学了一两个星期还处于“看得懂但写不出”的状态这篇文章应该能帮你把if语句这一关彻底打通。1. 先别急着写代码if语句解决的到底是什么问题1.1 从“顺序执行”到“按条件执行”的思维转变学if语句之前你写的Python代码基本都是从上往下一条一条执行就像按照菜谱做菜第一步切菜、第二步热锅、第三步倒油顺序不能乱。这种“顺序结构”是所有程序的基础但问题是——现实世界根本不按剧本走。举个例子你写了一个程序让用户输入年龄然后输出“可以进入网吧”。如果用户今年10岁呢程序还是会老老实实输出“可以进入网吧”这显然就出问题了。因为程序缺少一个最核心的能力判断。它没办法根据不同的输入做出不同的反应。if语句就是用来解决这个问题的。它让程序拥有了一个简单的“大脑”可以根据条件是否成立决定下一步执行哪段代码。换句话说if语句是程序从“死板地执行”走向“智能地决策”的第一步。这其实是编程思维里非常重要的一次转变。在学if之前你的代码里只有一条直线学完if之后你的代码会出现分岔路口程序会像一个路口的交警一样判断来车方向后决定放行哪条路。1.2 条件判断在真实程序里的几个典型场景理解了if的本质是“按条件分流”之后你会发现它的应用场景几乎无处不在。我简单列几个最常见的场景你会发现这些场景里都能看到if的影子表单校验用户注册时输入了邮箱程序需要检查输入的内容里是否包含“”和“.”不包含就提示格式错误。权限控制用户尝试删除一篇文章程序要先判断当前登录的用户是不是文章作者不是就拒绝操作并提示“无权限”。业务规则电商系统计算订单金额时一次下单满300元才可以使用优惠券金额不足就按原价结算。程序自我保护读取文件前先判断文件是否存在存在才尝试打开避免程序因报错直接崩溃。这些场景如果不用if你只能把所有情况都当成同一种情况来处理那程序就不可能正确应对变化的输入。所以也可以说如果你发现自己写的程序经常“不分青红皂白”地执行所有流程大概率就是该引入条件判断了。2. 写一个最简单的if缩进、冒号与代码块的底层逻辑2.1 逐行解读一个最基本的if判断光说不练没有意义直接看代码。这是一个最简单的if语句age 18 if age 18: print(你已经成年了)这段代码的运行逻辑其实就两句话先判断age 18是否成立如果成立就执行下面缩进的代码。但这里有两个非常容易被新手忽略的细节第一if后面有一个冒号。这个冒号就像是在说“我要开始陈述满足这个条件时该做的事了”后面的代码需要换行并向右缩进。很多初学者会漏掉这个冒号然后程序直接报SyntaxError。第二print这一行前面有缩进。Python是一个非常依赖缩进的语言缩进不仅是为了让代码好看它直接决定了哪些代码属于这个if条件。如果print语句没有缩进它就变成了无条件执行的普通代码if判断就形同虚设了。你可以试着把缩进去掉运行一下这段代码age 18 if age 18: print(你已经成年了)这时Python会直接报错IndentationError: expected an indented block after if statement。这就是缩进在Python中的强制力。2.2 缩进规则与代码块的通俗理解很多新手不理解“代码块”这个概念。我换个说法你就明白了代码块就是“被同一个if条件管住的一组动作”。比如下雨天出门你的思考过程是如果下雨我就带伞、穿雨靴、换一条不怎么怕水的路线。这个“带伞、穿雨靴、换路线”就是同一个条件下一起执行的三件事。在Python中这三件事要写在一起并且保持相同层级的缩进is_raining True if is_raining: print(带上雨伞) print(穿上雨靴) print(换一条路线)注意print(“带上雨伞”)、print(“穿上雨靴”)、print(“换一条路线”)这三行代码拥有完全相同的缩进层级它们构成了一个代码块。只要is_raining为True这三行代码就会依次执行如果为False这三行代码一行都不会执行。这个“一起执行”的概念非常重要因为如果你不小心把其中一行往左或往右多缩进了一点它可能就不再属于这个条件了。Python的缩进标准是4个空格但统一用Tab也行——只要你全程保持一致。千万别混用空格和Tab否则你会陷入非常折磨人的TabError。2.3 布尔值if判断背后真正的“开关”if后面跟的那个条件不管写得多复杂最终都会被Python解释成一个值True或者False。在Python里这两个值叫作布尔值(Boolean)它们是条件判断的底层机制。比如age 18这个表达式它运行完的结果就是True或False并不会真的输出这句话。你可以自己在Python里验证一下age 18 result (age 18) print(result) # 输出 True甚至可以这样理解if语句本质上就是一个开关判断条件为True开关就闭合代码块通电运行条件为False开关就断开代码块不运行。这里还有一个初学者经常过的坎——Python中的“真”和“假”不只是True和False。在某些情况下0、空字符串、空列表[]、空字典{}、None等值在条件判断中也会被当作“假”而任何非0数字、非空字符串、非空容器都会被当作“真”。这个知识点以后你会频繁遇到这里先记住结论即可。3. 判断条件从哪来比较运算、逻辑运算与成员判断的配合3.1 比较运算符最朴素的判断工具if语句最常见的判断来源就是比较运算符它们用来比较两个值的关系最终得到一个布尔值运算符含义示例结果(当x10时)等于x 10True!不等于x ! 5True大于x 5True小于x 20True大于等于x 10True小于等于x 9False这里最需要提醒新手的是判断两个值是否相等用的是双等号不是单等号。单等号是赋值操作意思是“把右边的值装进左边的变量”。如果你在if条件里写成if x 10:Python会直接报语法错误因为在条件判断里不允许进行赋值操作。我自己刚开始学的时候就犯过这个错误怎么都想不通为什么Python一直报错。后来才明白双等号是“问”单等号是“给”。一个是比较一个是赋值很像你把“这个变量是不是等于10”错写成了“让这个变量等于10”。3.2 逻辑运算符处理“多个条件同时满足或任选其一”的场景现实世界的判断很少只有一个条件常常是复合判断。比如去游乐园需要“身高满1.2米并且没有恐高症”才能坐过山车。这就要用到逻辑运算符。Python的逻辑运算符有三个and、or、not。and两边都为True结果才是True。类比“并且”。or只要有一边为True结果就是True。类比“或者”。not取反。本来是Truenot一下就变成False。来看一个完整的例子height 1.3 has_phobia False if height 1.2 and not has_phobia: print(可以乘坐过山车) else: print(暂时不能乘坐过山车)这个程序的判断逻辑拆开来看是这样的先看身高是否满1.2米为True再看has_phobia是False那么not has_phobia就是True两个True通过and连接最终条件为True于是输出“可以乘坐过山车”。这里推荐一种自查方式遇到复杂的条件时把各个子条件的真假先在旁边标出来再从左到右推导最终结果。刚学的时候慢一点没关系熟练后一眼就能看出结果。3.3 成员运算符用in判断某个值是否在容器里除了比较数值和逻辑运算还有一个在真实写代码时出场率极高的判断方式——成员判断in。比如你想判断“apple”是否在一个水果列表里fruits [apple, banana, orange] if apple in fruits: print(列表里有苹果)再比如判断一个字符串里是否包含某个关键词title Python零基础入门教程 if Python in title: print(这是一篇Python相关的文章)in判断的底层逻辑是遍历容器逐个检查是否存在目标元素。对初学者来说先会用它处理列表和字符串就够了。它和的区别在于是判断两个对象是否相等in是判断“一个东西”是否存在于“一个大容器”中。比如apple fruits是在问“apple字符串是不是等于整个列表”结果显然是False而apple in fruits才是问“apple是不是在fruits列表里”结果才是True。4. 让程序学会“二选一”if-else结构实测4.1 为什么必须要有else前面写的例子都是“如果满足条件就执行某些操作”那如果不满足条件呢程序什么都不做。但实际应用中很多时候我们需要“满足条件是做A不满足条件时至少做B”。比如登录场景用户名和密码正确就进入首页不正确就要提示“登录失败”。如果不满足条件时什么也不做用户会以为自己没点登录按钮体验非常糟糕。这时候就需要else出场了。它的意思很直白如果if条件不成立就走else这条分支。4.2 if-else完整运行逻辑与代码演示来看一个可以直接运行验证的程序password input(请输入密码) if password python123: print(密码正确正在进入系统...) else: print(密码错误请重新输入)这个程序虽然简单但它已经具备了真实的决策能力。程序先从input函数读取用户输入存到password变量中。拿到用户的输入之后if判断这个字符串是否等于“python123”等于就走第一条分支不等于就走else分支。这里有一个细节值提一下input函数得到的永远是字符串类型。如果用户输入数字后面拿这个输入去和整数比较时就需要先做类型转换。比如age input(请输入你的年龄) age int(age) # 把字符串转成整数 if age 18: print(成年人) else: print(未成年人)如果不写int(age)这一步直接用字符串和数字18比较Python在Python 3里会直接抛TypeError。这也是新手最容易踩的坑之一——input返回的是字符串一定要记得根据场景做转换。4.3 一个快速判断“if还是else”的小技巧很多新手写if-else的时候会纠结哪段逻辑放if里哪段放else里我的判断习惯很简单把“正常情况”或“最常见的情况”放到if里把“异常情况”或“兜底处理”放到else里。比如判断用户是否登录成功成功是正常情况放if失败是异常情况放else。判断文件是否存在存在是正常路径放if不存在提示错误放else。这样写出来的代码可读性更好别人看代码时一眼就能看出程序的“主流程”是什么。反之如果把主流程塞到else里读代码的人很容易被绕晕。5. 多个分支怎么办elif让程序拥有更多选择路径5.1 从if-else到elif一种更清晰的表达方式现实生活中的判断远不止“要么A要么B”这么简单。比如成绩评定90分以上是优秀80到89是良好70到79是中等60到69是及格60分以下是不及格。这种多选一的情况如果只用if和else写你得嵌套好几层代码会变得很难读。Python提供了elif它是“else if”的缩写。看下面的代码score 85 if score 90: print(优秀) elif score 80: print(良好) elif score 70: print(中等) elif score 60: print(及格) else: print(不及格)这段代码读起来非常顺畅如果成绩大于等于90输出优秀否则再判断是否大于等于80满足则输出良好……以此类推。程序会从上到下依次检查每个条件一旦发现某个条件成立执行完对应的代码块后就会跳过整个if-elif-else结构的剩余部分不会再继续往下判断了。这是一个非常关键的执行逻辑多个elif分支中最多只会有一个分支被执行。比如score为85第一个条件score 90不成立进入到第二个条件score 80成立输出“良好”之后整段代码结束后面的elif和else都不会再执行。5.2 elif与多个独立if的差别一个性能与正确性并存的问题有些新hand可能会想那我不用elif全用独立的if不也行吗比如score 85 if score 90: print(优秀) if score 80: print(良好) if score 70: print(中等) if score 60: print(及格) if score 60: print(不及格)结果会怎样运行之后你会发现分数85居然同时输出了“良好”“中等”“及格”三行。原因很简单每个if都是独立的判断程序从头到尾把每个条件都检查了一遍。85当然大于等于80也大于等于70也大于等于60所以三个条件都成立三个代码块都执行了。所以在“多选一”的场景下必须使用elif而不是多个独立if。elif把多个条件串联成一个互斥的整体就像“这些路线你只能走一条走了一条后面就全不走了”。用独立if时程序像个不设防的关卡每个入口都放行路径全都会走一遍。这种差异不仅是代码美观问题更是逻辑上有没有bug的问题。5.3 多分支判断的执行顺序一门容易被忽略的必修课elif虽然好用但条件的顺序是很有讲究的。看这个常见的错误写法score 95 if score 60: print(及格) elif score 80: print(良好) elif score 90: print(优秀)问题出在哪score等于95时第一个判断score 60就成立了直接输出“及格”根本轮不到后面的“良好”和“优秀”。因为程序一旦找到一个成立的条件就会立刻结束整个判断链。写多分支时一定要把范围更小的条件放在前面。比如成绩评定“ 90”是最高档你应该先判断它。一个简单的自查办法是实际代入几个边界值比如60、69、70、79、80、89、90从头到尾推一遍看输出是否符合预期。6. 分支嵌套复杂场景的if进阶用法与可读性取舍6.1 嵌套if的真实应用场景有些业务场景里一个大前提下还要做更细的判断。比如网站后台有一个管理员操作执行删除用户的操作前先判断当前用户是否已登录已登录的情况下再判断是否具备管理员权限。这种“先过一关再过第二关”的逻辑用嵌套if来实现非常自然。来看一个更接近真实业务的代码示例is_login True is_admin True username test_user target_user someone if is_login: if username target_user or is_admin: print(允许删除该用户) else: print(没有删除权限) else: print(请先登录)这种写法的逻辑是清晰的只有外层条件成立才会进入内层再做进一步判断。这个结构非常适合表达层层递进的业务规则。6.2 嵌套的正确写法与常见格式错误嵌套的关键在于缩进层级。外层if的代码块缩进4个空格内层if要在这个基础上再缩进4个空格也就是一共8个空格。看代码时内层if通过更深的缩进表示“我是在外层里的”。写嵌套代码时最容易犯的格式错误是忘记为外层if补else分支。假如用户没登录你希望程序至少提示一句“请先登录”但如果外层只写了if没有else那用户没登录时整段代码会直接静默结束看起来就像程序没有任何反应。另外我强烈建议嵌套深度最多不要超过3层。超过3层以后代码的可读性和可维护性会急剧下降。你自己可能还看得懂但过一周再看就未必了。如果业务确实需要很深的分层可以考虑用后面的优化方式改写而不是一路嵌套到底。6.3 嵌套与elif的搭配策略如何保持逻辑清晰嵌套和elif并不冲突在业务复杂时它们经常混合使用。外层判断大前提内层用elif处理细分的多种情况。比如下面这个例子外卖配送费计算。会员和非会员大前提不同会员里又分黄金会员和普通会员is_member True member_level gold order_amount 150 if is_member: if member_level gold and order_amount 100: print(免配送费) elif member_level silver: print(配送费减半) else: print(配送费5元) else: if order_amount 300: print(免配送费) else: print(配送费8元)这种写法读起来思路清晰先区分会员和非会员两大阵营再在各自阵营内根据不同条件做二次分配。写分支逻辑时最忌讳的是把所有条件都摊平在一个大if里强行靠and拼接那样十个条件挤在一起看着都头疼。另外我分享一个小习惯写完嵌套后会立刻检查每个if是不是都有对应的else。如果确实不需要else那就明确注释说明“此条件不成立时无需处理”。否则一旦代码出错空走的分支会让你排查起来非常痛苦。7. 容易搞混的几种判断条件类型从int到str再到None7.1 字符串比较等值判断之外还有大小和包含关系字符串之间可以用判断内容是否完全一致可以用!判断是否不同也可以直接用或进行字典序比较但初级阶段更常用的场景是判断一段内容是否包含某个关键词。比如在一个用户反馈页面你需要判断用户输入的内容是否含有敏感词content 这里是一段普通的用户反馈内容 if 广告 in content: print(内容中包含疑似广告信息需要人工审核) elif 诈骗 in content: print(内容严重违规禁止发布) else: print(内容检查通过)使用in判断字符串时它是区分大小写的。如果需要不区分大小写地判断可以先把双方都转成小写或大写再比较keyword PYTHON if keyword.lower() python.lower(): print(两个字符串在不区分大小写的情况下相同)7.2 数值比较中的边界条件与浮点数陷阱数值比较看似简单但有两个小坑值得注意。第一个坑是边界值的取舍。比如判断年龄“18岁及以上”和“18岁以上”分别对应 18和 18。一个“含”一个“不含”差一个等号业务语义完全不同。现实校验中这往往对应不同的场景写之前要把边界条件想清楚否则容易误判。第二个坑是浮点数比较的误差。比如判断0.1 0.2 0.3在Python里运行结果是False。这是因为计算机用二进制存储小数时0.1和0.2都存在无法精确表示的精度误差导致结果不是0.3。以后遇到浮点数比较时别直接用更好的做法是判断两个数的差值是否小于一个很小的数比如abs(0.1 0.2 - 0.3) 1e-9。7.3 判断变量是否为None的正确姿势在Python中None是一个特殊的值表示“没有值”或“空”。在很多场景下比如函数没有返回结果、某个可选参数没传变量就会是None。判断一个变量是否为None官方推荐的方法是is None和is not None而不是用 None。看这个例子result get_data() # 假设这个函数可能返回None if result is not None: print(获取数据成功) print(result) else: print(获取数据失败返回了空值)推荐用is而不是的原因在于is比较的是身份也就是“是否是同一个对象”而None在Python中是一个唯一的单例对象所以用is判断既准确又高效。使用虽然通常也能达到目的但从语义上看不够严谨。7.4 用bool()判断“真假值”的隐藏规律前面提到Python中有些值会被当作“假”来处理。这个特性在真实场景中很实用如果你想判断一个列表是不是空的可以直接写成if not my_list而不必写if len(my_list) 0。再比如判断用户是否输入了内容username input(请输入用户名) if not username: print(用户名不能为空) else: print(f欢迎你{username})当用户直接按下回车input返回的是空字符串空字符串被视为False所以not 为True程序就能正确提示“用户名不能为空”。以下这些值在条件判断中都会被视为FalseFalse0 和 0.0空字符串 空列表 []空元组 ()空字典 {}空集合 set()None利用这个特性可以让代码更简洁但也要小心不要误判。比如业务上希望“0是合法输入”时就不能用if not value这种写法来判断用户是否填了值因为0会被当成False处理。8. 完整实战把if知识串成一个带菜单的临时认证系统8.1 需求设计与执行流程梳理学了这么多语法知识点最后必须有一个综合性的小项目把它们串起来。我设计一个很接近真实场景的小程序临时员工门禁认证系统。需求如下程序启动后要求来访者输入姓名。姓名为空提示“姓名不能为空”并结束流程。姓名为“admin”直接提示“管理员身份欢迎进入后台区域”。对普通来访者继续询问访问部门。如果访问部门是“技术部”提示“访客中有一位技术方向联系人正在通知联系人确认请稍后”。如果访问部门是“财务部”提示“财务部门需要提前预约请先到前台登记”。其他部门提示“已经记录在案请联系接待人员引导”。如果进入技术部的访客还持有内部工牌直接放行没有工牌则需要暂停等待接待。这个程序涉及字符串输入、空值判断、多分支elif、嵌套判断等多个知识点非常适合作为if语句的完整体检。8.2 完整代码实现与逐段解释下面是完整代码你可以直接复制到自己的Python环境里运行# 临时员工门禁认证系统 name input(请输入您的姓名) if not name: print(姓名不能为空请重新操作。) else: if name admin: print(管理员身份欢迎进入后台区域。) else: print(f访客{name}您好。) department input(请输入您要访问的部门) if department 技术部: print(您要访问技术部正在通知技术部联系人确认。) has_badge input(请确认是否持有内部工牌是/否) if has_badge 是: print(工牌验证通过放行。) elif has_badge 否: print(无工牌请在前台领取临时通行证后在闸机处进入。) else: print(输入有误请重新进行访问登记。) elif department 财务部: print(财务部门需要提前预约请先到前台登记。) else: print(已经记录在案请联系接待人员引导进入。)这个程序比我前面写的任何示例都更接近真实的业务代码。它利用嵌套if处理“先判断来访者身份再判断访问部门最后判断工牌情况”的三层逻辑。你可以自行多测几组数据直接输入admin、输入普通姓名但部门留空、输入财务部、输入技术部且选是、选否、输入其他。每一种输入都会走到对应分支只要有一处不符合预期你就能立刻感受到分支逻辑哪里还需要调整。8.3 用边界值测试验证程序的健壮性程序写完不测试等于白写尤其是这种大量使用if的分支逻辑。建议你至少测试以下几类“边界情况”测试场景输入内容预期结果姓名为空直接回车提示姓名不能为空管理员身份admin提示进入后台普通访客技术部有工牌张三 / 技术部 / 是工牌验证通过放行普通访客技术部无工牌李四 / 技术部 / 否提示去前台领临时通行证普通访客财务部王五 / 财务部提示需要预约普通访客其他部门赵六 / 市场部联系接待人员引导工牌输入非“是/否”张三 / 技术部 / 随便提示输入有误不要跳过这些测试。很多bug不是在正常路径上暴露的而是在边界值上。比如“输入了空部门会怎样”、“has_badge输入了大小写的‘是’会怎样”这些都是边界情况有助于你理解if条件覆盖是否完整。9. 新手学if语句时最常出现的四个错误与排查思路9.1 少写冒号条件行缺了个“”这是入门阶段遇到报错频次最高的一个。if条件那一行末尾必须有英文冒号。漏掉的话Python会报SyntaxError: invalid syntax意思是语法错误。排查方法很简单看到语法错误先检查if那一行结尾是不是有冒号。记住不要用中文冒号Python只认英文冒号。9.2 缩进混乱导致代码不属于它应该属于的分支缩进错误分成两种一种是IndentationError代码缩进不统一程序直接报错另一种是代码能运行但缩进的层级让代码执行逻辑不对出现了隐藏bug。第一种容易发现第二种隐蔽得多。比如在if代码块里本来应该和if平级的代码不小心多缩进了几个空格程序就会把它当成if内部的分支代码来执行导致逻辑完全变化。排查缩进问题最好的办法是在编辑器里打开“显示空格和Tab”的开关。VSCode中可以通过设置把空格显示成小圆点这样每个代码行的缩进关系一目了然再也不会出现“看起来一样、实际一个用空格一个用Tab”的情况。9.3 赋值符号混用把写成这个错前面提到过但因为它太典型必须再强调一次。if x 10这种写法在Python中会直接报语法错误因为Python不允许在条件判断中进行赋值操作。如果你真的想表达“x是否等于10”必须写if x 10。我会在写完条件判断后心里默读一遍“如果x等于10”而不会说“如果x是10”这样能在潜意识里规避这个错误。9.4 类型错位拿字符串跟数字硬比较input函数得到的结果永远是字符串。假如用户输入了18Python拿到的其实是“18”这个字符串。直接拿它和数字18比较大小Python 3会报TypeError: not supported between instances of str and int。正确做法是先做类型转换age_input input(请输入年龄) age int(age_input)但这个转换也不是万能的。如果用户输入的是“abc”或者“十八”int()又会抛ValueError。更健壮的写法是配合try-except做异常捕获不过那是后续的内容现在你只需要记住“字符串不能直接和数字比较”这个规则即可。9.5 “语句看不懂”的拆解习惯先算条件值再看缩进块很多初学者看到一行长得吓人的if条件就蒙了比如if user is not None and user[age] 18 and user[level] in [gold, silver]:我的拆解方法是先把每个子条件单独解出来标出True或False再从左到右推导整体结果。拆解过程大致是user is not Noneuser不是空值假设为True。user[age] 18年龄字段大于等于18如果年龄是25就是True。user[level] in [gold, silver]等级在列表中如果等级是gold就是True。三个True用and连接最终结果是True。拆完之后代码的逻辑就开始清晰了。读懂一行长条件判断的关键不是目测而是先拆成小块逐一确认真假再合成。这种习惯能让你以后面对复杂条件时保持从容。10. 代码可读性的三个细节布尔变量、早退出与条件化简10.1 用有意义的布尔变量给复杂条件命名复杂条件写出来后虽然逻辑正确但可读性很差。别人读代码时必须在脑子里把逻辑推导一遍才能理解。这时候可以引入布尔变量把条件“提炼”出来user {age: 25, level: gold} is_adult user[age] 18 is_vip user[level] in [gold, silver] if is_adult and is_vip: print(尊敬的成年会员欢迎参加相关活动。)is_adult和is_vip这两个变量本身就带有语义即便代码再复杂阅读者也能一眼看懂这段判断是在检查“是否成年”和“是否VIP”。这个习惯在工作后的代码评审中非常重要推荐从学习阶段就养成。10.2 提前结束的分支设计不要把所有逻辑塞进else里另外一种让代码更清晰的方式是提前退出guard clause具体表现就是识别到错误或异常情况时立刻终止当前流程而不是把主流程放到层层else里面。对比一下两种写法不推荐value input(请输入一个数字) if value: number int(value) if number 0: print(f{number} 是正数) else: print(输入的不是正数) else: print(输入不能为空)推荐value input(请输入一个数字) if not value: print(输入不能为空) else: number int(value) if number 0: print(f{number} 是正数) else: print(输入的不是正数)第二种写法把异常情况放在前面直接处理异常情况一旦命中就不会再进入后续逻辑代码层次会显得更平直深入嵌套页面时相对更容易理清。虽然这个例子里的优势还不明显但遇到判定条件比较多、分支很深的场景这个习惯可以帮你保持脑子清醒。10.3 条件太复杂时抽函数是更好的解法如果一个条件长到连布尔变量都救不了比如逻辑上要同时判断权限、时间、状态、黑名单等多个维度这时候应该考虑抽象成函数。等学到函数部分后你可以把“是否具备某种权限”变成一个专门的方法if条件里只调用它即可。这是后话但学习if时就可以有这种“封装”意识。11. 我对if语句学习的几个实际体会这次系统复习if语句比第一次零散学习时确实通透了很多。有几个自己的实际体会写在这里供参考。第一if语法本身一天就能学完但分支逻辑的锻炼需要大量做小题目。不要满足于看懂代码多拿纸笔把一个程序的执行分支手推一遍当你能完全不靠运行就说出任意输入的输出时才算真正掌握了这一段逻辑。第二学习时尽量用小例子验证单个知识点不要一上来就背一堆规则。比如想知道and和or的优先级你就写两三个小print试验一下想知道in对字符串的判断是否区分大小写也写个小例子跑一遍。自己验证出来的记忆比死记硬背牢固得多。第三不要怕报错。写if语句时报错信息反而是你最好的老师。几乎每一条报错都在告诉你精确的行号和原因SyntaxError是语法写错了IndentationError是缩进位错了TypeError是类型不匹配。每次报错后花一点时间读懂报错英文进步会非常快。第四实际写程序时if语句极少单独出现它总是和循环、函数、类绑定在一起。学习初期先把基础分支结构练扎实后面学到while循环和for循环后你会发现条件和循环叠加在一起才是真正解决复杂问题的开始。if是基座这个基座打得稳后面的大楼才不会歪。