Python · Day 24

第三次阶段
复习与检测

第二十四天没有学习新语法,而是复习第 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 正常退出。

今天真正掌握的内容

  • 能准确区分 ValueErrorZeroDivisionError
  • strip() 返回新字符串,pop() 会改变原列表
  • 无效索引判断应使用 or 连接两种越界情况
  • 函数名后必须写括号才会真正调用函数
  • 列表变化后要重写文件,结果才能在程序结束后保留
  • 能够独立组合函数、异常、列表、文件和循环菜单

这次检测最明显的进步是:即使概念表达仍有细节需要订正,完整程序已经能够独立写出并通过多种边界测试。