Python 业务规则:条件、循环、容器与异常|课后复习

课堂课件 · 课前原始判断 · 本周导学

今天学会了什么

能把数量、商品与状态规则写成明确分支,逐条处理一组记录,记录失败并保持未成功业务的状态不变。

输入到业务动作的校验顺序

顺着这张图,把成功和失败两条路各走一遍,再画出批量循环中一条失败记录从哪里退出,哪些金额和状态没有被更新。

今天讲了什么(对照复习)

下面逐项对应课堂正文。先盖住右边那一栏,凭记忆回答;卡住了再翻回左边同名的小节。光说得出名字不算会,还要能讲清它会做什么、什么时候会失效。

课堂对应章节必须能解释的机制与边界
先把自然语言规则写成判定顺序;状态迁移:先检查,再一次更新先解析输入,再校验范围、商品与当前状态,成功后才累计或更新。当前课程允许待付款→已付款/已取消;拒绝已付款取消和已取消付款,失败保留原状态。平台完整退款规则不在今天实现。
比较表达式得到 bool;and、or、not 与真值表= 与 不同;比较返回真假,字符串大小不等于整数大小。and 要两侧满足,or 要至少一侧满足;action “pay” or “cancel” 的右侧是非空字符串,不能表达两个比较。
短路求值:为什么条件顺序会影响安全;if / elif / else 是按顺序选择路径短路会跳过不必求值的一侧;具体条件与宽条件的顺序会改变命中分支。先走真值路径再改代码,避免把所有校验挤入一个长表达式。
输入转换和异常边界;真值不等于业务合法只在可预期转换边界捕获 ValueError,失败后不继续使用无效值;不要用 except Exception 吞掉程序缺陷。负数也是真值;bool 在 Python 中与 int 有继承关系,业务数量仍须显式拒绝布尔值。
列表:保存有顺序的一组记录;字典:用键表达一条业务记录;容器可变:两个名称可能指向同一个对象list 保存记录顺序,dict 表达字段;索引越界为 IndexError,缺键为 KeyError。append 原地修改且返回 None;get 的默认值不等于补齐必填字段。赋值给另一名称只是别名,嵌套可变对象需检查共享关系。
for 循环:按顺序取出每个元素;循环的四个观察点;累计:读取旧值,再写入新值识别初始化、本轮取值、条件更新和出口;计数、结果列表、Decimal 总额在循环前初始化。enumerate 提供轮次,range 提供整数序列;先校验本轮,再更新累计。
continue 与 break:业务策略不同continue 跳过本轮余下语句,break 结束当前循环。课程批量坏记录登记后继续,成功数、失败数及总额要与逐条结果相符;停止策略需单独说明未处理范围。
筛选:只把满足条件的记录加入结果;查询:找到就停,找不到也要可观察筛选只收集匹配记录,不修改订单状态;按 ID 查询找到后退出,整轮未找到才报告不存在,不能第一条不匹配就下结论。

出了问题:怎么发现、怎么修、怎么验证

只在你自己那份课程副本或专用实验数据上复验,把改之前和改之后的真实结果都留下来。

风险/现象提前预防怎样发现怎样处理怎样复验
条件误写或真值冒充合法性将每侧条件翻译成完整业务判断检查 -1、0、1、True 与未知动作补显式范围/类型与完整比较各路径结果符合合同,失败状态不变
宽泛捕获吞错或先改后验转换与业务分支分开,更新放成功末端坏输入与非法状态分别运行,比较状态前后缩小 except 范围,移回校验后更新输入错误被说明,程序缺陷仍可定位
别名串线或 append 后列表变 None每条记录独立创建,不接收 append 返回值修改一条后检查另一条及容器类型消除非预期共享,恢复正确修改方式连续处理多条仍互不污染
循环漏记、重置累计或过早报不存在初始化放循环外,记录每轮 ID运行成功—失败—成功、空列表和末项命中修正缩进、continue/break 与未命中出口核对成功数、失败数、总额和未处理项

闭卷自测

先自己答一遍,再去运行或翻回课堂核对;不确定的地方标出来,别用 AI 的答案顶掉你自己的第一次判断。

  1. 依次判断 action 为 pay、cancel、refund 时,错误表达式 action == “pay” or “cancel” 会怎样;说明原因。
  2. 输入 “二”、“0”、“-1”、“1” 与已解析的 True,应分别在哪个边界处理?
  3. 执行 alias = orders 后改 alias[0],为什么 orders 会变化?为什么 orders = orders.append(x) 会出错?
  4. 用成功—失败—成功三条记录手画累计表,分别预测 continue 和 break 的输出与未处理范围。
  5. 目标在列表最后一项或根本不存在时,查询应何时给出结论?筛选函数能否顺手改订单状态?

再看一眼真实业务

将有赞批次手册中实际展示的结果字段与自己的批量输出比较:失败能否定位到记录、能否知道还有哪些未处理?官方文档没写的规则,就让它空着,别自己补。

今天留下什么,下节课怎么接着用

保留批量校验脚本、规则表、逐条结果与状态前后记录,以及中间坏记录的独立变化。W01-D03 用同一组输入冻结行为,再提取函数与模块。

集合用于去重与成员判断;深拷贝在D04首讲。复杂推导式暂不要求,核心仍能逐轮解释。

本次商城补强怎样复验

新增机制商城用途防错与复验
raise/else/finally记录拒绝与已处理数金额放else、计数放finally,正常/错误都核对
tuple/set/切片固定状态、去重、最近记录去重不承诺原顺序,重复编号和末两条对照
while重试输入与退出每轮能改变条件,q必须退出

逐项留下原输入、错误现象、最小修复和再次运行结果。若未运行,不写“问题已解决”。