ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Python分支结构实战:if-elif-else条件判断与习题拆解

Python分支结构实战:if-elif-else条件判断与习题拆解 学Python有一阵子了如果说哪块语法最值得反复练我会毫不犹豫地说是分支结构。它不是最难的知识点却是最容易被忽视的——if、elif、else看起来就三行语法但真正用起来条件怎么排、边界怎么兜、数据怎么转处处是细节。这篇文章是一份相当实用的分支结构习题拆解我会从环境配置讲起用三道典型题目带你过一遍完整的分析、编码、测试流程再把练题过程中最常踩的坑逐个拆开讲明白。适合刚学Python不久、正在刷题找手感的同学也适合需要现成习题讲解来备课或者带新人的读者。这一篇算是整个Python习题系列的第一篇后面还有循环、函数、列表等专题但无论如何分支结构都是最先要迈过去的门槛。1. 分支结构到底在解决什么问题——先搞懂if的执行逻辑1.1 一句话理解分支结构程序里的看情况办分支结构的本质就是让程序在不同的条件下执行不同的代码。现实里我们每天都在做同款判断出门前看一眼天气下雨就带伞不下就空手走考试成绩出来过60分就是及格没过就是不及格。程序也一样面对不同的输入或运行状态需要选择不同的处理路径这个过程就叫分支。Python里实现分支的最基础语法是if语句骨架长这样if 条件: 条件成立时要执行的代码 else: 条件不成立时要执行的代码这里要特别注意两点新手最容易栽跟头。第一if那行末尾必须有一个英文冒号第二分支体必须缩进。很多教材只说要缩进但没讲为什么——因为在Python里缩进不是排版问题而是语法本身。C语言用花括号{}圈代码块Java、JavaScript也是靠大括号Python直接靠缩进划分。写错缩进程序要么直接抛IndentationError要么静默地跑出完全不对劲的结果。所以学分支结构的第一件事不是背诵语法而是建立缩进即结构的意识。1.2 自上而下逐行检查命中即停最反直觉if-elif-else的执行逻辑有一个非常关键的机制程序从上往下依次检查条件遇到第一个成立的就执行它对应的代码块然后整段分支结束后面的elif和else都不再执行。我管它叫命中即停。举个最常见的例子score 85 if score 60: print(及格) elif score 80: print(优秀)你能立刻说出运行结果吗85分明明也满足score 80但代码只会输出及格不会输出优秀。原因就是elif的条件根本不会被检查——因为第一个if已经命中了Python认为整段分支已经处理完后面的分支直接跳过。这个机制和多个独立if完全不同score 85 if score 60: print(及格) if score 80: print(优秀)这段代码会输出及格和优秀两行因为两个if是独立的各自都会被检查一遍。所以当你要处理的是互斥条件一个数据只能落在一种情况时用if-elif-else当若干条件可能同时成立、并且需要分别处理时才用多个独立if。很多初学者没搞懂这个区别把该用elif的地方写成一串if结果输出了一堆意料之外的内容。1.3 else是兜底不是摆设else在分支结构里的作用是捕获前面所有条件都不成立的场景。它后面不写条件因为它的含义就是剩下的都归我。数据校验场景里else特别好用比如判断一个数是不是在合法区间合法分支写if非法分支写else一目了然。我见过一些人写代码喜欢把所有可能的情况都列成if独独不写else理由是反正不会发生。结果一旦出现没覆盖到的输入程序就什么都不做然后是漫长的debug。我的习惯是凡是有输入的地方必须先想清楚条件全不满足时程序该干什么要么写else兜底要么用pass占位留口子。这个习惯在后面写爬虫、处理数据的时候会特别省心。1.4 两个小语法三元表达式和pass占位分支写多了你会发现有一些极简场景用完整if-else有点啰嗦。比如给变量赋一个二选一的值age 20 status 成年 if age 18 else 未成年 print(status)这叫条件表达式也叫三元表达式。它的结构是值 if 条件 else 另一个值适合最简单的一对一选择。但如果你要判断的条件很复杂、或者在分支里要执行多行代码就老老实实写if-else别硬用三元表达式硬凑否则别人读你的代码会非常痛苦。还有一个非常实用的小语法——pass。当你写了一个分支但暂时不想实现分支体的时候直接留空会报语法错误这时用pass占位if user_input quit: pass # 退出逻辑待补 else: print(继续运行)pass就是什么都不做的占位符。写框架、调试、搭脚手架的时候几乎天天用后面写函数、写类的时候也会经常碰到它。2. 开练之前的环境准备——装Python、配编辑器一次到位2.1 Python解释器先把环境跑通再说练题别小看这一步python安装在检索词里常年霸榜是有原因的。装好了后面刷题快装错了光是环境报错就能耗掉一晚上。Windows用户最省事的路径去python.org下载最新的稳定版安装包双击运行重点记住一点——安装界面第一个弹窗里一定勾选Add Python to PATH。不勾的话之后你在命令行敲pythonWindows会回你不是内部或外部命令那会儿你就会明白为什么会有人在网上到处问。Linux用户不用担心多数发行版自带Python 3少数没有的用系统自带的包管理器装一下就行比如Debian/Ubuntu下是sudo apt install python3Fedora下是sudo dnf install python3。macOS用户推荐用Homebrew装命令是brew install python装完一般会自动处理路径问题。装完怎么确认打开终端Windows叫命令提示符macOS/Linux叫终端敲python --version如果输出类似Python 3.12.x的东西就是装好了。要注意的是多版本共存的环境里Windows有时要敲py --versionmacOS有时要敲python3 --version。这不是bug是系统默认同时存在Python 2/3或者不同版本时的常见状况遇到就用那条带数字后缀的命令。2.2 VS Code与PyCharm编辑器配置避坑指南编辑器选哪个我用一句话总结想轻量、想极速上手选VS Code想开箱即用、想长期做项目选PyCharm社区版。两个我都用过各有各的坑我说几个常见的。VS Code配置步骤其实很简单但新手常在三个地方卡住去官网下载并安装VS Code。打开扩展面板搜索Python安装微软官方发布的那个扩展。打开任意一个.py文件按CtrlShiftP打开命令面板输入Python: Select Interpreter选择你电脑上刚装好的解释器。这里是最多人出错的地方——装了扩展但没选解释器结果一运行就报找不到Python。选对解释器之后很多莫名其妙的报错会自己消失。PyCharm这边下载Community版本就好免费且够用。新建项目的时候界面里有一个Base interpreter选项一定要手动确认它指向的Python解释器路径。PyCharm默认会给每个新项目创建独立的虚拟环境这个机制本身很好但新手不熟悉的时候经常把自己搞晕——昨天刚用pip装的第三方库今天新建项目就找不到了。其实不是库没了是虚拟环境变了。如果不想在这个阶段折腾虚拟环境可以把解释器直接选成系统Python。2.3 第一段验证代码环境通了再进入习题环境配置完毕后先运行一段最小代码验证链路通没通print(hello, python) score 85 if score 60: print(分支结构工作正常)把这段代码保存成test.py在VS Code里右键选Run Python File或者直接在终端里运行python test.py如果看到两行输出恭喜你的Python环境和编辑器已经全部就绪可以开始刷这一篇的习题了。我见过太多人跳过这一步直接写练习结果前面折腾了半天编辑器第一行print都没跑出来。别急这几秒钟环境确认跑通后面所有代码都能稳定复现。3. 习题001三道核心题拆解——从分析到落地3.1 为什么是这三道题我设计习题001时特意选了难度递增的三道题。第一题覆盖最基础的单层分支让你熟悉if-elif-else的骨架第二题是区间判断核心考点是条件顺序和边界值第三题是综合题涉及逻辑运算符、嵌套分支和多条件组合。三道题做完分支结构的大部分考点基本都能覆盖到。这里先说明一下做题的通用套路先读题把条件和结果用自然语言列出来再画分支结构想清楚哪些情况是互斥的、哪些是包含的最后写代码边写边在脑子里跑几个用例验证。看起来慢实际是最快的方式。尤其是后面做题量大了你会发现所有逻辑题的解法都长一个样。3.2 第一题判断一个整数是正数、负数还是零题目输入一个整数判断这个数是正数、负数还是零并输出对应的文字。思路分析一个整数就只有三种可能正数、负数、零三者不可能同时成立所以是一个天然的互斥分支。条件可以这样组织大于0是正数小于0是负数剩下的都是零。注意零不需要单独写elif num 0而是用else兜住代码更简洁。num int(input(请输入一个整数)) if num 0: print(正数) elif num 0: print(负数) else: print(零)运行验证一下输入5程序输出正数输入-3输出负数输入0输出零。三个用例全部符合预期。这题虽然简单但藏着三个重要细节。第一input()返回的是字符串int(input(...))这一步必须做否则拿字符串和整数比大小会直接报错。第二三个分支互斥所以它们的顺序怎么排列结果都一样你可以把负数判断放前面结果不变。第三else兜底的意义在这里体现得很清楚——你不需要穷举num 0这个条件只要逻辑上知道不是正数也不是负数那只能是零就够了。这种排除法思维在后面的算法题里会反复用到。3.3 第二题成绩等级判定题目输入一个0到100的整数成绩输出其等级。90分及以上是A80到89分是B70到79分是C60到69分是D60分以下是F。思路分析这题是区间判断的经典题考点有两个非法输入的处理和条件顺序。先看非法输入如果输入120或者-5怎么办题目说了0到100的整数所以必须先检查这个范围超出范围直接提示不再进行等级判断。再看条件顺序这一步是重中之重。如果你把条件写成if score 80放在if score 90后面那么95分会在第一个if score 80时命中输出B这就错了。我的代码score int(input(请输入成绩0-100)) if score 100 or score 0: print(成绩超出范围) elif score 90: print(A) elif score 80: print(B) elif score 70: print(C) elif score 60: print(D) else: print(F)这里解释一下if score 100 or score 0为什么要用or两个条件只要满足任意一个成绩就是非法的所以用逻辑或连接。而后面四个elif之间没有任何或、与连接靠的完全是命中即停机制逐级拦下来90分以上先被拦住80到89分在第一个条件没命中后、第二个条件命中以此类推。运行验证输入95输出A输入82输出B输入60输出D输入59输出F输入120输出成绩超出范围输入-5输出成绩超出范围。这里60分和59分尤其值得测因为它们是及格和不及格的分界点也是区间判断最容易写错的地方。如果你想把区间写得更显式也可以用Python独有的比较运算符连写if 90 score 100: print(A) elif 80 score 90: print(B)这样写可读性也很好还不用担心顺序问题因为每个条件都把区间边界写死了。两种风格都可以关键是搞清楚一种别混着来。实际项目里我更常用连写的方式因为它能直接表达这个分数落在哪个闭区间不需要靠条件的先后顺序去推理。3.4 第三题判断三角形的类型题目输入三条边的长度判断能否构成三角形。如果能构成再进一步判断是等边三角形、等腰三角形还是普通三角形。思路分析这题是分支结构里的综合题知识点明显多了一层。首先三角形的构成条件是任意两边之和大于第三边也就是三个不等式必须同时成立a b c and a c b and b c a然后在能构成三角形的前提下再判断类型三边相等是等边只有两边相等是等腰否则是普通。参考代码a float(input(请输入第一条边长)) b float(input(请输入第二条边长)) c float(input(请输入第三条边长)) if a b c and a c b and b c a: if a b c: print(等边三角形) elif a b or b c or a c: print(等腰三角形) else: print(普通三角形) else: print(无法构成三角形)运行验证输入3、4、5输出普通三角形输入4、4、6输出等腰三角形输入6、6、6输出等边三角形输入1、2、3输出无法构成三角形。这题有几个容易忽略的点。第一边长要用float()而不是int()因为三角形边长完全可能是小数用int会丢失精度。第二判断等腰时用a b or b c or a c意思是任意两边相等但三边都相等的情况提前被等边判断拦下了所以不会误报。第三嵌套分支虽然能解决问题但层级越深代码读起来越费劲。我更喜欢把结果先存进变量、最后统一输出的写法a float(input(请输入第一条边长)) b float(input(请输入第二条边长)) c float(input(请输入第三条边长)) if a b c and a c b and b c a: if a b c: result 等边三角形 elif a b or b c or a c: result 等腰三角形 else: result 普通三角形 else: result 无法构成三角形 print(result)这种先算结果、最后再输出的模式在实际开发里非常常见逻辑和输出分离方便后面扩展成返回值或者写入日志你可以直接养成这个习惯。3.5 测试用例怎么设计别只跑一组就完事刷题的时候最容易犯的毛病是代码跑通一组输入就宣布胜利。我自己的习惯是每道题至少测四类数据正常值、边界值、非法值、极端情况。以成绩等级题为例我通常会这样测测试输入预期输出测试类型95A正常值85B正常值80B边界值60D边界值59F边界值100A边界最大值120成绩超出范围非法值-5成绩超出范围非法值三角形题也一样3、4、5是正常值3、3、5是等腰边界6、6、6是等边1、2、3是无法构成三角形的边界——因为12恰好等于3不满足大于差一点都不行0、1、2这种带零的情况属于极端输入也要测一下。做完题自己把测试用例表列出来、跑一遍比反复抄代码有用的多。这个习惯放到真实项目里就是单元测试的雏形越早养成越好。4. 这些坑我当年都踩过——分支结构高频问题与实战心得4.1 input()返回的是字符串不转换就比大小直接报错分支结构习题里第一个高频报错是TypeError。原因很统一input()永远返回字符串拿字符串和整数比较大小Python会拒绝执行。score input(请输入成绩) if score 60: # TypeError: not supported between instances of str and int print(及格)解决方案就是在比较之前做类型转换比如int(input(...))或float(input(...))。顺便提醒一句如果你处理的成绩可能是小数别用int()要换成float()因为int(85.5)会抛ValueError。这些问题在写代码时就要想清楚而不是等报错再改。尤其是写那些从外部读数据的程序时输入格式的问题永远放在第一位数据没洗干净后面所有判断都是白搭。4.2 缩进错误Tab和空格混用一行代码毁掉整个分支Python对缩进极为敏感同一个代码块内的缩进必须完全一致。最典型的场景是在VS Code里用Tab缩进写好的代码复制到PyCharm里变成了空格或者反过来结果一运行就报IndentationError: unexpected indent。我的建议是编辑器统一配置用空格代替Tab或者全程保持一种缩进方式。VS Code右下角可以切换缩进类型PyCharm在Settings里也可以设置。新建文件之前检查一下编辑器右下角显示的是Spaces还是Tab养成这个习惯比报错后再排查快得多。另外一个容易忽视的地方是在代码块内部混用了不同层级的缩进——比如if里的代码缩进4个空格下一个分支里缩进了8个空格Python不会报错但可读性会变得非常差而且很容易在逻辑上把自己绕晕。4.3 条件顺序错90分也有可能被判成B这是区间判断题最高频的语义错误——代码不报错但结果完全不对。比如有人会把成绩题写成if score 80: print(B) elif score 90: print(A)95分进去先命中score 80输出B直接结束了。这就是命中即停的副作用。处理区间判断时要么从高到低写条件要么从低到高写但必须保证区间顺序和你的业务逻辑一致。我最推荐从高到低因为代码读起来就像在说最高档先走依次往下边界线清清楚楚。还有一个额外好处是从高到低写时你只需要写一个下限条件上限由前面的分支隐式保证了代码更短也更不容易出现边界缝隙。4.4 Python独有的区间连写省掉一串and在C或者Java里写区间判断通常要写成score 80 score 90。Python有一个舒服的语法比较运算符可以连写if 80 score 90: print(B)这在读代码时非常直观就是80到90之间。但注意别滥用如果判断的是多个不同变量的关系连写就不适用了还是得用and/or比如三角形题里a b c and a c b。连写的本质是同一个对象同时满足几个范围条件一旦涉及多个对象的相互关系老老实实用逻辑运算符别为了炫技写出可读性很差的表达式。4.5 分支不能留空pass是合法的什么都不做写框架或者调试时经常遇到这个分支先不处理的需求。如果分支体直接留空Python会报错。这时候用pass占位if user_input quit: pass # 退出逻辑待补 else: print(继续运行)pass是合法的空语句表示说了要做但现在不干任何事。这个关键字看起来不起眼但在搭骨架阶段几乎天天用。你甚至可以把它当作代码里的一个TODO标记等后面有空再补实现。我见过有人为了躲开pass强行写一个反条件把分支翻转过来结果代码绕来绕去完全没有必要。该占位就占位清晰第一。4.6 覆盖不全比写错更可怕多想想条件都不满足时会发生什么分支结构里逻辑覆盖不全的bug比条件写错更隐蔽。比如你写三角形判断只写了普通和等腰忘了等边那等边就会被误判成普通忘了能否构成三角形这个前提输入1、2、3程序也会煞有介事地输出一个三角形类型。这类问题单靠运行一两次很难发现必须在写代码前就把情况列全。我的经验是每写一个分支结构都问自己三个问题所有合法输入的情况都覆盖了吗边界值有没有被遗漏所有条件都不满足时程序会做什么会不会静默出错把这三个问题想清楚分支结构基本就写扎实了。这个思维往后会直接转化为写正则表达式、写接口参数校验的严谨度学到的每一点点最后都会在更大的项目里回本。至于我个人做完这几道题的体会是什么其实很简单学分支结构练的不是语法而是把业务逻辑翻译成条件判断的能力。后面学循环、学函数、写爬虫、做数据分析全部绕不开这个基本功。所以别小看这一组题慢慢做、把每个坑都弄明白后面的路会顺很多。有一句话我一直跟带的新人说分支结构是Python课程里第一个需要你像写作文一样想清楚逻辑的地方跨过这一关编程思维才算是真正打开了。
返回列表