第三次阶段
复习与检测
第二十四天没有学习新语法,而是复习第 17—23 天的异常处理、文件读写、列表处理和循环菜单。四部分检测取得 80 分,独立综合编程获得满分。
检测范围与成绩
这次检测包含基础概念、预测程序结果、找错修改和综合编程四部分。前面三部分暴露了几个需要继续巩固的细节,最后的独立编程则完整通过。
基础概念 15 / 20 · 预测结果 15 / 20 · 找错修改 15 / 25 · 综合编程 35 / 35 · 总分 80 / 100
异常名称与执行路线
复习中再次区分了两种常见异常:数字字符串转换失败会产生 ValueError,除数为 0 会产生 ZeroDivisionError。订正确认能够准确写出异常名称。
review
try: # 尝试执行可能失败的数字转换
number = int("abc") # 不能转换成整数时产生 ValueError
except ValueError: # 捕获输入转换错误
print("输入错误") # 给出清楚的错误提示
finally: # 正常或异常时都会执行
print("处理结束") # 完成本次处理的收尾输出
新字符串与原列表的区别
strip() 返回清理后的新字符串,不会改变原字符串;pop() 则会直接删除原列表中的元素,同时返回被删除的内容。这是输出预测部分最需要订正的区别。
review
clean_note = note.strip() # 得到去掉换行符的新字符串
deleted_note = notes.pop(index) # 删除原列表元素并接住被删内容
save_all_notes(notes) # 调用函数永久保存变化后的列表
找错题中的关键订正
无效索引只要满足“小于 0”或“超过列表范围”中的任意一项就应该失败,因此条件使用 or。调用保存函数时还必须写括号,并把变化后的列表作为参数传入。
review
if index < 0 or index >= len(notes): # 任意一种越界情况都判定为无效
return "删除失败,记录编号不存在" # 无效编号不再执行删除
save_all_notes(notes) # 调用保存函数并传入删除后的列表
独立完成错题记录管理器
综合编程要求新建独立文件,完成错题的添加、查看、编号删除和退出。程序正确处理文件不存在、非整数编号、超范围编号和删除后的永久保存,获得 35 分满分。
review_test3.py
def delete_mistake(mistakes, number): # 接收错题列表和用户编号
index = number - 1 # 把显示编号转换为列表索引
if index < 0 or index >= len(mistakes): # 保护所有无效编号
return "删除失败,记录编号不存在" # 无效时提前结束函数
deleted_mistake = mistakes.pop(index) # 删除原列表中的指定错题
save_all_mistakes(mistakes) # 重写文件永久保存删除结果
return "已删除:" + deleted_mistake # 返回被删除的具体内容
实际完成的边界测试
程序先连续添加两条错题并编号显示;输入 abc 时由 ValueError 接住;输入不存在的编号时不会删除;输入有效编号后正确删除并重写文件;重新查看时只剩下一条记录;最后通过选项 4 正常退出。
今天真正掌握的内容
- 能准确区分
ValueError与ZeroDivisionError strip()返回新字符串,pop()会改变原列表- 无效索引判断应使用
or连接两种越界情况 - 函数名后必须写括号才会真正调用函数
- 列表变化后要重写文件,结果才能在程序结束后保留
- 能够独立组合函数、异常、列表、文件和循环菜单
这次检测最明显的进步是:即使概念表达仍有细节需要订正,完整程序已经能够独立写出并通过多种边界测试。