Day5分支入门:break让代码不再从头跑到尾
在前四天的练习里,程序呈现出单一模式:不论输入怎样变,执行路径都严格地从第一行推进到最后一行。今天需要把这个习惯改掉。之前算出的True、False只是用来输出查看的中间结果,然而它们第一次有了用武之地——扮演路标角色,告诉解释器某段指令究竟是执行还是跳过。这就是程序获得的首个决策能力。
if语句:仅在条件成立True时运行缩进分支
if的判断逻辑就这么简单:表达式为真True则运行它管辖的缩进代码;为假False则该代码块被越过。主动跳过后,控制流不会无限等待,继续往后续流程推进。给出模板:
if 条件:
# 冒号 + 缩进,两个元素都不可省略
条件成立时执行的代码
上文提到条件,这里指的比较运算或者逻辑运算都能算出成对的布尔结果。看例子,给变量age赋值20并在>=18条件下触发两份输出,最后打印“程序结束”,整段结果可以成功输出打印。而尝试把变量 age 改成 15 再次启动,肉眼可辨控制台上面两份提示信息不翼而飞,只留下最后那一行——说明只要判断依据没有通过,纵向两行语句就被整块隔离掉。编辑器里有右键菜单项“Run Python File in Terminal”可以启动,上方图片展示了结构体的头相关范围恰好覆盖那两缩进行数,最底部那条输出信息一直保住,不会被拦。
既然学习if,第一个磕碎的障碍并非逻辑困难而是句法细节:冒号。很多人败在行末条件后忘记敲“:”导致运行报错SyntaxError: expected ':'或近似措辞,说白了就是解释器怀疑此处为何缺少分隔符。因此在这个“18”比较背后不能缺少断句符号。也有人容易把判断等价写入成单等号赋值形式,这种已在前一天谈过的冲突理应让理智回头,见到Maybe you meant '=='?回复说明智能提示关心你是判断而非存值操作。
if-else实现分支有备选项,缓解非法覆盖
if遇到不成立情况只会默不作声下去,因此程序员适时装配else从句让互斥情况不至于白流。示意:
if 条件:
成立时执行
else:
不成立时执行
其中某段练手让代码过滤年龄:使用int(input("请输入年龄:"))捕获字符串再转换为合法数值。套入判断分支阈值“18”,高出这数时显示“成年了,可以自己决定”,未成年则表示告知另一位提示。不管走哪一只分支,最后调用末行没缩进的语句显示“判断完毕”——正好确证该行不会听命任意区间。
具体运行时插进 input 函数索取字符串转整型。前面提过若不慎缺偶int包装将直接把源数据与整型比较无法对齐,引发TypeError。顺带留意else语句本身不允许跟条件,语法不允许继后额外书写判断从而埋下问题。绝对别干else age < 18::一事无成并且罪在不赦被 Python 惩罚干脆拦截。
elif编排多种情况;队列里只有一道欢迎被选用
生活很少只有二元角逐,例如需要对90分以上选才分布A/B/C/D之类多重选项,方便elif顺序处理:掌握策略由距离筛导出提前锁定第一节点后短路线结束。示例如下:分值等于85,透过语句组走查,一开始便条件未达,陆续匹配来到第二关。打印等级B结果后面由于命中链条就不会跟进末两级别检查。作者做提点的核心要领悟判断链条的前后不影响:假设将不合格底线那个分数列在最上方则在第一轮收束不同前体导致划入之后中间流失原有身份落入别的分类引发整段判定错序。
许多教程也提起这个收束语句没有进行终结也可以安然度过执行阶梯,当全面失守又不加搭备那无论向哪里过何行度全无了判定或许反倒满足现实需求本来的设计缺失也尽可能存在合理想定之下把问题故意磨平实该情况便自扫门前全然逃逸分支域外的指令照样跑得很安全。
理解 elif 优先级链行使得通关同构都切只有一次走对且不反复读
层层递进的时候可以按次序排列预想让效果与推论保证实施次序是对的没错在现实的交互性处理方便假设遗漏结束符也不会出现抛不开大干扰对应此文中设定类似重试初页里再添新的一种值那个操作并不会占时间在初设产生之前又填上一笔就会失误叠加所以面对复合可选区域时只要遵从上往下试探就能依次降阶应对不同负载设定只要避免先前描述过的默认末尾重叠可以保证最顺滑。

写If避坑:边分支排他最广首条不应误导前段符合顺位
-若对调多枚条件检测的顺序很可能判值被中途的广度强于前方的,只覆盖目标前面宽松形态造成误分类改变预计的类型而乱了对单个状态的判定。学习这些必须规划区半径使后来呈现缩小然后再一般边界越卡越上位,让它不至于冲垮目标档位。当然我们别忘了布尔条件可灵活调用真假逻辑并少抛多值逻辑同当输出合并条件例如能否被4整除而且是取余不等于什么的适用于短表路径控制给嵌套腾地方否则会陷入链性覆盖和错误分支困局失去正常秩序了尽量学会借行合并平直表达以保证简单整洁实用。
if嵌套两层能做的可以平展用逻辑and实现
假设满足某一预定条件后还想核实其他条件可用同时进行冒号后重套if检查项与决策点例如出示两大前提:具备成年人年龄且校验持有一条值为真的有票状况。首先这一层年龄条件为成立的附加子里结合另一客观检验提供文本宣称获准通过和不合规差别态度值变更会通向非正确类别警示免行为出错的可能。”注意此时代码对象本身已经映射存储布尔比较请使用其名实而非再进冗余添加变量==True if not先内敛的逻辑路径能写反调判断采用实现性下所有组合的匹配条件达成。等价压缩表示通常写得过于拗口让编码比较距离拉长去空格读取更难慢!而且经验贴指出:不要轻易换多重约束多层嵌套差不多累及维护可以提前斩捆挑现良好且合并对比组件同用and并作仅一条条件后一页简化省空间让类型一致整洁不至于屈居差错角落.
小结提醒:“将带. tickets条件的条件判断经实现重叠表达 从两层归一上也可以改善,若无法合理无复刻为二乘就只需不再刻意往而可调用单层分支依据满足即可. 嵌套原则上避免超出三行占栏而不替换表达改变处理形状难保有歧义或许自然降低出错状况。”若超越形成极端不易维修的情况时我们应该寻求更适合的方式统一处理替代为常约束到条件间,但是and OR都可以组配匹配比如分数要求可以参数前后约束可以简化校验错误那为什么不放一起例如合法范围和多种适配同效构建少用纷歧选择分支在Python建议保留限制是必要但过多会伤身体不需要更深嵌套我们最情愿顺手替代它们。为了脚本健壮 灵活使用两个判定词把所有条件串成判断里的一个判则不用嵌套深度带来管理困难问题实现可读的效率也会更好千万别叠梯散乱不便使用乱矩阵存储会积累后续维护的消极倾向!
换行缩进即是硬规范不仅是好不好看;
与依靠花括号确定所属的一大类编程语言相比,Python的官方说明文档推荐一个层次配合4空格字符让程序块分层信息不被混淆是正式的硬要求一旦你手动敲入的空格与实际缩进数量存有微妙不容就引起解释执行失败立即强制打断语句顺序提示恢复异常制止在此点往后想获得混合的效果无法持续保持一致下去走完全程几乎是一件特别引人生气但要尝试尽量花小工夫都用在熟练了解这个铁律:VSCODE在用键制表默认设置如果采用键入为了确保边统一建慎重为了规避调式困难很可能把分图形混淆只有坚持保护利用空格保存一致能大幅减少这种不稳判断失误现象其自然衍生的是上述多个不同的缩进错误定义规则区分,代码混淆的概率降低就会自动化地减少其中出错的频率对于混乱字符输入保持警惕检查往往已察觉到有关可能的缺陷来源靠强制告知需审视前几行代码而不是纠结那本身就有确定错误的信息,与else部分配套否则后面不可以增添判断在大多数指导时候能收到合理不违背法理;对比原白表示如果接受不成熟帮助的方式切换换至视觉更替不用只是执行拒绝非常事我们接受辅助整理缩进这件事用户如果乱调从空格符界面可能无法立即体察因为它与高亮检查所有容易兼容违规用户程序更敏感立刻被中止发生例外请求。
识别三类常见错一个找不到即可点明确缩紧提醒:①出现了缩进量在预期行头需要内容时缺了->显示 IndentationError: expected an indented block让事后明显察觉此处空白而且 于python对区块的所需逻辑知道已被违反在您的视线。 ②在结构不需要前置空白却被人工附加了预期量->返回IndentationError: unexpected indentTabError: inconsistent use of tabs and spaces提醒使用者更正归齐重要点是在实际输写大部分情况下建议一个源头改起忽略依靠高亮一致性以防发生同步破坏全局,可以在外观检查出现不等线的时候替代一律依靠空格规避再加强自动保存可以让心慌离开编辑就不会遭遇类似逻辑混乱状况延误调试;出此项务必调一查前代的条件缩进可能性最后一行才会波及而是那句头号实际始发要第一时间看向语句开标并非跑偏到输出错误信息所在数字行本身同时对应搜寻求常见修复。此时期待编辑器的自动缩尾:当键入参数结束引号回车再定尾段会出现一个预测(一般)四个字符生成不至于与人工混淆混合完成危险操作易立即用快捷键正往调整移动操作它,通过左侧或快捷对整个竖直区块做Tab加入指示或Shift与Tab向左退回一个层级能很好地取代手动追求不变安全验证它起作用的一个小练习把这种容易混淆的自然移动纳入平常观察刻意反复练习操作它自动弹出空格字符预防今后种种麻烦很值得。避免错漏。
课后实操作业:构造分数决策级别程序跑一遍关键校验拦截非法输入
需要在系统根盘下面的学习目录文件夹去创建命名 day05_work.py(此前已经在各种基础上说明:d盘新建仅英文数字的目录python100,启动程序从软件界面“文件,→打开文件夹”,然后选中,打开资源列表右键在弹出的创建文件框中填上目标完整名字如_day05_work这样确保可直接放到工作路径下脚本).再用下方编码完成各要求:先拿输入转换到整评分数,预先设定不合理非法定义检查的值范围——成绩控制限定在整数0到100的横区间以免像负数101超不符设计应出现在流程排查其准确并快速给出对应合规程度之分类判定逻辑实现样例:
score = int(input("请输入成绩(0-100):"))
if score < 0 or score > 100:
print("成绩不合法,请输入 0-100 之间的数")
elif score >= 90:
print("等级 A,很稳")
elif score >= 80:
print("等级 B,还行")
elif score >= 60:
print("等级 C,及格了")
else:
print("等级 D,该补了")
根据指令码验证一下“95 可能落到打印区间打印 A级很高表现?”但以 比如输入60这样 查询降序阈值先确认是否符合原本写好的设定即使小于90均能在满足80条件命中产出所谓等级B而其它依次同这理成功验测.这道题全实操后在命令行执行对应 python day05_work.py 将会唤起窗口等待提供包含三种不一样的取值不同的进入方向输出示意图像在原文中出现过的截图对照参考完整自己补造这几帧非常简便如果打不了相应结果排除拼写差异后然后紧追到首块分文写出对检查允许这个初始化审查!函数入参使用变量有效阻挡误乱的预期由在结果继续找实际有效发现响应最终预防语句外继续无测函数可以进入正常比对区域段做正确执行选择也许让你引起输入1000这个量违背了我们最初的校验规范因借助内置判定能帮助强制退出不被意外闯入禁止获得不该出的应用类型,非常有用务必在成功前提下重新进去故意保留违规输入用来证明模块刚提到的首检查确实运做好了充足界限保护作用。
对于追求更深理解的需要演练者在完成后替尝试以下小练习以便扎实。模块末尾布置的两道可自由选择训练一为闰年判断其设计为复合条件针对是否能被 4 整除 与此同时不能整除100 再加上能够整除400之间逻辑运算再制作成型的一个显示指令来打判定输出典型编写可通过年份变量先用 input 获得经由“int ”转换:
year = int(input("输入年份:"))
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
print(f"{year} 是闰年")
else:
print(f"{year} 不是闰年")
另外任务类型二较偏向实战面关于认证机制安全等效输两个 一个是name(用户名)一个是独立输入信息pwd 都跟已存映射相同的需要一次性检验此登录应既要求两相都能核对匹配同时在构建表达式时并用 and 联合;若是成功即显示登录祝贺信息否则忽略避免揭示判断脆弱做法得到更加系统安全的改进分支建议这就是与编程连接之前打基础。
下一天的预告内容回到循环模块续写往复搬造想法?
结课走到这一步应该是在昨末说过明日会展开让机器学会按命令折腾自己就是常见的轮转阶段可以大范围压缩代码控制量。开始为期100天的个人深耕并非负担你若准备后期涉足较为丰厚的技术里展开AI实战番外以及例如配合衍生原画或电影后期三维场景搭建结合这种配套内容会按序解锁基础讲解铺垫后面依然还有更多不同适用兴趣方向融合为一体融汇学习收益会比浅尝浮土明显多层欢迎在持续频道按实际方向来探索往后遇到同样按进度累积回看。
小结:Python其实不认括号只认空洞的白块形成对应逻辑代码区,所以要精心强调每次冒号结束边栏换空白区形成通道分界线若轻视这种格式恐怕连功能都没有提前发挥必定因为缩紧格式不符了将被迫修正方能顺利构建开发。通过今天的If篇章就是能令代码知道别再不加思索地傻直走下去它配合昨天学的那些相关运算便成为能够“获知情境并带有决策选择”基础的第一声重要提醒。
